九步看懂JSP

1、JSP初见
JSP是简化Servlet编写的一种技术,它将Java代码和Html语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写。

》jsp可放在WEB-INF下的任何目录中,路径与普通HTML页面的访问路径形式也完全一样。
》jsp本质上就是servlet。
》jsp引擎将jsp界面jsp翻译成Servlet源文件,接着再编译成Servlet的class文件。
》在jsp中<% java代码块 %> 中编写的代码

2、JSP 9个隐含对象
没有声明就可以使用的对象。
》分别是:request、response、pageContext、session、application、config、out、page这8个隐含对象。(实际上还有一个叫exception的隐含对象)。
》分别是:request、response、pageContext、session、application、config、out、page这8个隐含对象。(实际上还有一个叫exception的隐含对象)。
> requset:HttpServletRequest 的一个对象;
> response:HttpServletResponse的一个对象(在JSP页面中几乎不会调用response的任何方法);
> pageContext:页面上下文,是PageContext的一个对象,可以从该对象中获取到其它8个隐含对象,也可以从中获取页面的其它信息。(学习自定义标签时使用它)
> session:代表浏览器与服务器的一次会话,是HttpSession的一个对象,后面详解。
> application:代表当前WEB应用。是ServletContext对象。
> confing:当前jsp对应的Servlet的ServletConfig对象(开发中几乎不用)。若需要访问当前jsp的初始化参数,需要通过映射的地址才可以。
这里写图片描述

> out:JspWriter对象,调用out.println(),可以直接输出到页面上。
> page:类似于this,指向当前JSP对应的Servlet对象的引用,但为Object类型,只能调用Object类的方法(实际开发几乎不用)
> exception :在声明了page指令的isErrorPage = “true” 时,才可以使用即 <%@ page isErrorPage=”true” %>

3、jsp注释的使用
<%– 注释 –%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译

<!-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容

<\% 代表静态 <%常量
%> 代表静态 %> 常量
\’ 在属性中使用的单引号
\” 在属性中使用的双引号

4、JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
JSP指令语法格式:
<%@ directive attribute=”value” %>
这里有三种指令标签:
指令 描述
<%@ page … %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入标签库的定义,可以是自定义标签
来源: http://www.runoob.com/jsp/jsp-syntax.html
》page指令:
page指令最好是放在整个JSP页面的起始位置。
这里写图片描述

> session 属性:取值为true或false,指定当前页面的session隐藏变量是否可用,也可以说访问当前页面时是否一定要生成HttpSession对象。
>errorPage 和isErrorPage:errorPage指定显示错误的界面,isErrorPage设置是否为errorPage页,从而可用使用exception。
。。。也可以在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>

> 在响应error.jsp时,JSP引擎使用的请求转发的方式。
> 如何使客户不能直接访问某一个页面呢?对于Tomcat服务器而言,WEB-INF下的文件是不能通过在浏览器中直接输入来访问的,但通过请求的转发是可以的!
> contentType:指定当前JSP页面的响应类型。实际调用的是response.setContentType(“text/html;charset=UTF-8”);通常情况下,对于JSP页面而言取值均为text
》jsp:include
动态引入:并不是像include指令生成一个Servlet源文件,而是生成两个Servlet源文件,然后通过一个方法的方式将目标页面包含进来。
org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response,”b.jsp”,out,false);

5、JSP声明
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。
JSP声明的语法格式:
<%! declaration; [ declaration; ]+ … %>
或者,您也可以编写与其等价的XML语句,就像下面:

<jsp:declaration>
   代码片段
</jsp:declaration>

例:

<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>

6、JSP表达式
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。
表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP表达式的语法格式:
<%= 表达式 %>
同样,您也可以编写与之等价的XML语句:

<jsp:expression>
表达式
</jsp:expression>

程序示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p></body></html>

运行后得到以下结果:
今天的日期是: 2016-6-25 13:40:07

7、属性和相关方法
》方法:
这里写图片描述
》pageContext、request、session、application对象都有这些方法!这四个对象也称为域对象。
pageContext:属性的作用范围仅限于当前JSP页面;
request: 属性的作用范围仅限于同一个请求;(在有转发的情况下可以跨页面获取属性值)
session: 属性的作用访问仅限于一次会话:浏览器打开直到关闭称之为一次会话(在此间会话不失效。)
application:属性的作用范围限于当前WEB应用。是范围最大的属性作用范围,只要在一处设置属性,在其他各处的JSP或Servlet中都能获取到。

8、请求的转发和重定向
本质区别:请求转发至发出了一次请求,而重定向则发出了两次请求。
具体:
> 请求的转发:地址栏是初次发出请求的地址。
请求重定向:地址栏不再是初次发出的请求地址。地址栏为最后响应的那个地址。
> 请求的转发:在最终的Servlet中,request对象和中转的那个request是同一个对象。
请求的重定向:在最终的Servlet中,request对象和中转的request不是同一个对象。
> 请求的转发:只能转发给当前WEB应用的资源。
请求重定向:可以重定向到任何资源。
>请求的转发:/ 代表的是当前WEB应用的根目录。
请求重定向:/ 代表的是当前WEB站点的根目录。

注释:((转发和重定向)重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。)
》转发与重定向的实现
request.getRequestDispatcher(“apage.jsp”).forward(request, response);//转发到apage.jsp
response.sendRedirect(“apage.jsp”);//重定向到apage.jsp
在jsp页面中你也会看到通过下面的方式实现转发:

9、关于中文乱码:
》 在JSP页面上输入中文,请求页面后不会出现乱码:保证pageEncoding=”utf-8” 和 charset=utf-8
的编码一致,且都支持中文,通常建议取值为UTF-8,还需保证浏览器的显示的字符编码也和请求的JSP页面的编码一致。
》获取中文参数值:默认参数在传输过程中使用的编码为ISO-8859-1
> 对应POST请求:只要在获取请求信息之前,调用requset.setCharacterEncoding(“UTF-8”)即可。
> 对应GET请求:前面的方式对于GET无效。可以通过修改Tamcat的server.xml文件的方式。
参照http://localhost:8080/doc/index.html文档userBodyEncodingForURI属性。weiConnector节点添加useBodyEncodingForURI=”true” 属性即可。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值