笔者最近学完jsp和servlet,于是心血来潮的打算写个简单的用户案例
环境准备:
开发工具eclipse
jdk-1.8.0_72
tomcat-9.0.5
前端部分:
1.自己手写了一套样式
2.使用ajax交互
目录结构:
java目录:
前端目录
需求分析:
1.能够实现用户的登录和注册
2.能够实现对用户信息的增删查改
3.登录过一次的用户保存登录记录,也就是记录session
由于笔者不是很擅长写界面,所以后台界面部分不是写的很好看,这里就先预览一遍
由于代码量太多了,我就把这个项目放到了github上 https://github.com/chenCmengmengda/javaweb_user
接下来我把最最最核心的部分贴出来
首先我们都知道HttpServlet这个类中已经帮我们实现了doGet和doPost,可是如果请求的后台url一多,不可能每个都单独写成一个类,所以这两个方法根本不可取,我们要的是一个类中的多个方法都能被我们以url传参的形式访问。
例如:http://localhost:8080/demo1/xxx?method=login
于是我在资料中翻到了这么一段话。
注意蓝色字体,HttpServlet的实现关键在于覆盖了service方法,因此我们只要自己写一个类覆盖HttpServlet中的service方法就OK了
其实很多代码只要照搬HttpServlet就OK了,想要实现我们的功能,那么就加上反射的思路进去就OK了
1 public class BaseServlet extends HttpServlet { 2 /* 3 * 它会根据请求中的m,来决定调用本类的哪个方法 4 */ 5 protected void service(HttpServletRequest req, HttpServletResponse res) 6 throws ServletException, IOException { 7 req.setCharacterEncoding("UTF-8"); 8 res.setContentType("text/html;charset=utf-8"); 9 10 // 例如:http://localhost:8080/demo1/xxx?method=login 11 String methodName = req.getParameter("method");// 它是一个方法名称 12 // System.out.println(methodName); 13 14 // 当没用指定要调用的方法时,那么默认请求的是execute()方法。 15 if(methodName == null || methodName.isEmpty()) { 16 methodName = "execute"; 17 } 18 Class c = this.getClass(); 19 try { 20 // 通过方法名称获取方法的反射对象 21 Method m = c.getMethod(methodName, HttpServletRequest.class, 22 HttpServletResponse.class); 23 // 反射方法目标方法,也就是说,如果methodName为add,那么就调用add方法。 24 String result = (String) m.invoke(this, req, res); 25 // 通过返回值完成请求转发 26 if(result != null && !result.isEmpty()) { 27 req.getRequestDispatcher(result).forward(req, res); 28 } 29 } catch (Exception e) { 30 throw new ServletException(e); 31 } 32 } 33 }
有了这个类之后,我们自己就可以创建一个controller的包
里面的类继承上面的BaseServlet类
OK,本次案例到此结束,更多的细节请去看github中的源代码
如果有幸这篇随笔能被某位路人朋友看到,笔者此谢谢观看啦
原文地址:https://www.cnblogs.com/secret-ChenC/p/9278811.html
时间: 2024-10-11 05:59:05