美文网首页关于Java Web的一切Java学习笔记
《Spring MVC学习指南》读书笔记--附录B Servle

《Spring MVC学习指南》读书笔记--附录B Servle

作者: 第四单元 | 来源:发表于2017-04-07 19:14 被阅读25次

    一,附录B Servlet

    必须熟悉Servlet API中定义的70多种类型……

    B.1 Servlet API概述

    4个包:

    javax.servlet                          Servlet,GenericServlet,ServletConfig,ServletRequest,ServletResponse等

    javax.servlet.http                   HTTPServlet

    javax.servlet.annotation         标注

    javax.servlet.descriptor          包含提供程序化登录web应用程序配置信息的类型(?)

    Servlet技术的核心是Servlet接口。编写的所有Servlet类必须直接或间接实现它。

    在一个应用程序中,每种Servlet类型只能有一个实例。

    B.2 Servlet

    Servlet接口中定义了5个方法:   

    void init(ServletConfig config) throws ServletException

    void service(ServletRequest request,ServletResponse response)

    throws ServletException,java.io.IOException

    void destory()

    java.lang.String getServletInfo()

    ServletConfig getServletConfig()

    B.3编写基础的Servlet应用程序

    一开始直接编译有错误,找不到javax.servlet包。这个包根据提示在apache目录下的lib里有。但把apache的lib目录加到classpath中去之后,还是提示有这个错误。这时,我仔细看了一下lib目录下的文件,发现里面都是一些jar文件。根据书上所说,包含javax.servlet的应该是servlet-api.jar。我就把这个文件复制到所要编译的.java文件的同一目录下,并解压缩。这之后,就工作正常了。

    B.4 ServletRequest

    对于每个HTTP请求,Servlet容器都会创建一个ServletRequest对象并将它传递给Servlet的service方法。这个对象中包含HTTP请求的详情,可以通过一些函数获得各种参数。如:getContentlength()     getContentType()    getParameter()     getProtocol()

    其他getParameter()是很重要的一个函数,可以获得form中的参数,get请求的参数等。

    B.5 ServletResponse

    隐藏了向浏览器发送响应的复杂过程。getWriter()可以获得可以向浏览器发送文本的java.io.PrintWriter对象。可以用它来发送html代码。不过在那之前要通过setContentType()设置响应类型为text/html。

    如:

    response.setContentType("text/html");

    PrintWriter writer = response.getWriter();

    writer.print("admin:"+ admin + "
    email:"+ email + "");

    B.6 ServletConfig

    被传递给init()一个ServletConfig。可以通过@WebServlet或者部署描述符传给Servlet的配置信息。

    如:

    @WebServlet(name = "ServletConfigDemoServlet",urlPatterns = { "/servletConfigDemo" },

    initParams = {

    @WebInitParam(name = "admin", value = "Harry Taciak"),

    @WebInitParam(name = "email", value = "admin@example.com")

    }

    )

    注意:像@WebServlet @WebInitParam这些标注在javax.servlet.annotation中定义。

    调用其getInitParameter()方法可以获得WebInitParam中设置的参数。

    如:String admin = servletConfig.getInitParameter("admin");

    B.7 ServletContext

    ServletContext表示Servlet应用程序。每个Web应用程序只有一个上下文。

    对应JSP中的application

    获得:

    ServletConfig.getServletContext()

    在ServletContext中保存、处理属性:

    Object getAttribute(String name)

    getAttributeNames()

    setAttribute(String name,Objec obj)

    removeAttribute(String name)

    B.8 GenericServlet

    GenericServlet实现了Servlet接口。将ServletConfig保存在类级变量中,并且通过getServletConfig()函数可以获取。

    这样在编写自己的Servlet时,可以继承(extends)GenericServlet,不用再将所有方法都实现一遍(特别是在用不到的情况下)。

    GenericServlet提供了不带参数的init()方法,可以覆盖这个方法来编写初始化代码,并且同时使得ServletConfig仍由GenericServlet保存。

    B.9 Http Servlets

    HttpServlet 是用于处理HTTP请求的Servlet类,应用的最为广范。

    不需要覆写service()了,只需覆写doPost()或doGet()或doPost()和doGet()。

    使用HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse

    HttpServlet -- GenericServlet

    HttpServletRequest -- ServletRequest

    HttpServletResponse -- ServletResponse

    //HttpServlet 覆盖了GenericServlet中的service方法,

    public void service(ServletRequest req,ServletResponse res)

    throws ServletException, IOException {

    HttpServletRequest request;

    HttpServletResponse response;

    try {

    request = (HttpServletRequest) req;

    response = (HttpServletResponse) res;

    } catch (ClassCastException e) {

    throw new ServletException("non-HTTP request or response");

    }

    service(request,response);

    }

    HttpServlet添加了一个新的service方法:

    protected void service(HttpServletRequest request,HttpServletResponse response)

    throws ServletException, java.io.IOException

    //HttpServletRequest类中新增的方法:

    java.lang.String getContextPath()

    Cookie[] getCookies()     //返回一个Cookie对象数组

    java.lang.String getMethod()

    java.lang.String getQueryString()

    HttpSession getSession()

    HttpSession getSession(boolean create)

    //HttpServletResponse类中新增的方法:

    void addCookie(Cookie cookie) //给这个响应对象添加一个cookie

    void addHeader(java.lang.String name,java.lang.String value) //给这个响应对象添加一个header

    void sendRedirect(java.lang.String location) //发送一条响应码,将浏览器跳转到指定的位置

    B.10 处理HTML表单

    通过request.getParameter()方法可以获得参数值

    如果表单中有多个项是同一个名字,可以用request.getParameterValues()获得一个参数值数组

    request.getParameterNames()返回所有参数名字,返回类型为Enumeration

    B.11 使用部署描述符

    前面的例子都用了@WebServlet标注来映射Servlet路径。

    也可以在web.xml中使用部署描述符来做这项工作。

    相关文章

      网友评论

        本文标题:《Spring MVC学习指南》读书笔记--附录B Servle

        本文链接:https://www.haomeiwen.com/subject/oltkattx.html