在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...");
}
}