Servlet

学习总结

Posted by 溜大虾 on April 9, 2018

Servlet生命周期

  • init()方法。在servlet第一次创建的时候调用,后续客户端请求时不再调用

  • service()方法。每当客户端发送一个请求,servlet容器会调用service方法处理请求。并适当的调用doGet,doPost,doPut,doDelete方法。

  • destroy()方法。该方法只会被调用一次,在 Servlet 生命周期结束时被调用。

  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

非生命周期方法

  • getServletInfo()。该方法返回Servlet的描述,可以返回可能有用的任意字符串,甚至是NUll。

  • getServletConfig()。该方法返回由容器传给init方法的ServletConfig。

Servlet主要接口及其实现类

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>