zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    nginx与uwsgi介绍
    Pycharm快捷键
    短信和图片验证码
    linux部署Django脱坑指南
    面试题汇总(七)
    面试题汇总(六)
    面试题汇总(五)
    面试题汇总(四)
    面试题汇总(二)
    iOS Block的本质(四)
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6653688.html
Copyright © 2011-2022 走看看