Jsp
Posted 上后谈爱情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jsp相关的知识,希望对你有一定的参考价值。
- 1. JSp:由Java代码和html混合在一起的文件,其中的动态内容用Java代码,固定不变用html文件
JSp放置在除了WEB-INF及其子目录外的其他任何的目录中,JSP访问方式和HTML方法一样
JSP运行的原理: JSP的本质上一个Servlet的代码,服务器将找到的Hello.jsp 代码用Servlet容器将其转译成Hello.java代码,编译生成Hello.class 文件最后将响应结果回送给客户端
- 如何查找经过Tomcat服务器生成将Hello.jsp 转译成class文件:
1.找到工作空间:如我的F://IO/WEB
2.F:\\workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0
这就是Tomcat映射的目录,在这个目录中有一个work目录和一个wtpwebapps目录
work目录中顺着:work\\Catalina\\localhost\\项目名字\\org\\apache\\jsp 就可以找到你的项目对应的java文件和class文件(注意要访问jsp后才会出现!)
- 2.九大内置对象:不需要声明,就可以使用其中 request,response.out. seesion ,page,application ,exception,pageContext
PageContext:页面上下文,是PageContext的一个对象,从中获取其他对象,同时获取到当前页面的其他信息
application:获取当前页面的初始化信息
config:Servle初始的对象,必须要在web.xml 获取对jsp进行映射
- 3.属性作用范围:
pageContext:属性作用于当前JSP页面
Seession:作用于一次会话
JSP的注释<!-- -->可以组织Java代码执行
- 4.请求转发 Vs 请求重定向:
- 1.SendRedirect 方法实现请求重定向 Vs ServletContext.getRequestDispatcher(加入绝对路径) .forward +ServletRequest.getRequestDispatcher(相对路径).forwrad()
href超链接客户端跳转,URL会变化
- 2.response重定向和forward跳转的区别
1.response:执行完所有的代码再跳转到目标页 2跳转到目标页后浏览器的URL会改变 3在浏览器中重定向 4可以跳转到其他服务器上的页面 eg:从360---百度。重定向发现URL会发生变化,重定向是两次请求不需要/,转发只是一次请求需要/
最终页面是testServ,明显 重定向中浏览器的url发生变化,转向没有发生变化;
2. forward跳转:1直接跳转到目标网页 其后的代码不再执行 2跳转到目标页后URL不变 虽然URL显示的是index1.jsp 但其实你看的index2。jsp的内容 3在服务器端重定向 4无法跳转到其他服务器上的页面;forwar是服务器内部跳转,浏览器看到url还是跳转前的 URL,如下URL没有变化
3.请求转发 只能转发到当前WEB应用资源,重定向可以定向到任何资源位置
4.转向/ 当前WEb根目录 重定向/ 当前WEB的站点目录
结果显示:属于自己使用 ServletRequestDispathcher.forward(request,response)进行的页面的请求转向
1. 请求test.jsp页面编写 浏览器输入地址:
2.href跳转到的Servlet中 输入路径中加入/path 转发浏览器只发了一次请求
3.重定向跳转的方向:不需要/ 浏览器发生两次请求
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2 // TODO Auto-generated method stub
3 System.out.println("redirect methods");
4
5 String path="testServ";
6 // 不需要/
7 response.sendRedirect(path);
8
9 }
- 3.问题一:为什么建立Servlet类时候 web.xml没有产生 <servlet-mapping>文件 使用Tomcat 7.0之上的版本
查看文档,发现这是Tomcat7.0新特性,在servlet.java页面上自动生成一个 @webServlet 等价于web.xml上的<Servlet-name>和映射
注意 1.如果页面中存在@webServlet 在web.xml不需要再进行写 <servlet-mapping> 代码 ,否则Tomcat出现无法运行问题
注意 2.如果将@webServlet去掉,在web.xml写上自己映射,发现jsp 中<a href="">标签无法进行跳转,可能Tomcat7.0版本之上一个新特性,这样的话,建立了一个servlet不 需要web.xml上 方便大家恩。
- 4. JSP指令 Page include 和taglib
1.作用告诉 引擎如何处理JSP页面中其余部分
2.<%@ 指令 属性=“value” %> 属性大小写敏感
3.设置多个属性,可以在指令总设置多个属性或者单个属性设置
4.属性有:language,import,session="true|false",buffer,info,pageEncoding,contentType
iserrorPage:中使用exception 进行错误的输出,这种东西页面是转发 在error.jsp开头加入 iserrorPage="true",将error.jsp放到WEB-INF/lib下
5.转译过程Java 过程自动导入包
- 6.如何使客户不能直接访问某一个页面?
对于Tomcat服务器,WEb-INF下的文件不允许浏览器直接进行访问,只能够通过转发方式
include指令:使用此指令包含一和HTMl;静态的页面
<% @ include file="a.html"%>
5. JSP动作元素:
<jsp:include> :将另外一个资源输出内容插入到当前的JSP页面中,包含动态页面先进行处理在结果显示;生成多个Java
<Jsp:forward> 相当于一个转发,jsp结果转发给其他东西
将forward跳转到一个 servlet文件;注意加上/, 如果直接调转同目录下.jsp 不需要这样做/
下面中这两句话一样的
param:include 和forward跳转或者包含其他b.jsp 文件在搭配使用param,可以在b.jsp中得到a.jsp 中输入的参数
6.解决中文乱码问题:
1).保持 charset 与pageEncoding方式一致
2)对于post 请求:
request.setCharacterEncoding("utf-8");
String val1= request.getParameter("username")
3)对于get 请求 传输问题采用的是ISO-8859-1
采用解码在编码的方式
String val= request.getParameter("username");
String name=new String(val.getBytes("iso-8859-1"),"UTF-8");
System.out.println(name);
如果使用post方式,修改Tomcat 和JavaEE中servlet.xml <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
在后面添加useBodyEncodingForURI="true"
以上是关于Jsp的主要内容,如果未能解决你的问题,请参考以下文章