这学期学Java Web,把相关知识点理了一下
Servlet接口
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
- void init(ServletConfig var1):该方法接收一个ServletConfig类型的参数,Servlet容器通过这个参数向Servlet传递初始化配置信息
- ServletConfig getServletConfig():返回Servlet的ServletConfig对象,ServletConfig对象中包含Servlet的配置信息
- void service():生成HTTP响应
- String getServletInfo():返回一个包含该Servlet信息的字符串
- void destroy():当服务器关闭或者Servlet对象被移除时,Servlet容器便会调用这个方法销毁Servlet对象
一般自己实现的Servlet类都继承自HttpServlet,而响应HTTP请求也不是直接重写service()方法而是重写HttpServlet的doGet()和doPost()方法,并且使用HttpServletRequset和HttpServletResponse而不是ServletRequest和ServletResponse
Servlet的实现,ServletConfig与ServletContext
@WebServlet(name = "MyServlet",urlPatterns = {"/myservlet"},
initParams = {@WebInitParam(name = "age",value = "20"),
@WebInitParam(name = "name",value = "MerryiTuXz")})
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
String name = servletConfig.getInitParameter("name"); //获取初始化参数
System.out.println(name); // 'MerryiTuXz'
ServletContext servletContext = getServletContext();
servletContext.setAttribute("date",new Date());
Date date = (Date) servletContext.getAttribute("date");
System.out.println(date); // 打印访问页面的时间
Enumeration<String> attributeNames = servletContext.getAttributeNames();
while (attributeNames.hasMoreElements())
System.out.println(attributeNames.nextElement());
/*javax.servlet.context.tempdir
date
org.apache.catalina.resources
org.apache.tomcat.InstanceManager
org.apache.catalina.jsp_classpath
javax.websocket.server.ServerContainer
org.apache.jasper.compiler.ELInterpreter
org.apache.jasper.compiler.TldCache
org.apache.tomcat.JarScanner
org.apache.jasper.runtime.JspApplicationContextImpl*/
servletContext.removeAttribute("date");
System.out.println(servletContext.getAttribute("date")); // 'null'
}
}
@WebServlet注解配置Servlet
name:Servlet的名字
urlPatterns:映射路径
initParams(可选):通过initParams和@WebInitParam注解传入初始化参数,一个初始参数中有name和value两部分。初始化参数可以通过ServletConfig的getInitParameter(String s)方法获取
ServletConfig
当Servlet容器初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,并通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet
ServletContext
ServletContext代表当前的Servlet应用程序,每个Web应用程序只有唯一一个ServletContext对象
可以通过调用getServletContext()方法获得ServletContext对象
ServletContext常用方法:
方法 功能 void setAttribute(String name, Object obj) 设置ServletContext的属性,其中name是属性名,obj是属性值 Object getAttribute(String name) 获取ServletContext中名为name的属性的值(没有则返回null) void removeAttribute(String name) 从ServletContext中删除名为name的属性的值 Enumeration getAttributeNames() 返回一个包含了存放在ServletContext中的所有的属性的Enumeration对象
HttpServletRequest与HttpServletResponse
HttpServletResponse
HttpServletResponse被用来封装HTTP响应消息
常用方法如下:
方法 | 功能 |
---|---|
PrintWriter getWriter() | 返回一个可以向客户端发送消息的PrintWriter |
void setContentType(String var1) | 设置Servlet输出内容的MIME类型,对于HTTP协议来说就是设置Content-Type响应头字段的值 【解决中文乱码:response.setContentType("text/html;charset=utf-8");】 |
void addHeader(String name, String value) | 设置HTTP协议的响应头字段 |
void addCookie(Cookie cookie) | 给响应对象添加一个Cookie |
HttpServletRequest
HttpServletRequest被用来封装HTTP请求消息
常用方法如下:
方法 | 功能 |
---|---|
String getContentType() | 返回MIME类型,对HTTP协议来说就是返回Content-Type头字段的值 |
int getContentLength() | 返回响应数据的大小(Content-Length头字段的值) |
String getMethod() | 返回HTTP请求的方法的名称(GET,PUT,POST……) |
String getHeader(String name) | 返回指定HTTP首部的值 |
String getContextPath() | 获取URL中Web应用程序的路径 |
String getQueryString() | 获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容 |
Cookie[] getCookies() | 返回一个Cookie数组 |
HttpSession getSession() | 返回与这个请求相关的Session对象,如果没有则创建一个新的会话对象 |
String getParameter(String var1) | 获取表单(或查询字符串)请求中指定名称的参数的值 |
String[] getParameterValues(String var1) | 获取表单(或查询字符串)请求中指定名称的参数对应的所有的值 |
Enumeration | 返回一个包含请求消息中所有参数名字的Enumeration对象 |