GenericServlet
1. GenericServlet:
1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法为抽象方法
2). 如果新建的 Servlet 程序直接继承 GenericSerlvet 会使开发更简洁.
3). 具体实现:
①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化
②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法
③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.
④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,
则会出现空指针异常.
⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.
2.实验:
在 web.xml 文件中设置两个 WEB 应用的初始化参数, user, password.
定义一个 login.html, 里边定义两个请求字段: user, password. 发送请求到 loginServlet
在创建一个 LoginServlet, 在其中获取请求的 user, password. 比对其和 web.xml 文件中定义的请求参数是否一致
若一致, 响应 Hello:xxx, 若不一致, 响应 Sorry: xxx xxx 为 user.
MyGenericServlet
package com.aff.java; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; //自定义的一个Servlet接口的实现类,让开发任何Servlet都继承该类,以简化开发 public abstract class MyGenericServlet implements Servlet, ServletConfig { /** * 下面的方法为Servlet接口的方法 */ @Override public void destroy() { } @Override public ServletConfig getServletConfig() {// 得到servletConfig传给调用他的子类 return servletConfig; } @Override public String getServletInfo() { return null; } private ServletConfig servletConfig; @Override public void init(ServletConfig arg0) throws ServletException { this.servletConfig = arg0; init(); } //自己定义的方法不是Servlet的生命周期方法 public void init() throws ServletException {// 想初始化给他提供一个空的init方法 } @Override public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException; /** * 以下方法为 ServletConfig 接口的方法 */ @Override public String getInitParameter(String arg0) { return servletConfig.getInitParameter(arg0); } @Override public Enumeration<String> getInitParameterNames() { return servletConfig.getInitParameterNames(); } @Override public ServletContext getServletContext() { return servletConfig.getServletContext(); } @Override public String getServletName() { return servletConfig.getServletName(); } }
LoginServlet
package com.aff.java; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class LoginServlet extends MyGenericServlet { // 对当前Servlet进行初始化:覆盖init方法 @Override public void init( ) throws ServletException {//在空的init方法中初始化 System.out.println("初始化..."); } @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // 1. 获取请求参数 String username = request.getParameter("username"); String password = request.getParameter("password"); // 2. 获取当前应用的初始化参数: user ,password // 需要使用servletContext对象 String inituser = getServletContext().getInitParameter("user"); String initpassword = getServletContext().getInitParameter("password"); PrintWriter out = response.getWriter(); // 3. 比对 // 4. 打印响应字符串 if (inituser.equals(username) && initpassword.equals(password)) { out.print("Hello" + username); } else { out.print("sorry" + username); } } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--配置当前web应用的初始化参数 全局的 --> <context-param> <param-name>user</param-name> <param-value>hmm</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>123456</param-value> </context-param> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>com.aff.java.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping> </web-app>
login.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="loginServlet" method="post"> user:<input type="text" name="username"/> password:<input type="password" name="password"/> <input type="submit" value="Submit"/> </form> </body> </html>
目录