JSP学习重点
JSP (java server page java服务器端网页)
jsp:html中嵌套写java代码 相比servlet更简单
servlet:java代码中嵌套写html代码 复杂
JSP它的本质是Servlet
<%
书写java代码
%>
jsp运行原理
--------------------------JSP学习要点---------------------------------
JSP可以放置在WEB应用程序中除了WEB-INF及其子目录 外的任何其他目录中。
JSP的运行原理:jsp本质上还是一个Servlet
每个jsp页面在第一次访问时,JSP引擎先将它翻译成Servlet源程序,接着再把这个servlet源程序编译成class文件,然后由web容器装载。
隐含对象:即不声明就可以直接使用的对象
1.JSP九个隐式对象(不用声明创建就可以直接当对象使用)
1.request httpServletRequest对象
2.session httpSession对象 代表浏览器和服务器的一个会话
3.application ServletContext对象 代表当前web应用,能获取初始化参数(是在web.xml里面定义的初始化参数)
4.response httpServletResponse对象(在jsp页面中几乎不会使用这个对象)
前三个最为重要,也是使用最多的。
5.pageContext PageContext对象 页面上下文,可以从该对象获取其它八个对象,获取当前页面信息(自定义标签时使用)
6.config 当前jsp对应的ServletConfig对象(开发中几乎不使用)
7.out JspWriter对象 调用out.println()方法打印到浏览器中
8.page page=this代表当前jsp对应的Servlet对象引用,类型为Object只能使用Object的方法 (开发中几乎不用)
9.exception 只有在声明了page指令的isErrorPage="true"时才可以使用
pageContext、request、session、application对象的属性作用范围依次变大。这四个对象被称之为域对象
pagContext:属性作用范围仅限于当前JSP页面
request:属性作用范围仅限于同一个请求
session:属性作用范围仅限于同一次回话:浏览器打开直到关闭称之为一次回话(在此期间要保证回话不失效)
application:属性作用范围是当前web应用,是范围最大的属性作用范围。
2.JSP语法:
1.模板元素 即固定的静态页面 html代码
2.jsp输出表达式 <%= %>
3.jsp (java)脚本片段 <% 写java代码。。。 %>
4.jsp的声明 <%! %> 可以声明方法 但是jsp声明几乎不使用
5.jsp注释 <%-- jsp注释 --%>
3.请求重定向和请求转发:(非常重要)
对我的困惑点:关于请求转发和请求重定向的地址的写法
转发地址一般都是:/
重定向地址一般都是没有写/
本质区别:请求转发只发生了一次请求,而重定向则是向服务器发出了两次请求
具体区别:1.请求转发的地址栏不发生改变,重定向会发生改变
2.请求转发转发中最终的servlet里的request对象和最初的那个是同一个对象,请求重定向则不是同一个对象
3.请求转发只能转发到当前web应用的资源,请求重定向可以任何资源
4.请求转发:/ 代表的是当前WEB应用的根目录 http://localhost:8080/project/WebRoot
请求重定向:/代表的是当前站点的根目录 http://localhost:8080/
4.JSP中文乱码解决方案
解决方案:
第一处理级别:修改jsp的编码模板 使 pageEncoding和charset都为utf-8;(修改jsp模板) ---jsp页面显示中文
第二处理级别:获取参数时使用request.setCharset("utf-8"); 对于post请求有用 ---获取参数时候
第三处理级别:修改tomcat的server.xml文件 添加这个useBodyEncodingForURI="true"属性。 ---全局处理
中文乱码问题最好是使用过滤器来解决。
5.JSP: page指令、include指令、JSP标签
比较简单随便了解即可。
请求重定向和请求转发:
总结:
响应重定向:(一个web资源收到客服端的请求后,通知客户端去请求另一个web资源--也就是你向我借钱,我没有,我要你自己去找另一个人借钱)
客户端访问了两次服务器 也就是 两个 response/request
地址栏上的地址会显示出,你重定向后的地址,客户知道了地址变化了
重定向的地址有两种写法 开头一种是加‘/‘斜线,表示访问web容器根目录下(localhost:8080)的资源;
一种是不加斜线' / ',就是访问当前运用下的资源(推荐不加斜线)
重定向的地址可以是web容器内的或其它web应用
应用:重定向一般用在 登录模块,和显示购物车
请求转发:(一个web资源收到客服端的请求后,服务器程序帮客户端去请求另一个web资源,也就是你向我借钱,我没有,我帮你去找另一个人借)
客户端发出了一个请求,转发过程由服务器帮你搞定
转发的地址不加‘/‘斜线,表示访问相对于当前的请求路径而言;
如果使用”/”开头,代表相对于当前上下文路径,即”/”表示应用上下文的根
转发是只能转发到当前web容器的运用里,因为 forward(request,response)
关于/的问题:使用绝对路径绝对没有问题,使用相对路径有时候会出现拿问题。