Servlet
Servlet是一个Java程序,一个Servlet应用应该包含一个或多个Servlet程序。JSP页面会转换和编译成Servlet程序
Servlet应用必须运行在Servlet容器中(Tomcat、Jetty等),Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户
Servlet API
- javax.servlet,Servlet和Servlet容器之间契约的接口
- javax.servlet.http,HttpServlet和Servlet容器之间契约的接口
- javax.servlet.annotation,包含Servlet、Filter、Listener的标注
- javax.servlet.descriptor,提供程序化登录Web引用程序的配置信息的类型
Servlet
Servlet技术核心是Servlet,Servlet是每个Servlet程序直接或间接必须实现的接口。
用户的请求会使Servlet容器调用Servlet的Service方法,并传入一个ServletRequest实例和ServletResponse实例。ServletRequest封装了当前的Http请求,ServletResponse表示当前用户的响应。
Servlet接口包含5个方法:
void init(ServletConfig config)throws ServletException
void service(ServletRequset request,ServletResponse response)throws ServletException,java.io.IOException
void destroy()
java.lang.String getServletInfo() :返回Servlet的描述,返回有用的字符串或null
ServletConfig getServletConfig():返回由Servlet容器提供给init方法的ServletConfig
ServletRequest
对于每一个Http请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的Sevice方法。ServletRequest封装了关于这个请求的信息
ServletRequest接口的一些常用方法:
- public java.lang.String getContentType():返回请求主体的MIME(Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型类型),如果不知道,返回null
- public java.lang.String getParameter(java.lang.String name):返回请求参数的值
ServletResponse
javax.servlet.ServletResponse接口表示一个Servlet响应,存储了Servlet容器返回给用户的数据
ServletResponse接口的一些常用方法:
- public java.io.PrintWriter getWriter() throws IOException:返回了一个可以向客户端发送文本的java.io.PrintWriter,默认情况,PrintWriter对象使用的是ISO-885901编码
- public void setContentType(java.lang.String var1):设置响应内容的类型。例如在发送任何HTML标签时,首先调用该方法,设置参数为”text/html”,浏览器默认将其渲染成HTML
- void setCharacterEncoding(java.lang.String var1):设置Servlet容器响应的编码方式。若想给用户传递中文信息,可以在获取PrintWriter对象之前更改编码方式:
response.setCharacterEncoding("UTF-8");
PrintWriter writer=response.getWriter();
ServletConfig
当Servlet容器初始化Servlet,Servlet容器会给Servlet的init方法传入一个ServletConfig。通过ServletConfig对象,可以设置Servlet的初始化参数。ServletConfig封装可以通过@WebServlet或者部署描述符传给Servlet的配置信息(初始化参数,有一个key和value元件)
@WebServlet(name="ServletConfigDemo",
urlPatterns = {"/servletConfigDemo"},
initParams = {
@WebInitParam(name="admin",value="***"),
@WebInitParam(name="email",value="**@*.com")
})
ServletConfig的方法:
- String getServletName():获取Servlet名
- ServletContext getServletContext():获得ServletContext
- String getInitParameter(String var1):获取该参数名的参数值
- Enumeration getInitParameterNames():返回所有参数的名称
ServletContext
ServletContext表示Servlet应用程序,每个Web应用程序只有一个上下文
作用:共享从应用程序中的所有资料处所访问到的信息,将对象保存在ServletContext中的一个内部Map中,保存在ServletContext中的对象被称作属性
下列方法用来处理属性:
- Object getAttribute(String name)
- Enumeration getAttributeNames()
- void setAttribute(String name,Object object)
- void removeAttribute(String name)
HttpServlet
Servlet—>GenericServlet(抽象类,实现了Servlet接口)—>HttpServlet(继承了GenericServlet)
HttpServlet中的Service方法会检验用来发送请求的HTTP方法(通过调用request.getMethod),调用以下方法之一:doGet,doPost,doHead,doPut,doTrace,doOptions,doDelete。doGet和doPost最为常用,不再需要覆盖Service方法,只需覆盖doGet或doPost即可。
HttpServletRequest
扩展了javax.servlet.ServletRequest接口,新增方法:
- String getContextPath():返回表示请求上下文的请求URI部分
- Cookie[] getCookies():返回一个Cookie数组
- String getHeader(String name):返回指定的HTTP标题的值
- String getMethod():返回生成这个请求的HTTP方法的名称
- HttpSession getSession():返回与这个请求相关的会话对象,没有则创建一个新的会话对象
HttpServletResponse
- void addCookie(Cookie cookie):给这个响应添加一个cookie
- void addHeader(String name,String value):给这个响应对象添加一个header
- sendRedirect(String location):发送一条响应码,将浏览器跳转到指定的位置