回顾:https://blog.csdn.net/qq_43711904/article/details/99226689
练习:
梳理的servlet、GenericServlet、HttpServlet的关系与ServletConfig对象的获取方式:
public class GetInfoServlet extends HttpServlet { private static final long serialVersionUID = 1L; private ServletConfig servletConfig; @Override public void init(ServletConfig servletConfig1) { try { super.init(servletConfig1); this.servletConfig = servletConfig1; } catch (ServletException e) { e.printStackTrace(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); /* * 得到ServletConfig对象的第一种方式 * * 配置信息被解析后会将数据加载到ServletConfig中保存到内存 * ServletConfig中定义的方法: * getServletName();getServletContext();getInitParameter(java.lang.String name);getInitParameterNames() * (注:如果选用init(ServletConfig servletconfig)时,Tomcat不会初始化全局的ServletContex对象,即在方法体中无法通过this.getServletContex()获取信息) * 因为默认Servlet对象初始化时调用的是init()无参构造,如果需要在方法体中保存ServletConfig信息: * 就需要实现Servle接口中的方法public void init(ServletConfig servletconfig) * 此时则可以直接通过“servletConfig.方法”在Servlet中调用 */ System.out.println("Servlet名称:" + servletConfig.getServletName()); System.out.println("key1:" + servletConfig.getInitParameter("key1")); System.out.println("key2:" + servletConfig.getInitParameter("key2")); /* * 得到ServletConfig对象的第二种方式 * * Servlet接口中的非周期方法: * 获取Servlet的信息getServletInfo();获取Servlet的配置信息getServletConfig() * * servlet与GenericServlet,HttpServlet的关系: * GenericServlet,HttpServlet都是servlet的实现类,HttpServlet类又继承了GenericServlet类; * Servle接口中定义了三个周期方法:init() service() destroy(); * HttpServlet类中定义的方法:doGet() doPost() * * 所以当前类作为HttpServlet类的子类可以通过调用Servlet接口中getServletConfig()方法获取更多配置信息 */ // String servletName = this.getServletConfig().getServletName(); // String value1 = this.getServletConfig().getInitParameter("key1"); // String value2 = this.getServletConfig().getInitParameter("key2"); /* * 得到ServletConfig对象的第三种方式 * * GenericServlet重写了ServletConfig接口中的getInitParameter()等方法 * 而HttpServlet又继承了GenericServlet * 所以可以在当前类作为HttpServlet子类可以直接调用getInitParameter()等方法 */ String servletName = this.getServletName(); String value1 = this.getInitParameter("key1"); String value2 = this.getInitParameter("key2"); out.println("<html><body>"); out.println("Servlet名称:"+servletName+"<br>"); out.println("key1:"+value1+"<br>"); out.println("key2:"+value2); out.println("</body></html>
掌握HttpServletRequest中的方法:
@WebServlet("/ShowHeadersServlet") public class HeaderServlet extends HttpServlet { private static final long serialVersionUID = 1L; @SuppressWarnings("deprecation") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<html><head></head><body><table width=\"100%\" border=\"1\">"); /* * HttpServletRequest * getContextPath() /web_practise * getServletPath() /ShowHeadersServlet * getRequestURI() /web_practise/ShowHeadersServlet * getRequestURL() http://localhost:8080/web_practise/ShowHeadersServlet * getRealPath("/") * getHeader(java.lang.String name) getHeaders(java.lang.String name) * getHeaderNames() * getQueryString() * getMethod() */ out.println("<tr><td>HeaderServlet at</td> " +"<td>"+ request.getContextPath() + "</td></tr>"); Enumeration<String> names = request.getHeaderNames(); while(names.hasMoreElements()) { String name = names.nextElement(); out.println("<tr><td>" + name + "</td> " +"<td>"+ request.getHeader(name) + "</td></tr>"); } out.println("<tr><td>request.getRequestURL()</td> " +"<td>"+ request.getRequestURL() + "</td></tr>"); out.println("<tr><td>request.getRequestURI()</td> " +"<td>"+ request.getRequestURI() + "</td></tr>"); out.println("<tr><td>request.getContextPath()</td> " +"<td>"+ request.getContextPath() + "</td></tr>"); out.println("<tr><td>request.getServletPath()</td> " +"<td>"+ request.getServletPath() + "</td></tr>"); out.println("<tr><td>request.getRealPath()</td> " +"<td>"+ request.getRealPath("/") + "</td></tr>"); out.println("</table></body></html>
运行结果:
全局初始化参数:
<context-param></context-param>
Servlet初始化参数:
<servlet> <init-param></init-param> </servlet>