在web.xml文件中设置两个WEB应用的初始化参数,user、password
定义一个loginServlet,在其中获取请求的user,password,比对其和web.xml文件中定义的请求参数是否一致。若一致,响应Hello:xxx,若不一致,响应Sorry:xxx xxx为user。
Servlet:
private ServletConfig servletConfig; @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init..."); this.servletConfig = servletConfig; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service..."); // 1.获取请求参数:username,password String username = servletRequest.getParameter("username"); // 2.获取当前web应用的初始化参数:user,password String password = servletRequest.getParameter("password"); // 3.比对 ServletContext servletContext = servletConfig.getServletContext(); String initUser = servletContext.getInitParameter("user"); String initPassword = servletContext.getInitParameter("password"); PrintWriter printWriter = servletResponse.getWriter(); // 4.打印响应字符串 if (username.equals(initUser) && password.equals(initPassword)){ printWriter.print("Hello" + username); }else{ printWriter.print("Sorry" + username); } }
web.xml:
<!--配置当前web应用的初始化参数--> <context-param> <param-name>user</param-name> <param-value>YHS</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>123</param-value> </context-param> <servlet> <servlet-name>DengluServlet</servlet-name> <servlet-class>com.demo.javaweb.DengluServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DengluServlet</servlet-name> <url-pattern>/DengluServlet</url-pattern> </servlet-mapping>
GenericServlet:
1)是一个Servlet.是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中的service方法为抽象方法
2)如果新建的Servlet程序直接继承GenericServlet会使开发更简洁
3)具体实现
- 在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化
- 利用servletConfig成员变量的方法实现了ServletConfig接口的方法
- 还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()对其中实现对Servlet的初始化
- 不建议直接覆盖init(ServletConfig),因为如果忘记编写super(ServletConfig),而还用了ServletConfig接口的方法,则会出现空指针异常
- 新建的init(){}并非Servlet的生命周期方法,而init(ServletConfig)是生命周期相关的方法
package com.demo.javaweb; import javax.servlet.*; import java.io.IOException; import java.util.Enumeration; /*自定义的一个Servlet接口的实现类:让开发的任何Servlet都继承该类,以简化开发 * */ public abstract class GenericServlet implements Servlet,ServletConfig{ // 以下方法为Servlet接口的方法 @Override public void init(ServletConfig servletConfig) throws ServletException { this.servletConfig = servletConfig; init(); } public void init()throws ServletException{ // 我们自己可以写的创建时的东西 } @Override public ServletConfig getServletConfig() { return servletConfig; } @Override public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException; @Override public String getServletInfo() { return null; } @Override public void destroy() { } private ServletConfig servletConfig; // 以下方法为ServletConfig接口的方法 @Override public String getServletName() { return servletConfig.getServletName(); } @Override public ServletContext getServletContext() { return servletConfig.getServletContext(); } @Override public String getInitParameter(String s) { return servletConfig.getInitParameter(s); } @Override public Enumeration<String> getInitParameterNames() { return servletConfig.getInitParameterNames(); } }
Servlet:
package com.demo.javaweb; import javax.servlet.*; import javax.servlet.GenericServlet; import java.io.IOException; import java.io.PrintWriter; public class DengluServlet extends GenericServlet { private ServletConfig servletConfig; @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init..."); this.servletConfig = servletConfig; super.init(servletConfig); } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service..."); // 1.获取请求参数:username,password String username = servletRequest.getParameter("username"); // 2.获取当前web应用的初始化参数:user,password String password = servletRequest.getParameter("password"); // 3.比对 String initUser = getServletContext().getInitParameter("user"); String initPassword = getServletContext().getInitParameter("password"); PrintWriter printWriter = servletResponse.getWriter(); // 4.打印响应字符串 if (initUser.equals(username) && initPassword.equals(password)){ printWriter.print("Hello" + username); }else{ printWriter.print("Sorry" + username); } } @Override public String getServletInfo() { System.out.println("getServletInfo..."); return null; } @Override public void destroy() { System.out.println("destroy..."); } }