入门级旅游网 - 2 项目结构优化
Idea控制台中文乱码解决:-Dfile.encoding=gb2312(GBK也可)
优化Servlet
目的
减少Servlet的数量,现在是一个功能一个Servlet,
将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,
在Servlet中提供不同的方法,完成用户的请求。
Servlet基类 - BaseServlet
public class BaseServlet extends HttpServlet {
/**
* 原理:
* 在Servlet中,每次给服务器发送响应,都会自动调用Servlet的service方法
* 基类Servlet 通过继承该类的子类,将会自动调用其父类(也就是该类)的service方法,因为子类并不会重写该方法
*
* 实现的功能:
* 是根据uri中的字符串,找到需要调用的方法 如 /user/login -> 该类的service方法会实现对子类login方法的调用,
即实现根据不同逻辑实现方法的分发功能
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 完成方法的分发 反射的技术
// 1. 获取请求的路径
String uri = req.getRequestURI(); // 格式:/项目的虚拟目录/user/XXX 我们需要的是XXX
// 2. 获取方法的名称
String methodName = uri.substring(uri.lastIndexOf('/')+1);
// 3. 获取方法调用的对象
// 调用该方法的对象是 BaseServlet的子类 谁此刻调用了 谁就是方法的调用者
// 4. 获取方法对象
try {
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
// 5. 反射执行该方法
method.invoke(this, req,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
UserServlet改写为userModuleServlet
将之前的Servlet实现的功能,抽取到userModuleServlet中的不同方法中实现,
并且将UserService创建抽取到成员变量位置
@WebServlet("/user/*") // 通过user/login则调用login方法
public class userModuleServlet extends BaseServlet {
private UserService service = new UserServiceImpl();
private ObjectMapper mapper = new ObjectMapper();
/**
* 用户注册
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* 邮箱激活
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* 用户登录
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* 用户退出
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* 在session中找到当前登录的用户信息
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
页面路径改写
register.html
login.html
header.html
UserServiceImpl发送邮件
Krismile out~