在编写Servlet的时候,你是否会出现一个功能用一个Servlet编写,这篇文章将介绍如何优化这种问题:就是一个模块一个Servlet
目录结构
原来的目录结构:
现在的目录结构:
实现逻辑关系:
步骤
新建一个BaseServlet继承HttpServlet,再新建一个UserServlet继承BaseServlet
BaseServlet:
package cn.itcast.travel.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author 张振东
* @version V1.0
* @Title:
* @Package
* @Description: (用一句话描述该文件做什么)
* @date:
*/
@WebServlet("/baseServlet")
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成方法请求
String uri = req.getRequestURI();
// /trvael/user/add
System.out.println("uri="+uri);
//获取方法名称
String methodName = uri.substring(uri.lastIndexOf("/")+1);
System.out.println(methodName);
//获取方法对象
//谁调用我我代表谁
//System.out.println(this);
try {
Method method=this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);//执行方法
method.invoke(this,req,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
UserServlet:
package cn.itcast.travel.web.servlet;
import cn.itcast.travel.domain.ResultInfo;
import cn.itcast.travel.domain.User;
import cn.itcast.travel.service.UserService;
import cn.itcast.travel.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
/**
* @author 张振东
* @version V1.0
* @Title:
* @Package
* @Description: (用一句话描述该文件做什么)
* @date:
*/
@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
private UserService userService = new UserServiceImpl();
/**
* 注册
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String check =request.getParameter("check");
System.out.println(check);
//从session中获取验证码
HttpSession session = request.getSession();
String checkcode_server=(String)session.getAttribute("CHECKCODE_SERVER");
System.out.println(checkcode_server);
session.removeAttribute("CHECKCODE_SERVER");//为了保证验证码只使用一次
if(!checkcode_server.equalsIgnoreCase(check)){
ResultInfo info = new ResultInfo();
info.setFlag(false);
info.setErrorMsg("验证码错误");
//将info对象转换为json
ObjectMapper mapper= new ObjectMapper();
String json=mapper.writeValueAsString(info);
//将json数剧写回到客户端
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
return;
}
//获取数据
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
//封装对象
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//UserService userService = new UserServiceImpl();
boolean flag = userService.regist(user);
ResultInfo info = new ResultInfo();
//响应结果
if (flag) {
info.setFlag(true);
} else {
info.setFlag(false);
info.setErrorMsg("注册失败");
}
//将info对象转换为json
ObjectMapper mapper= new ObjectMapper();
String json=mapper.writeValueAsString(info);
//将json数剧写回到客户端
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
}
/**
* 登录功能
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取用户名的账号和密码
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// UserService userService = new UserServiceImpl();
User u = userService.login(user);
ResultInfo resultInfo = new ResultInfo();
//判断用户是否为null
if (u == null) {
resultInfo.setFlag(false);
resultInfo.setErrorMsg("用户名或者密码错误");
}
if (u != null && !"Y".equals(u.getStatus())) {
resultInfo.setFlag(false);
resultInfo.setErrorMsg("您尚未激活,请激活");
}
if (u != null && "Y".equals(u.getStatus())) {
resultInfo.setFlag(true);
}
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
request.getSession().setAttribute("user",u);
mapper.writeValue(response.getOutputStream(),resultInfo);
}
/**
* 查找单个对象
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object user =request.getSession().getAttribute("user");
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),user);
}
/**
* 退出功能
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.销毁session中的user对象
request.getSession().invalidate();
//2.页面重定向
response.sendRedirect(request.getContextPath()+"/login.html");
}
/**
* 验证功能
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code =request.getParameter("code");
if(code!=null){
//UserService userService =new UserServiceImpl();
boolean flag =userService.active(code);
//判断标记
String msg =null;
if(flag){
//激活成功
msg="激活成功,请<a href="+request.getContextPath()+"/login.html>登录</a>";
}else{
msg="请联系管理员";
}
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(msg);
}
}
}
效果图: