美文网首页关于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