Java之通过反射机制选择servlet中的对应的方法
时间:2019-03-20
本文章向大家介绍Java之通过反射机制选择servlet中的对应的方法,主要包括Java之通过反射机制选择servlet中的对应的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
此方法用于在对Javaee开发中的通过对应的名称而选择servlet中的对应的方法
注:主要代码如下
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /** * 这是设置浏览器编码的问题 */ req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html,charset=UTF-8"); String servletPath = req.getServletPath(); String methodName = servletPath.substring(1); methodName = methodName.substring(0, methodName.length()-4); System.out.println(methodName); try { /** * 根据反射机制选择servlet对应的方法 */ Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); /** * 利用反射调用对应的方法 */ method.invoke(this, req,resp); } catch (Exception e) { e.printStackTrace(); System.out.println("这里是登录的时候反射机制的地方出错了!"); req.getRequestDispatcher("error.jsp").forward(req, resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }
示例
注:在后面的jsp页面中提交form表单中的 action="<%=request.getContextPath() %>/saveTeacher.ado"可以直接通过反射机制调用servlet中的saveTeacher方法
public class AdministratorsServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /** * 这是设置浏览器编码的问题 */ req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html,charset=UTF-8"); String servletPath = req.getServletPath(); String methodName = servletPath.substring(1); methodName = methodName.substring(0, methodName.length()-4); System.out.println(methodName); try { /** * 根据反射机制选择servlet对应的方法 */ Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); /** * 利用反射调用对应的方法 */ method.invoke(this, req,resp); } catch (Exception e) { e.printStackTrace(); System.out.println("这里是登录的时候反射机制的地方出错了!"); req.getRequestDispatcher("error.jsp").forward(req, resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } /** * 基于对教师的基本操作 */ /** * 添加一个教师 * @param req * @param resp * @throws ServletException * @throws IOException */ private void saveTeacher(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { Teachers teacher = new Teachers(); teacher.setTeacherId(Integer.parseInt(req.getParameter("teacherId"))); teacher.setTeacherName(req.getParameter("teacherName")); teacher.setSex(req.getParameter("sex")); teacher.setPhoneNo(req.getParameter("phoneNo")); teacher.setAddress(req.getParameter("address")); teacher.setBirthday(new Date(new SimpleDateFormat("yyyy-MM-dd").parse(req.getParameter("birthday")).getTime())); teacher.setSalary(new BigDecimal(req.getParameter("salary"))); ITeachersService teacherService = new TeachersServiceImpl(); int rows = teacherService.save(teacher); if(rows>0) { System.out.println("保存一个教师基本信息成功!"); req.getRequestDispatcher("saveSuccess.jsp").forward(req, resp); } } catch (Exception e) { e.printStackTrace(); System.out.println("添加一个教师对象基本信息的时候失败!"); resp.sendRedirect("error.jsp"); } } }
一、首先在web.xml文件里面配置相关的信息如下
注: <url-pattern>*.ado</url-pattern> 中的*则代表所选的对应方法
<servlet> <servlet-name>AdministratorsServlet</servlet-name> <servlet-class>cn.gbb.student_achievement_system.controller.AdministratorsServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdministratorsServlet</servlet-name> <url-pattern>*.ado</url-pattern> </servlet-mapping>
二、在jsp页面中from表单提交的时候需要注意它提交的action里面的内容
注: <form action="<%=request.getContextPath() %>/saveTeacher.ado" method="get">
1 <body style="height: 100%;width: 100%; background-image:url(lib/skr.jpg); background-size: cover;"> 2 <div style="height: 100px;width: 100%; text-align: center;"> 3 <h1>学生成绩管理系统</h1> 4 </div> 5 <div align="center"> 6 <form action="<%=request.getContextPath() %>/saveTeacher.ado" method="get"> 7 <% 8 Teachers_Login teacherLogin = (Teachers_Login) request.getAttribute("teacherLogin"); 9 %> 10 <input type="hidden" name="teacherId" value="<%=teacherLogin.getTeacherId()%>"> 11 <input type="hidden" name="teacherName" value="<%=teacherLogin.getTeacherName()%>"> 12 <table> 13 <tr> 14 <th colspan="2" align="center">请填写教师的基本信息</th> 15 </tr> 16 <tr> 17 <td>职工号:</td> 18 <td><%=teacherLogin.getTeacherId()%></td> 19 </tr> 20 <tr> 21 <td>姓名:</td> 22 <td><%=teacherLogin.getTeacherName()%></td> 23 </tr> 24 <tr> 25 <td>性别:</td> 26 <td><input type="text" name="sex"></td> 27 </tr> 28 <tr> 29 <td>电话号码:</td> 30 <td><input type="text" name="phoneNo"></td> 31 </tr> 32 <tr> 33 <td>家庭住址:</td> 34 <td><input type="text" name="address"></td> 35 </tr> 36 <tr> 37 <td>出生日期:</td> 38 <td><input type="text" name="birthday"></td> 39 </tr> 40 <tr> 41 <td>工资:</td> 42 <td><input type="text" name="salary"></td> 43 </tr> 44 <tr> 45 <td colspan="2" style="text-align: center;"><input type="submit" value="确定"><input type="reset" value="重置"></td> 46 </tr> 47 </table> 48 </form> 49 <p style="text-align: center;"><a href="administratorsMain.jsp">返回首页</a></p> 50 </div> 51 </body>
总结:这样就可以在jsp页面提交的时候选择servlet里面的所对应的方法了,希望对您有所帮助,谢谢!!!!!
- 从数据到代码——基于T4的代码生成方式
- 解决T4模板的程序集引用的五种方案
- 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"
- 从yield关键字看IEnumerable和Collection的区别
- 让“链式调用(方法链)”更加自然一点
- ASP.NET应用下基于SessionState的“状态编程框架”解决方案
- 为自定义配置的编辑提供”智能感知”的支持
- 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
- 在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
- 为.NET Core项目定义Item Template
- 晚绑定场景下对象属性赋值和取值可以不需要PropertyInfo
- 一个关于反序列化的小问题
- 两个简单的扩展方法:TrimPrefix和TrimSuffix
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 我是如何阅读JDK源码的?
- Docker以root身份登录到容器
- SOAPUI访问WEBSERVICE案例
- 编译安装nginx
- 磁盘高可用解决方案(DBA).md
- Python 3.7 + HttpRunner 初探
- 数据库PostrageSQL-服务器配置(复制)
- 高可用服务解决方案(DBA).md
- dotnet 使用 Interlocked 实现一个无锁的快速无序仅写集合
- 利用Python将gff3转换成gtf格式
- 单细胞DoHeatmap画热图标签出界
- FastSpar | 用更快的 SparCC 进行微生物组相关性分析
- GO和KEGG富集倍数(Fold Enrichment)如何计算
- 监控域名HTTPS证书过期时间
- 使用hmmlearn分析股票数据