zoukankan      html  css  js  c++  java
  • JSP基础知识_1

    一.JSP简介

      JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要
      动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写
     JSP 页面的文件扩展名必须为.jsp 
     在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),
     没有嵌套在<%和%>之间的内容被称之为JSP的模版元素
     JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用
     System.out.println语句将它们打印到命令行窗口。
     在JSP页面中也可以使用一种称之为JSP表达式的元素,只需将要输出的变量或表达式直接封装在<%= 和 %>之中,
     就可以向客户端输出这个变量或表达式的运算结果。在JSP表达式中嵌套的变量或表达式后面不能有分号。


    二.JSP运行原理
     •WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。
     •每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet
       的class类文件,然后再  由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP
       页面翻译成的Servlet程序。
    •JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他
      脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。
    •可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。
    从上得出:JSP本质上是一个Servlet,看源代码更能理解
       若项目发布在tomcat中,可以到tomcat的work文件-->Catalina-->localhost-->项目名-->jsp-->org
       -->apache-->jsp下找到jspname_jsp.java和jspname_jsp.class

    Jsp与Servlet的关系

          1、 JSP文件必须在JSP服务器内运行。

          2、 JSP文件必须生成Servlet才能执行。

          3、 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

          4、 JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。

          5、 JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。

          6、 JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。

          7、 JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。

          8、 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。

    三.JSP九个内置对象

    在以下每个jspname_jsp.java中_jspService方法中声明这九个内置对象,所以JSP页面才能在不声明该对象的情况下在<% %>中使用他们

     1 public void _jspService(HttpServletRequest request, HttpServletResponse response)
     2         throws java.io.IOException, ServletException {
     3 
     4       PageContext pageContext = null;//页面上下文,很重要,可以获取页面的一切信息,可以获取其他八个隐藏对象
     5      HttpSession session = null;//代表浏览器和服务器的一次会话
     6      ServletContext application = null;//代表当前web应用,能获取web应用的初始化参数
     7      ServletConfig config = null;//代表当前JSP对应的servlet的对象,几乎不使用,因为需要为该JSP配置初始化参数
     8      JspWriter out = null;//JspWriter对象,常调用out.println()方法,将字符串打印到浏览器,eg out.println("<br/>")换行
     9      Object page = this;//指向当前JSP对应的Servlet对象的应用,但为Object类型,只能调用Object的方法,几乎不用
    10     JspWriter _jspx_out = null;
    11     PageContext _jspx_page_context = null;
    12 
    13    ... ...
    14     Throwable exception =
    15     org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
    16    if (exception != null) {
    17     response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    18      //exception只有在声明了page指令的isErrorPage=true时,才能使用,如下声明:
    19      //在JSP文件首部声明<% page isErrorPage="true" %>
    20 }
    上面九个内置对象中,以下4个称为域对象
       pageContext,request,session,application,他们都有以下属性相关方法:
       1.Object getAttribute(String name):获取指定的属性
       2.Enumeration getAttributeNames():获取所有的属性的名称组成的Enumeration
       3.removeAttribute(String name):移除指定的属性
       4.void setAttribute(String name,Object o):设置属性
       它们的作用域范围如下:
       pageContext:属性的作用范围仅限于当前JSP页面
       request:属性的作用范围仅限于同一个请求
       session:属性的作用范围仅限于同一次会话,即浏览器从打开到关闭称为一次会话(在此期间会话不失效)
      application:属性的作用范围限于当前web应用,最大的属性作用范围,只要在一处设置访问,在各个JSP或Servlet中都可以获取到
     
    四.JSP与Servlet的应用比较
         •JSP是一种以产生网页显示内容为中心的WEB开发技术,它可以直接使用模版元素来产生网页文档的内容。
        •JSP页面的源文件要比Servlet源文件简单,并且JSP页面的开发过程要比Servlet的开发过程简单得多。
        •JSP引擎可以对JSP页面的修改进行检测,并自动重新翻译和编译修改过的JSP文件。
        •JSP技术是建立在Servlet技术基础之上的,所有的JSP页面最终都要被转换成Servlet来运行。
        •在大型WEB应用程序的开发中,Servlet与JSP经常要混合使用,各司其职,Servlet通常用作控制组件,并处理
         一些复杂的后台业务,JSP则作为显示组件。
        •一次响应过程可以划分成几个功能模块来协同完成,首先由Servlet完成流程控制和业务处理,并将结果数据存储
         在request或session域中,然后将请求转发(forward)到JSP页面,再由JSP页面从request或session域中取出结
         果数据并完成响应内容的输出。通过这种方式实现业务逻辑与显示内容的分离,从而将应用程序开发者和网页作者的
         工作分离。

    五.请求的转发与重定向
       1)请求转发
          Servlet请求转发实现过程:   
    1 public void doGet(HttpServletRequest request, HttpServletResponse response)
    2             throws ServletException, IOException {
    3 
    4         System.out.println("forwardServlet doGet");
    5         //1.在doXxx()中调用HttpServletRequest的getRequestDispatcher(String path),并传入转发地址
    6         RequestDispatcher requestDispatcher=request.getRequestDispatcher("testServlet");
    7         //2.调用HttpServletRequest的forward(request,response),进行请求转发
    8         requestDispatcher.forward(request, response);
    9     }

         JSP请求转发实现:

          同理 

    1 <body>
    2     <%
    3       //请求转发
    4      request.getRequestDispatcher("/jsp_result.jsp").forward(request, response);
    5     %>
    6 </body>
       2)重定向
          Servlet重定向实现过程:
    1 public void doGet(HttpServletRequest request, HttpServletResponse response)
    2             throws ServletException, IOException {
    3 
    4         System.out.println("RedirectServlet doGet");
    5         //在doXxx()中执行请求的重定向,直接调用response.sendRedirect(String path),并传入要重定向的地址
    6         response.sendRedirect("testServlet");
    7     }
          JSP重定向实现过程:     
    1 <body>
    2     <%
    3        //重定向
    4        response.sendRedirect("jsp_result.jsp");
    5     %>
    6  </body>
       3)两者的区别

      本质区别是:请求转发只发送一次请求,而重定向则发送两次请求
      具体如下
      (1)转发:地址栏的请求地址是初次发出请求的地址
        重定向:地址栏的请求地址显示为最后重定向的地址
      (2)转发:在最终的Servlet中,request对象和中转的那个request是同一个对象
        重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象
      (3)转发:只能转发给当前web应用的资源
        重定向:可以重定向到任何资源
      (4)转发:path中/ 代表当前web应用的根目录
        重定向:path中/ 代表当前web站点的根目录

  • 相关阅读:
    罗马数字转整数
    对称的二叉树
    python中列表,元组,字符串 互相转换
    python django 批量上传文件并绑定对应文件的描述
    python django mkdir和makedirs的用法
    python 获取两位的月份(09)和天数(09)
    django 注册后台管理 在debug=true能行,在debug=false不能显示出管理标签
    django OperationalError: unable to open database file 创建数据库
    网站安全保证设置及网站认证
    动态的有序分类导航:每个一级标题下都有多个二级标题。
  • 原文地址:https://www.cnblogs.com/javamilan/p/4216126.html
Copyright © 2011-2022 走看看