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 服务器进行映射!

JavaWeb学习笔记之JSP(二)的更多相关文章

  1. Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式

    JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...

  2. JavaWeb学习笔记之JSP(一)

    1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...

  3. JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象

    目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...

  4. JavaWeb学习笔记六 JSP

    JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java s ...

  5. JavaWeb学习笔记(十二)—— JDBC的基本使用

    一.JDBC概述 1.1 数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道 ...

  6. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  7. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  8. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  9. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

随机推荐

  1. QT 设置SizePolicy的例子(简单明了)

    http://hi.baidu.com/cybertingred/item/e8eadaad0c7f62f615329be7   QPushButton *left = new QPushButton ...

  2. redis 基本使用

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  3. bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1147  Solved: 528[Submit][Statu ...

  4. 开源项目AndroidUtil-采用Fragment实现TabHost

    原文出自:方杰|http://fangjie.info/?p=141 转载请注明出处 学习Android也有一段时间了,感觉大部分的Android应用都有很多类似的组件,所以就打算做了这样一个开源项目 ...

  5. DatabaseMetaData的用法【转载】

    一 . 得到这个对象的实例Connection con ;con = DriverManager.getConnection(url,userName,password);DatabaseMetaDa ...

  6. mysql二进制

    1.     从http://www.mysql.com下载二进制版的Mysql安装包     //这个MYSQL是二进制版的,不用编译 Linux (x86)        5.0.41    59 ...

  7. Linux操作系统以及各大发行版介绍——Linux operating system and major distribution is introduced

    什么是Linux? 也许很多人会不屑的说,Linux不就是个操作系统么.错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核.内核是什么?内核建立了计算机软件与硬件之间通讯的平 ...

  8. motan源码分析五:cluster相关

    上一章我们分析了客户端调用服务端相关的源码,但是到了cluster里面的部分我们就没有分析了,本章将深入分析cluster和它的相关支持类. 1.clustersupport的创建过程,上一章的Ref ...

  9. Jquery 的bind(), live(), delegate(), on()绑定事件方式

    1. 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅. bind() 适 ...

  10. 用微信点单 订餐系统打造属于个人的O2O外卖订餐行业商业平台

    首先,我不能说我是一个成功的微信达人,我也不能说我是一个优秀的互联网专家.但我就眼下所使用的一套订餐系统来讲.正在逐渐的规划一个餐饮行业的商业圈! 我所使用的系统叫"微铺子订餐系统" ...