• 第二章.JSP/Servlet及相关技术详解


    JSP的4种基本语法:

      1.JSP注释:

        <%-- JSP注释部分 --%>

      2.JSP声明:

        <%! //声明一个整型变量

          public int count;

          //声明一个方法

          public String info(){

            return "hello";

          }

        %>

      3.输出JSP表达式:

        <%=count++%>

        这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号。

      4.JSP脚本:

     1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
     2 <html>
     3 <head>
     4     <title>欢迎</title>
     5 </head>
     6 <body>
     7 <table bgcolor="#9999dd" border="1" width="300px">
     8 <%
     9 for(int i = 0; i < 10; i++){
    10 %>
    11 <tr>
    12     <td>循环值:</td>
    13     <td><%=i%></td>
    14     </tr>
    15 <%
    16 }
    17 %>
    18 </body>
    19 </html>
    View Code

    JSP的3个编译指令:(这里只讲两个)

      1.page指令:位于JSP页面的顶端,一个JSP页面可以是用多条page指令。

      page语法格式:<%@page  contentType="text/html; charset=GBK" language="java" ... %>

    contentType属性参考网页:http://developer.51cto.com/art/201106/270666.htm

      2.include指令:可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。

        include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面不需要是一个完整

         页面。

        静态include格式:<%@include file="relativeURLSpec"%>

    JSP的7个动作指令:

      1.forward指令:用于将页面响应转发到另外的页面。既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet.

      2.include动态指令:用于包含某页面,被包含的页面不会导入包含页面,仅仅将被包含页面的body内容插入本页面。

      3.useBean指令:用于在JSP页面初始化一个Java实例

      4.setProperty指令:用于为JavaBean实例的属性设置值

      5.getProperty指令:用于输出JavaBean实例的属性

      若多个JSP页面需要重复使用某段代码,则可以把这段代码定义成Java类的方法,然后让多个JSP页面调用该方法,这样可以代码复用。

      6.plugin指令:主要用于下载服务器端的JavaBean或Applet到客户端执行。由于程序在客户端执行,所以客户端必须安装虚拟机

      7.param指令:用于设置参数值,该指令不能单独使用,可以与jsp:include、jsp:forward、jsp:plugin三个指令结合使用。

    JSP脚本中的9个内置对象:

      这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化(有JSP页面对应Servlet的_jspService()方法来创建这些实例)。即它们已经是对象,可直接

       使用。

      1.application:javax.servlet.ServletContext的实例,这个实例代表JSP所属的Web应用本身,可用于JSP页面,或者Servlet之间交换信息。

      2.config:javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。

      3.exception:java.lang.Throwable的实例,用来代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用

      4.out:javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。

      5.page:代表该页面本身,也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this。

      6.pageContext:javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文使用该对象可以访问页面中的共享数据。

      7.request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里,获取客户端请求参数必须使用该对象。

      8.response:javax.servlet.http.HttpSerletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。

        response对象常用于重定向。

      9.session:javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器和站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。

    Servlet介绍:

      JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中之后,Web容器会将JSP编译成对应的Servlet。

      直接使用Servlet坏处:Servlet的开发效率非常低,特别是当使用Servlet生成表现层页面时,页面中的所有HTML标签,都采用Servlet的输出流来输出,极其繁琐。

      自MVC规范出现后,Servlet的责任开始明确下来,仅作为控制器使用,不在需要生成页面标签,也不再作为视图层角色使用。

    Servlet的开发:

      Servlet被称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

      Servlet是个特殊的java类,继承自HTTPServlet。

      Servlet提供不同的方法用于响应客户端请求:

        1.doGet:响应客户端的GET请求

        2.doPost:响应客户端POST请求

        3.doPut:响应客户端PUT请求

        4.doDelete:响应客户端DELETE请求

      客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()两个方法。

      大部分时候Servlet对于所有请求的响应都是完全一样的。此时可以采用重写service(HttpServletRequest request, HttpServletResponse response)方法来代替上面的几个方法,

       即可响应客户端的所有请求。

      不用为Servlet类编写构造器,若要对Servlet执行初始化操作,应将初始化操作放在Servlet的init()方法中定义。若重写init(ServletConfig config)方法,则应该在重写该方法的

       第一行调用super.init(config)。这样该方法将调用HTTPServlet的init方法。

     1 package lee;
     2 
     3 import javax.servlet.*;
     4 import javax.servlet.http.*;
     5 import javax.servlet.annotation.*;
     6 
     7 import java.io.*;
     8 
     9 // Servlet必须继承HttpServlet类
    10 @WebServlet(name="firstServlet"
    11     , urlPatterns={"/firstServlet"})
    12 public class FirstServlet extends HttpServlet
    13 {
    14     // 客户端的响应方法,使用该方法可以响应客户端所有类型的请求
    15     public void service(HttpServletRequest request,
    16         HttpServletResponse response)
    17         throws ServletException,java.io.IOException
    18     {
    19         // 设置解码方式
    20         request.setCharacterEncoding("GBK");
    21         response.setContentType("text/html;charSet=GBK");
    22         // 获取name的请求参数值
    23         String name = request.getParameter("name");
    24         // 获取gender的请求参数值
    25         String gender = request.getParameter("gender");
    26         // 获取color的请求参数值
    27         String[] color = request.getParameterValues("color");
    28         // 获取country的请求参数值
    29         String national = request.getParameter("country");
    30         // 获取页面输出流
    31         PrintStream out = new PrintStream(response.getOutputStream());
    32         //输出HTML页面标签
    33         out.println("<html>");
    34         out.println("<head>");
    35         out.println("<title>Servlet测试</title>");
    36         out.println("</head>");
    37         out.println("<body>");
    38         // 输出请求参数的值:name
    39         out.println("您的名字:" + name + "<hr/>");
    40         // 输出请求参数的值:gender
    41         out.println("您的性别:" + gender + "<hr/>");
    42         // 输出请求参数的值:color
    43         out.println("您喜欢的颜色:");
    44         for(String c : color)
    45         {
    46             out.println(c + " ");
    47         }
    48         out.println("<hr/>");
    49         out.println("您喜欢的颜色:");
    50         // 输出请求参数的值:national
    51         out.println("您来自的国家:" + national + "<hr/>");
    52         out.println("</body>");
    53         out.println("</html>");
    54     }
    55 }
    View Code

      Servlet和JSP的区别是:

        1.Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建

        2.对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出

      JSP是Servlet的一种简化,使用JSP只需要完成程序员要输出到客户端的内容,JSP脚本嵌入一个类中由JSP容器完成。

      Servlet是一个完整的Java类,这个类的service()方法用于声称对客户端的响应。

    Servlet的配置:

      编辑好的Servlet源文件并不能响应用户请求,还需将其编译成class文件。将编译后的class文件放在WEB-INF/classes路径下,若Servlet有包,则在WEB-INF/classes路径下创建

       对应的文件夹。

      从Servlet3.0开始,配置Servlet有两种方式:

        1.在Servlet类中使用@WebServlet注解进行配置:参考网址:http://blog.csdn.net/kpchen_0508/article/details/41312735

        2.在web.xml文件中进行配置:参考网址:http://01121264-163-com.iteye.com/blog/1530063

    JSP/Servlet的生命周期:

      JSP本质是Servlet,开发者编写的JSP页面将由Web容器编译成对应的Servlet,当Servlet在Web容器中运行时,其实例的创建及销毁都不是由程序员决定的,而是由Web容器进

       行控制。

      创建Servlet实例有两个时机:

        1.客户端第一次请求某个Servlet时,系统创建Servlet的实例:大部分的Servlet都是这种。

        2.Web应用启动时立即创建Servlet实例,即load-on-startup Servlet。

      每个Servlet的运行都遵循如下生命周期:

        1.创建Servlet实例

        2.Web容器调用Servlet的init方法,对Servlet进行初始化

        3.Servlet初始化后,将一直存在于容器中,用于响应客户端请求。若客户端发送GET请求,Web容器调用Servlet的doGet方法处理并响应请求;若客户端发送POST请求,

         荣器调用Servlet的doPost方法处理并响应请求。或统一使用service()方法来响应用户请求。

        4.Web容器决定销毁Servlet时,先调用Servlet的destroy方法,通常在关闭Web应用之时销毁Servlet。

    深入理解Java对象的创建过程:类的初始化与实例化:http://blog.csdn.net/justloveyou_/article/details/72466416

    Servlet生命周期与工作原理http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html

    Request的getParameter和getAttribute方法的区别: http://blog.csdn.net/huoyunshen88/article/details/8603306

    使用Servlet作为控制器:

      M:Model,模型,对应JavaBean,对数据进行操作

      V:View,视图,对应JSP页面,展示给用户的页面

      C:Controller,控制器,对应Servlet,做出M和V之间的逻辑

    URI和URL的区别:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

     Filter介绍:

      使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter在对服务器响应进行后处理。

      Filter有如下几个用处:

        1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest

        2.根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据

        3.在HttpServletResponse到达客户端之前,拦截HttpServletResponse

        4.根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据

      Filter有如下几个种类:

        1.用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求

        2.日志Filter:详细记录某些特殊的用户请求

        3.负责解码的Filter:包括对非标准编码的请求解码

        4.能改变XML内容的XSLT Filter等

        5.Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截

      创建一个Filter只需两个步骤

        1.创建Filter处理类

        2.web.xml文件中配置Filter

    静态和伪静态网站的区别:http://www.divcss5.com/html/h63.shtml

    使用URL Rewrite实现网站伪静态:http://www.cnblogs.com/ljxxz/p/3560791.html

    <url-pattern>/*</url-pattern>的解释:http://blog.csdn.net/qq_36870779/article/details/62883466

    application,request,session三个对象,谁可以获取谁?http://www.cnblogs.com/z0228-0322x/p/6170588.html

  • 相关阅读:
    20165312 我期望的师生关系
    zookeeper04---ZAB协议
    zookeeper03-集群搭建
    zookeeper02
    Zookeeper01
    防止重复提交
    手动抛出异常事务回滚问题
    redis-07主从复制
    redis06-事务
    Redis-05持久化
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/7461255.html
Copyright © 2020-2023  润新知