Jsp学习(二)

内置对象

1、定义

  • JSP内置对象是Web容器创建的一组对象,不使用new关键字创建,就可以直接使用。
  • 在xxx_jsp.java 文件中对内置对象做了声明,由容器实现和管理,在所有的Jsp页面中都能使用内置对象,内置对象在JSP初始化时生成。

JSP的9个标准内置对象

1、application

  • 是 ServletContext 类型

2、request

  • 是HttpServletRequest类型

3、response

  • 是HttpServletResponse类型

4、page

  • 和this是同一个对象
  • 是一个servlet

5、session

  • 是HttpSession类型

6、config

  • 是ServletConfig类型
  • 在web.xml中配置初始化参数(使用jsp-file标签制定特定的jsp页面):
              
    <servlet>
        <servlet-name>JspConfig</servlet-name>
        <jsp-file>指定要使用config的jsp的页面</jsp-file>
        <init-param>
            <param-name>name</param-name>
            <param-value>Edward</param-value>
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>JspConfig</servlet-name>
        <url-pattern>/config.do</url-pattern>
    </servlet-mapping>        

测试案例:

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

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>config</title> </head> <body> <h3> InitParameter : <%=config.getInitParameter( "name") %>
  </h3> 

</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <servlet>
        <servlet-name>config.do</servlet-name>
        <jsp-file>/builtin/config.jsp</jsp-file>
        <init-param>
            <param-name>name</param-name>
            <param-value>罗玉凤</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>config.do</servlet-name>
        <url-pattern>/config.do</url-pattern>
    </servlet-mapping>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <servlet>
        <servlet-name>config.do</servlet-name>
        <jsp-file>/builtin/config.jsp</jsp-file>
        <init-param>
            <param-name>name</param-name>
            <param-value>罗玉凤</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>config.do</servlet-name>
        <url-pattern>/config.do</url-pattern>
    </servlet-mapping>

</web-app>
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP的9个标准内置对象</title> </head> <body> <h3>JSP的9个标准内置对象</h3> <ul> <li><a href="">application</a> <ol> <li> <%out.println(application); %></li> <li> <%= application %></li> <li> application 是否是 ServletContext 类型: <%=application instanceof ServletContext%></li> </ol> </li> <li><a href="">request</a> <ol> <li> <%=request %></li> <li> request 是否是 HttpServletRequest 类型: <%=request instanceof HttpServletRequest%></li> </ol> </li> <li><a href="">response</a> <ol> <li> <%= response %> </li> <li> response 是否是 HttpServletResponse 类型: <%= response instanceof HttpServletResponse %> </li> </ol> </li> <li><a href="">session</a> <ol> <li> <%=session %> </li> <li> session 是否是 HttpSession 类型: <%= session instanceof HttpSession %> </li> </ol> </li> <li><a href="">pageContext</a> <ol> <li> <%= pageContext %> </li> <li> pageContext 是否是 PageContext 类型: <%= pageContext instanceof PageContext %></li>
          <li><a href="<%= request.getContextPath()%> /builtin/pageContext.jsp">pageContext</a></li> </ol> </li> <li><a href="">out</a> <ol> <li> <%=out %> </li> <li> out 是否是 JspWriter 类型: <%=out instanceof JspWriter %></li> </ol> </li> <li><a href="javascript:;">config</a> <ol> <li> <%= config %> </li> <li> config 是否是 ServletConfig 类型: config instanceof ServletConfig %> </li> <li><a href="<%= request.getContextPath()%> /builtin/config.jsp">config ( jsp )</a></li> <li><a href="<%= request.getContextPath()%>/config.do">config ( servlet ) </a></li> </ol> </li> <li><a href="">exception</a> <ol> <li> <a href="<%= request.getContextPath() %>/throw.jsp">throw</a> </li> </ol> </li> <li><a href="">page</a> <ol> <li> <%= page %> </li> <li> page 和 this 是否是 同一个对象: <%=page == this %> </li> <li> page 是否是 一个 Servlet : <%=page instanceof Servlet %> </li> </ol> </li> </ul> </body> </html>

运行结果如下:

JSP页面配置其实也是在web.xml文件中的进行,JSP被当成Servlet配置,为Servlet配置参数使用init-param元素,config内置对象就可以接受param-name和param-value分别指定参数名和参数值。 

7、out

  • 是JspWriter类型
  • JspWriter直接继承了Writer

8、exception

  • 对于要处理异常的页面,需要声明这是一个错误指令页面
<%@ page isErrorPage = "true" %>
  • 在可能发生异常的页面,需要制定错误处理页面
<%@ page errorPage= "catch.jsp"%>
  • 针对特定的错误页面处理:

在web.xml中配置(针对特定错误代码或者异常类型)

<error-page>
    <error-code>错误代码</error-code>
    <exception-type>异常类型</exception-type>
    <location>发生错误去的页面</location>
</error-page>

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8" %>
<%@ page errorPage= "catch.jsp"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>throw</title> </head> <body> <h3>在可能发生异常的页面中使用 &lt;%@ page errorPage="catch.jsp" %&gt; 指定错误处理页面 </h3> <h3> <%=100 / 0 %> </h3> </body> </html>
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8" %>

<%@ page isErrorPage = "true" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>exception</title> </head> <body> <h3>对于要负责处理异常的页面,首先需要通过指令声明这是一个错误处理页面</h3> <h3>只有声明了 &lt;%@ page isErrorPage="true" %&gt; 的页面才会有 exception 对象存在</h3> <h3> exception : <%= exception %></h3> <h3> exception message : <%=exception.getMessage()%></h3> </body> </html>

运行结果如下:

内部发生的是forward操作,浏览器地址没有发生改变

 404页面处理测试案例:

    <error-page>
        <error-code>404</error-code>
        <location>/builtin/404.jsp</location>
    </error-page>·
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8" %>

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>404</title> </head> <body> <h1>404</h1> <h3>你所访问的页面被外星人劫持了</h3> </body> </html>

9、pageContext

  • 是PageContext类型(PageContext是JspContext的子类)
  • 可以通过pageContext获得其他内置对象

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8" %>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>pageContext</title> </head> <body> <h4> application:<%=pageContext.getServletContext()%> </h4> <h4> request:<%=pageContext.getRequest()%> </h4> <h4> response:<%=pageContext.getResponse() %> </h4> <h4> session:<%=pageContext.getSession()%> </h4> <h4> config:<%=pageContext.getServletConfig() %> </h4> <h4> page:<%=pageContext.getPage()%> </h4> <h4> out:<%=pageContext.getOut()%> </h4> <h4> exception:<%=pageContext.getException()%> </h4> <hr> <h4> Eexpresssion Language:<%=pageContext.getExpressionEvaluator()%> </h4>
</body> </html>

转载请于明显处标明出处

https://www.cnblogs.com/AmyZheng/p/9129504.html

posted @ 2018-06-03 17:14  AmyZheng  阅读(210)  评论(0编辑  收藏  举报