Jsp

  • 1. JSp:由Java代码和HTML混合在一起的文件,其中的动态内容用Java代码,固定不变用html文件

JSp放置在除了WEB-INF及其子目录外的其他任何的目录中,JSP访问方式和HTML方法一样

JSP运行的原理: JSP的本质上一个Servlet的代码,服务器将找到的Hello.jsp 代码用Servlet容器将其转译成Hello.java代码,编译生成Hello.class 文件最后将响应结果回送给客户端

  1. 如何查找经过Tomcat服务器生成将Hello.jsp 转译成class文件:

                          1.找到工作空间:如我的F://IO/WEB

                         2.F:workspace.metadata.pluginsorg.eclipse.wst.server.core mp0 

        这就是Tomcat映射的目录,在这个目录中有一个work目录和一个wtpwebapps目录

        work目录中顺着:workCatalinalocalhost项目名字orgapachejsp 就可以找到你的项目对应的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页面编写 浏览器输入地址:

View Code

2.href跳转到的Servlet中 输入路径中加入/path  转发浏览器只发了一次请求

View Code

        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"

原文地址:https://www.cnblogs.com/woainifanfan/p/6653688.html