Servlet生命周期
-
init()方法。在servlet第一次创建的时候调用,后续客户端请求时不再调用
-
service()方法。每当客户端发送一个请求,servlet容器会调用service方法处理请求。并适当的调用doGet,doPost,doPut,doDelete方法。
-
destroy()方法。该方法只会被调用一次,在 Servlet 生命周期结束时被调用。
-
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
非生命周期方法
-
getServletInfo()。该方法返回Servlet的描述,可以返回可能有用的任意字符串,甚至是NUll。
-
getServletConfig()。该方法返回由容器传给init方法的ServletConfig。
Servlet主要接口及其实现类
ServletRequest接口主要方法
-
getAttribute(String name)。返回Servlet中指定的属性对象。如果该对象不存在则返回null。
-
getAttributeNames()。返回Servlet中指定的属性对象名列表。
-
getContentLength()。该方法返回主体中的字节数。如果不知道字节数的长度就返回-1.
-
getContentType()。返回请求主体MIME类型,不知道类型返回Null。
-
getParameter(String name)。返回指定请求参数的值。
-
getContext(String url)。返回一个特定url的ervlet对象。
-
getParameterValues(String name);如果指定参数的值是一个数组用这种方式返回。
-
setAttribute(String name ,object object).在请求中添加一个指定对象。
ServletResponse接口主要方法
-
getWriter()。这个方法返回一个PringWriter对象用来记录格式化的响应实体。
-
setContentType()。 这个方法用来设定响应的content类型。
hello servlet
@WebServlet(name = "UserServlet",
urlPatterns = { "/UserServlet"},
initParams = {
@WebInitParam(name="helloworld",value="helloworld")
})
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private transient ServletConfig servletConfig;
/**
* @see HttpServlet#HttpServlet()
*/
public UserServlet() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return servletConfig;
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String s = servletConfig.getInitParameter("helloworld");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<title>test</title>");
out.println("<head><h1>test<br></h1></head>");
out.println("<body>");
out.println("<h1>");
out.println("hello servlet<br>");
out.println(s);
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
doGet(request, response);
}
}
-
@WebServlet(name =”UserServlet”,urlPatterns = “/UserServlet”)用WebServlet注解类型声明一个Servlet。name和urlPatterns两个属性可选。
-
一般继承HttpServlet类覆盖doGet和doPost方法
-
response.setContentType(“text/html;charset=UTF-8”);设置响应格式
-
PrintWriter out = response.getWriter();out.prinln()输出Html文本,一般不使用这种方法太繁琐。
-
request.setCharacterEncoding(“UTF-8”);解决post方法乱码问题
-
在servlet.xml中,设置URIEcoding=”UTF-8”;解决get方法乱码问题
-
web.xml中的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0" metadata-complete="true">
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>Liu.com.cn.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
</web-app>