10016---JavaWeb基础--JSP指令

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

2. 在目前的JSP 2.0中,定义了page、include 和 taglib这三种指令

3. page 指令:

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


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

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

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

③. errorPage isErrorPage:

     > errorPage 指定若当前页面出现错误的实际响应页面时什么. 其中 / 表示的是当前 WEB 应用的根目录.
     <%@ page errorPage="/error.jsp" %>

     > 在响应 error.jsp 时, JSP 引擎使用的请求转发的方式.

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

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

     > 还可以在 web.xml 文件中配置错误页面:

	> 还可以在 web.xml 文件中配置错误页面: 
	
	<error-page>
  	<!-- 指定出错的代码: 404 没有指定的资源, 500 内部错误. -->
	  	<error-code>404</error-code>
	  	<!-- 指定响应页面的位置 -->
	  	<location>/WEB-INF/error.jsp</location>
	</error-page>
	  
	<error-page>
	  	<!-- 指定异常的类型 -->
	  	<exception-type>java.lang.ArithmeticException</exception-type>
	  	<location>/WEB-INF/error.jsp</location>
	</error-page>

 

 

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

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

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

 

3. include 指令: <%@ include file="b.jsp" %>
 1). include 指令用于通知 JSP 引擎在翻译当前 JSP 页面时将其他文件中的内容合并

       进当前 JSP 页面转换成的 Servlet 源文件中,这种在源文件级别进行引入的方式称之为静态引入,

       当前JSP页面与静态引入的页面紧密结合为一个Servlet

2). file属性的设置值必须使用相对路径

3). 如果以 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

4. jsp:incluce 标签:

1). <jsp:include page="b.jsp"></jsp:include>
 
2). 动态引入: 并不是像 include 指令生成一个 Servlet 源文件, 而是生成两个 Servlet 源文件, 然后通过一个方法的方式把目标页面包含
进来.

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

5. jsp:forward:

1).

<jsp:forward page="/include/b.jsp"></jsp:forward>   

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

2). 但使用 jsp:forward 可以使用 jsp:param 子标签向 b.jsp 传入一些参数. 同样 jsp:include 也可以使用 jsp:param 子标签.

<jsp:forward page="/include/b.jsp">
 <jsp:param value="abcd" name="username"/>
</jsp:forward> 

OR

<jsp:include page="/include/b.jsp">
 <jsp:param value="abcd" name="username"/>
</jsp:include>

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

6. 关于中文乱码:

1). 在 JSP 页面上输入中文, 请求页面后不出现乱码: 保证  contentType="text/html; charset=UTF-8",
    pageEncoding="UTF-8" charset 和 pageEncoding 的编码一致, 且都支持中文. 通常建议取值为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="8989" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

JSP指令简介

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

  <%@指令 属性名="" %>

  举例:<%@pagecontentType="text/html;charset=gb2312"%>

  注意:属性名部分是大小写敏感的

在目前的 JSP 2.0 中,定义了 page include taglib 这三种指令,每种指令中又都定义了一些各自的属性。
如果要在一个 JSP 页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。

  第一种方式:

  <%@ page contentType="text/html;charset=gb2312"%>

  <%@ pageimport="java.util.Date"%>

  第二种方式:

  <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>

 Page指令

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

<%@ page

  [ language="java" ]

  [ extends="package.class" ]

  [ import="{package.class | package.*},..." ]

  [ session="true | false" ]

  [ buffer="none | 8kb | sizekb" ]

  [ autoFlush="true | false" ]

  [ isThreadSafe="true |false" ]

  [ info="text" ]

  [ errorPage="relative_url" ]

  [ isErrorPage="true | false" ]

  [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]

  [ pageEncoding="characterSet | ISO-8859-1" ]

  [ isELIgnored="true | false"]

%>

 
 
 
------------------------------------------------------------------------------------------------------------------------------------
 
 

 include指令

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

  <%@include file="relativeURL"%>

  其中的file属性用于指定被引入文件的相对路径 

细节:
   被引入的文件必须遵循 JSP 语法,其中的内容可以包含静态 HTML JSP 脚本元素、 JSP 指令和 JSP 行为元素等普通 JSP 页面所具有的一切内容。 
   被引入的文件可以使用任意的扩展名,即使其扩展名是 html JSP 引擎也会按照处理 jsp 页面的方式处理它里面的内容,为了见明知意, JSP 规范建议使用 . jspf  
   ( JSPfragments )作为静态引入文件的扩展名。
   在将 JSP 文件翻译成 Servlet 源文件时, JSP 引擎将合并被引入的文件与当前 JSP 页面中的指令元素( 设置 pageEncoding 属性的 page 指令除外 ),
   所以, 除了importpageEncoding属性之外 page 指令的其他属性不能在这两个页面中有不同的设置值。
 
•细节:
    --除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,
        然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。 
    --引入文件与被引入文件是在被 JSP 引擎翻译成 Servlet 的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译
         当前JSP页面的源文件与被引入文件的源文件可以采用不同的字符集编码,即使在一个页面中使用page指令的pageEncoding
          或contentType属性指定了其源文件的字符集编码,在另外一个页面中还需要用page指令的pageEncoding或contentType属性指定其源文件所使用的字符集 。
    --Tomcat5.x在访问JSP页面时,可以检测它所引入的其他文件是否发生了修改,如果发生了修改,则重新编译当前JSP页面
    --file 属性的设置值必须使用相对路径 ,如果以“ /” 开头,表示相对于当前 WEB 应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。
 
假设 myweb 应用程序的根目录下有一个 a.jsp 文件,其一般的访问路径形式为:

  http://localhost:8080/myweb/a.jsp

  a.jsp页面中使用了如下语句引入b.jsp文件

  <%@include file=“b.jsp”%>

  请问:这时候JSP引擎调用的b.jspf文件的完整URL路径为什么? 

  如果将a.jsp页面映射为如下地址:

  http://localhost:8080/myweb/dir1/a.html

  请问:这时候JSP引擎调用的b.jspf文件的完整URL路径为:

  http://localhost:8080/myweb/b.jsp  Yes

  http://localhost:8080/myweb/dir1/b.jsp No

JSP标签->概念

JSP 还提供了一种称之为 Action 的元素,在 JSP 页面中使用 Action 元素 可以完成各种通用的 JSP 页面功能 ,也可以实现一些处理复杂业务逻辑的专用功能。
Action 元素采用 XML 元素的语法格式,即每个 Action 元素在 JSP 页面中都以 XML 标签的形式出现。
JSP 规范中定义了一些标准的 Action 元素,这些元素的 标签名都以 jsp 作为前缀,并且全部采用小写 ,例如, < jsp:include > < jsp:forward > 等等。  
< jsp:include > 标签 
< jsp:forward > 标签 
< jsp:param > 标签 
<jsp:include>标签
< jsp:include > 标签用于把另外一个资源的输出内容插入进当前 JSP 页面的输出内容之中,这种在 JSP 页面执行时的引入方式称之为动态引入
语法:

  <jsp:include page="relativeURL | <%=expression%>" flush="true|false" /> 

   page 属性用于指定被引入资源的 相对路径 ,它也可以通过执行一个表达式来获得。
   flush 属性指定在插入其他资源的输出内容时,是否先将当前 JSP 页面的已输出的内容刷新到客户端。  

<jsp:include>标签与include指令的比较

< jsp:include > 标签是在当前 JSP 页面的 执行期间 插入被引入资源的输出内容,当前 JSP 页面与被动态引入的资源是两个彼此独立的执行实体,
  被动态引入的资源必须是一个能独立被 WEB 容器调用和执行的资源
  include 指令只能引入遵循 JSP 格式的文件,被引入文件与当前 JSP 文件共同合被翻译成一个 Servlet 的源文件。
使用 < jsp:include > 标签和 include 指令都可以把一个页面的内容分成多个组件来生成,
  开发者不必再把页眉和页脚部分的相同 HTML 代码复制到每个 JSP 文件中,从而可以更轻松地完成维护工作,
  但是 都应注意最终的输出结果内容应遵循 HTML 语法结构 ,例如,如果当前页面产生了 <html> </html> <body> </body> 等标记,
  那么在被引入文件中就不能再输出 <html> </html> <body> </body> 等标记。
< jsp:include > 标签对 JSP 引擎翻译 JSP 页面的过程不起作用 ,它是在 JSP 页面的执行期间才被调用,
  因此不会影响两个页面的编译。由于 include 指令是在 JSP 引擎翻译 JSP 页面的过程中被解释处理的,所
  以它对 JSP 引擎翻译 JSP 页面的过程起作用 ,如果多个 JSP 页面中都要用到一些相同的声明,
   那么就可以把这些声明语句放在一个单独的文件中编写,然后在每个 JSP 页面中使用 include 指令将那个文件包含进来。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值