JSP指令

作者: 咸鱼有梦想呀 | 来源:发表于2018-08-01 16:29 被阅读20次

    一、JSP指令

    JSP指令的格式

    <%@指令名 attr1=”” attr2=”” %>

    例如自动生成的jsp页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    

    JSP中有三大指令

    page、include、taglib

    page最常用也最复杂

    二、page指令

    page指令是最为常用的指令!
    page指令没有必须属性,都是可选属性。在JSP页面中,任何指令都可以重复出现。

    1.pageEncoding和contentType

    • pageEncoding
      指定当前JSP页面的编码。在服务器要把jsp编译成.java时需要使用pageEncoding

    • contentType
      它表示添加一个响应头:Content-Type!等同于response.setContentType("text/html;charset=utf-8");

    当设置了pageEncoding,而没设置contentType时: contentType的默认值为pageEncoding;
    当设置了contentType,而没设置pageEncoding时: pageEncoding的默认值与contentType;
    两个都没设置默认为iso-8859-1

    2.import属性
    import:等同与import语句
    import属性是唯一可以重复出现的属性

    <%@page import=”java.util.*” import=”java.net.*” import=”java.sql.*”%>
    

    import属性值可以使逗号

    <%@page import=”java.net.*,java.util.*,java.sql.*”%>
    

    但是一般会用多个page指令导入多个包

    <%@ page import=”java.util.*”%>
    <%@ page import=”java.net.*”%>
    <%@ page import=”java.text.*”%>
    

    3.errorPage和isErrorPage
    一个JSP页面出错后,Tomcat会响应给用户错误信息(500页面)!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!也就是自定义错误页面

    • errorPage
      如果当前页面出现异常,那么跳转到errorPage指定的jsp页面。(转发)
      例如:
    <%@ page errorPage="a.jsp" %>
    
    • isErrorPage
      它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!
    <%@page isErrorPage="true"%>
    

    web.xml中配置错误页面
    web.xml

    <error-page>
      <error-code>404</error-code>
      <location>/error404.jsp</location>
    </error-page>
    
    <error-page>
      <error-code>500</error-code>
      <location>/error500.jsp</location>
    </error-page>
    
    <error-page>
      <exception-type>java.lang.RuntimeException</exception-type>
      <location>/error.jsp</location>
    </error-page>
    
    • <error-code>
      是指定响应码;
    • <location>
      指定转发的页面;
    • <exception-type>
      是指定抛出的异常类型。

    4.autoFlush和buffer

    • autoFlush
      表示在out对象的缓冲区满时如果处理!当authFlush为true时,表示缓冲区满时把缓冲区数据输出到客户端;当authFlush为false时,表示缓冲区满时,抛出异常。authFlush的默认值为true。

    • buffer
      表示当前JSP的输出流(out隐藏对象)的缓冲区大小,默认为8kb。

    5.isELIgnored
    当前JSP页面是否忽略EL表达式,默认值为false,表示不忽略(即支持)。

    6.其他属性(没啥用)

    • language
      指定当前jsp编译后的语言类型,默认值为java。
    • info
      JSP说明性信息
    • isThreadSafe
      当前的JSP是否支持并发访问
    • session
      默认为true,表示当前JSP页面可以使用session对象,如果为false表示当前JSP页面不能使用session对象
    • extends
      指定当前JSP页面生成的Servlet的父类

    二、include和taglib指令

    • include
      静态包含:在运行前就合成一个文件
      目的是把多个JSP合并成一个JSP文件
      include指令只有一个属性:file,指定要包含的页面
      例如
    <%@include file=”b.jsp”%>
    

    作用
    把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

    • taglib
      导入标签库
      例如
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    prefix:指定标签库在本页面中的前缀!由我们自己来起名称!
    uri: 指定标签库的位置!

    前缀的用法<s:text>

    三、JSP九大内置对象

    • out(JspWriter)
      等同与response.getWriter(),用来向客户端发送文本数据;
    • config(ServletConfig)
      对应“真身”中的ServletConfig;
    • page(当前JSP的真身类型)
      当前JSP页面的“this”,即当前对象;
    • pageContext(PageContext)
      页面上下文对象,它是最后一个没讲的域对象;
    • exception(Throwable)
      只有在错误页面中可以使用这个对象;
    • request(HttpServletRequest)
      即HttpServletRequest类的对象;
    • response(HttpServletResponse)
      即HttpServletResponse类的对象;
    • application(ServletContext)
      即ServletContext类的对象;
    • session(HttpSession)
      即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。

    pageContext
    在JavaWeb中一共四个域对象,其中Servlet中可以使用的是request、session、application三个对象,而在JSP中可以使用pageContext、request、session、application四个域对象。

    1.pageContext作用

    • 域对象功能;
      • void setAttribute(String name, Object value);
      • Object getAttrbiute(String name, Object value);
      • void removeAttribute(String name, Object value);
    • 代理其它域对象功能;
      可以使用pageContext来代理其它3个域对象的功能,也就是说可以使用pageContext向request、session、application对象中存取数据
      例如:
    //向pageContext中存储数据
     pageContext.setAttribute("x", "X");
    //向request中存储数据
     pageContext.setAttribute("x", "XX", PageContext.REQUEST_SCOPE);
    //向session中存储数据 
    pageContext.setAttribute("x", "XXX", PageContext.SESSION_SCOPE);
    //向application中存储数据
     pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE);
    
    • 获取其他内置对象;
      个pageContext对象等于所有内置对象,即1个当9个。这是因为可以使用pageContext对象获取其它8个内置对象

      • JspWriter getOut()
        获取out内置对象;
      • ServletConfig getServletConfig()
        获取config内置对象;
      • Object getPage()
        获取page内置对象;
      • ServletRequest getRequest()
        获取request内置对象;
      • ServletResponse getResponse()
        获取response内置对象;
      • HttpSession getSession()
        获取session内置对象;
      • ServletContext getServletContext()
        获取application内置对象;
      • Exception getException()
        获取exception内置对象;
    • 全域查找
      pageContext.findAttribute("xxx");
      依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!

    四大域范围

    • ServletContext
      整个应用程序
    • session
      整个会话(一个会话只有一个用户)
    • request
      一个请求链
    • pageContext
      一个jsp页面
      这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!

    四、JSP的动作标签

    动作标签是由tomcat(服务器)解释执行的,和Java代码一燕,都是在服务器端执行的。
    html是由浏览器执行的。

    动作标签的作用是用来简化Java脚本的!

    JavaWeb一共提供了20个JSP动作标签,但有很多基本没有用

    • <jsp:include>
      <jsp:include>标签的作用是用来包含其它JSP页面的
      include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!
      include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。

    • <jsp:forward>
      forward标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。

    • <jsp:param>
      在<jsp:include>和<jsp:forward>标签中使用<jsp:param>子标签,它是用来传递参数的
      例如:

    a.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>a.jsp</h1>
    <jsp:forward page="b.jsp">
        <jsp:param name="username" value="zhangsan"></jsp:param>
    </jsp:forward>
    </body>
    </html>
    

    b.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>b.jsp</h1>
    <%
        String username = request.getParameter("username");
        out.print("你好"+username);
    %>
    </body>
    </html>
    
    运行结果
    • <jsp:useBean>
      创建或查找JavaBean对象
      把创建的JavaBean对象保存到域对象中
      <jsp:useBean>标签默认是把JavaBean对象保存到page域,还可以通过scope标签属性来指定保存的范围
    <jsp:useBean id="user1" class="cn.domain.User"  scope="page"/>
    
    • <jsp:setProperty>
      给JavaBean设置属性值
      在使用之前要先创建JavaBean

    • <jsp:getProperty>
      获取属性值
      在使用要先创建JavaBean

    相关文章

      网友评论

        本文标题:JSP指令

        本文链接:https://www.haomeiwen.com/subject/rrclvftx.html