JavaWeb学习笔记之JSP(二)

1.1.  JSP的指令:

  1.   什么是JSP 指令?

    JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分。

  2.   JSP 指令有哪些?

    在目前的JSP 2.0中,定义了pageincludetaglib这三种指令。下面我们来介绍关于这些指令的用法,其中taglib指令暂时就不介绍了,等到写关于自定义标签时的一篇文章时再进行介绍。

  3.   page 指令:

   1). page指令用于定义JSP页面的各种属性, 无论page指令出现在JSP页面中的什么地方, 它作用的都是整个JSP页面, 为了保持程序的可读性和遵循良好的编程习惯, page指令一般最好是放在整个JSP页面的起始位置。

  2). page 指令常用的属性:

    ①. contentType: 指定当前 JSP 页面的响应类型. 实际调用的是 response.setContentType("text/html; charset=UTF-8");通常情况下, 对于 JSP 页面而言其取值均为 text/html; charset=UTF-8. charset 指定返回的页面的字符编码是什么. 通常取值为 UTF-8

    ②. pageEncoding: 指定当前 JSP 页面的字符编码. 通常情况下该值和 contentType 中的 charset 一致。

     ③. session 属性:  <%@ page session="false" %>  取值为 true 或 false, 指定当前页面的 session 内置隐式变量是否可用, 也可以说访问当前页面时是否一定要生成 HttpSession对象.

    ④.  errorPage 和 isErrorPage:          

    > errorPage 指定若当前页面出现错误的实际响应页面是哪一个页面. 其中 / 表示的是当前 WEB 应用的根目录.

    > 其中假设当我们访问一个JSP页面时,并且定义该JSP页面的errorPage为error.jsp,在我们访问该JSP页面时若发生错误,我们发现在响应 error.jsp 时地址栏还是访问的当前JSP的页面,故而我们可知 JSP 引擎使用请求转发的方式为我们跳转到error.jsp页面。

    > isErrorPage 指定当前页面是否为错误处理页面, 可以说明当前页面是否可以使用 exception 内置隐式变量. 需要注意的是: 若指定 isErrorPage="true", 并使用 exception 的方法了, 一般不建议能够直接访问该页面. (若直接访问可能发生空指针异常。)

    > 如何使客户不能直接访问某一个页面呢 ? 对于 Tomcat 服务器而言, WEB-INF 下的文件是不能通过在浏览器中直接输入地址的方式来访问的. 但通过请求的转发是可以的!故而我们可以将错误页面放在该目录下。

    > 我们还可以不使用 errorPage属性来指定出错时跳转的错误页面,我们可以通过在 web.xml 文件中配置错误页面:      

 <error-page>

   <!-- 指定出错的代码: 404 没有指定的资源, 500 服务器内部错误. -->
<error-code>404</error-code>
<!-- 指定响应页面的位置 -->
<location>/WEB-INF/not_found.jsp</location>
</error-page> <error-page>
<!-- 指定异常的类型 -->
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/WEB-INF/error.jsp</location>
</error-page>

      ⑤. import 属性: 指定当前 JSP 页面对应的 Servlet 需要导入的类. <%@page import="java.util.Date"%>

      ⑥. isELIgnored: 指定当前 JSP 页面是否可以使用 EL 表达式. 默认取值为 false.

  4.   include 指令:    <%@ include file="Xxx.jsp" %>

  1). include 指令用于通知 JSP 引擎在翻译当前 JSP 页面时将其他文件中的内容合并进当前 JSP 页面转换成的 Servlet 源文件中,这种在源文件级别进行引入的方式称之为静态引入 , 当前JSP页面与静态引入的页面紧密结合为一个Servlet。

   2). file属性的设置值必须使用相对路径,如果以 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

1.2.  JSP标签:

     1.  概念:

      JSP 还提供了一种称之为 Action 的元素,在 JSP 页面中使用 Action 元素可以完成各种通用的 JSP 页面功能,也可以实现一些复杂业务逻辑专用功能。Action 元素采用XML格式来进行使用的。下面就来介绍一些jsp action元素。

     2.   jsp:include标签:  <jsp:include page="Xxx.jsp" flush="true|false"> </jsp:include>

      1).动态引入: 并不是像 include 指令生成一个 Servlet 源文件, 而是生成两个 Servlet 源文件, 然后通过一个方法的方式把目标页面包含进来.jsp文件编译成Servlet 文件后其 java 代码如下:

    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "b.jsp", out, false);

      2). page 属性用于指定被引入资源的相对路径,如果以 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。它也可以通过执行一个表达式来获得。

      3).flush 属性指定在插入其他资源的输出内容时,是否先将当前 JSP 页面已经输出的内容刷新到客户端。

      4). jsp:include 可以使用 jsp:param 子标签传递参数:

    在a.jsp中:

   <jsp:include page="/include/b.jsp " flush="true|false">

  <jsp:param value="123" name="username"/>

  </jsp:include>

    在b.jsp中:

    <%=request.getParameter("username") %>

   3.    jsp:forward 标签:

   1). jsp:forward 用来进行页面的请求转发,如下:

     <jsp:forward page="/include2/b.jsp"></jsp:forward>相当于<%  request.getRequestDispatcher("/include/b.jsp").forward(request, response); %>

    2). jsp:forward 与 Java 代码进行请求转发 二者的区别:

     使用 jsp:forward 可以使用 jsp:param 子标签向 b.jsp 传入一些参数.

    <jsp:forward page="/include/b.jsp " flush="true|false">

      <jsp:param value="123" name="username"/>

    </jsp: forward >

    同理 jsp:include 标签:

    在  b.jsp 页面可以通过:<%=request.getParameter("username") %> 获取到传入的请求参数.

    4.   jsp:param 标签:

     参考jsp:forwrd 标签和 jsp:include 标签,jsp:param 标签 常与jsp:forwrd 标签和 jsp:include 标签一起结合使用。

    5.   关于中文乱码:

   1). 对于JSP页面上输入中文再进行请求后,在响应页面中不出现乱码,需要保证  <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> " charset 和 pageEncoding 的编码一致, 且都支持中文. 通常建议取值为UTF-8。这句page 指令相当于在 Servlet 中进行设置response.setContentType("text/html; charset=UTF-8");response.setCharacterEncoding("utf-8");还需保证浏览器的显示的字符编码也和请求的 JSP 页面的编码一致.

   2). 获取中文参数值: 默认参数在传输过程中使用的编码为 ISO-8859-1

   ①. 对于 POST 请求: 只要在获取请求信息之前(在调用 request.getParameter 或者是 request.getReader 等), 调用 request.setCharacterEncoding("UTF-8"); 即可.

  ②. 对于 GET 请求: 前面的方式对于 GET 无效。可以通过修改 Tomcat 的 server.xml 文件的方式。参照http://localhost:8989/docs/config/index.html 文档的 useBodyEncodingForURI 属性。为 Connector 节点添加 useBodyEncodingForURI="true" 属性即可。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

同时需要在 Eclipse中重新进行对Tomcat 服务器进行映射!

上一篇:LINQ Count/Sum/Min/Max/Avg


下一篇:ZooKeeper的安装、配置、启动和使用(一)——单机模式