Servlet生命周期是什么?
一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req,ServletResponse res) --> destroy.
HttpServlet的生命周期: init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.
有没有必要重写GenericServlet.service()方法?
对于HttpServlet来说没有必要。只需要重写它的doXXXX()方法就可以了。HttpServlet中service()方法会自动的根据用户请求类型把请求转发给相应的doXXXX()方法(例如doGet()方法)。
ServletRequest.getReader()和ServletRequest.getInputStream()如何使用?
注意两个方法不能同时使用。ServletRequest.getRealPath(String path)方法已经不推荐使用。请使用ServletContext.getRealPath(String path)方法。
ServletResponse缺省的字符集(charset)是什么?
ServletResponse缺省的字符集(charset)是ISO-8859-1,可以通过setContentType(java.lang.String)方法改变新的字符集。例如:setContentType("text/html; charset=Shift_JIS").关于字符集信息,可以浏览RFC 2045
HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什么?
request.getRequestURI() 返回值类似:/xuejava/requestdemo.jsp
request.getRequestURL() 返回值类似:http://localhost:8080/xuejava/requestdemo.jsp
HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()区别是什么?为什么要有两个不同的方法呢?
当用URL-rewriting方式来管理Session的时候,需要用到以上的两个方法。两个方法的不同点是:两个方法确定是否需要包含session ID的逻辑不同。在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。