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">
<body style="height: 100%;width: 100%; background-image:url(lib/skr.jpg); background-size: cover;">
<div style="height: 100px;width: 100%; text-align: center;">
<h1>学生成绩管理系统</h1>
</div>
<div align="center">
<form action="<%=request.getContextPath() %>/saveTeacher.ado" method="get">
<%
Teachers_Login teacherLogin = (Teachers_Login) request.getAttribute("teacherLogin");
%>
<input type="hidden" name="teacherId" value="<%=teacherLogin.getTeacherId()%>">
<input type="hidden" name="teacherName" value="<%=teacherLogin.getTeacherName()%>">
<table>
<tr>
<th colspan="2" align="center">请填写教师的基本信息</th>
</tr>
<tr>
<td>职工号:</td>
<td><%=teacherLogin.getTeacherId()%></td>
</tr>
<tr>
<td>姓名:</td>
<td><%=teacherLogin.getTeacherName()%></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="text" name="sex"></td>
</tr>
<tr>
<td>电话号码:</td>
<td><input type="text" name="phoneNo"></td>
</tr>
<tr>
<td>家庭住址:</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td>出生日期:</td>
<td><input type="text" name="birthday"></td>
</tr>
<tr>
<td>工资:</td>
<td><input type="text" name="salary"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><input type="submit" value="确定"><input type="reset" value="重置"></td>
</tr>
</table>
</form>
<p style="text-align: center;"><a href="administratorsMain.jsp">返回首页</a></p>
</div>
</body>
总结:这样就可以在jsp页面提交的时候选择servlet里面的所对应的方法了,希望对您有所帮助,谢谢!!!!!
Java之通过反射机制选择servlet中的对应的方法的更多相关文章
- 黑马程序员——【Java高新技术】——反射机制
---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...
- 谈一谈java里面的反射机制
首先来看看百度百科中是如何定义的: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方 ...
- JAVA类型信息——反射机制
JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...
- java基础之反射机制
一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- Java动态性之反射机制(reflection)
说到反射机制,第一次接触的人可能会比较懵,反射?什么反射?怎么反射?反射是干嘛的?下面我将在这篇文章中讲讲Java的反射机制 不过在这之前,还有一个问题需要解决,标题名中的动态性,说起动态性,我先介绍 ...
- java基础篇---反射机制
一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...
- java学习--Reflection反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- Java学习:反射机制简介
反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
随机推荐
- ThinkPHP CURD 操作
Thinkphp CURD操作php中实例还对象即可操作 (目录) 1.Add 1 调式程序 3 调出显示页面Trace信息 3 Dump 的含义 4 2.数据库查询 4 1.直接使用字符串进行查找 ...
- [51nod1220] 约数之和(杜教筛+莫比乌斯反演)
题面 传送门 题解 嗯--还是懒得写了--这里 //minamoto #include<bits/stdc++.h> #define R register #define IT map&l ...
- C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...
- iOS 上的相机捕捉 swift
第一台 iPhone 问世就装有相机.在第一个 SKDs 版本中,在 app 里面整合相机的唯一方法就是使用 UIImagePickerController,但到了 iOS 4,发布了更灵活的 AVF ...
- kuangbin专题十六 KMP&&扩展KMP HDU2609 How many (最小字符串表示法)
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me How man ...
- http 与 TCP 与 socket 定义,区别
http://blog.csdn.net/jenminzhang/article/details/47017741 http协议:处于互联网协议的应用层,角色是规定数据传输的格式,http是建立在so ...
- for循环删除list中多个元素出现的误区
错误的做法是: for(int i= 0;i<list.size();i++) 因为在你删除元素的同时list.size()也在变小,这样就会照成越界. 正确做法:因为要删除list里面的多个的 ...
- 2-28 switch
- 待修改 URAL 1542
#include<bits/stdc++.h> using namespace std; const int maxn = 2e5+2e4+11; const int dep = 666; ...
- UDP通讯模型简单示例
1. UDP通讯模型 2. 服务器端 ① 创建一个socket,用函数socket() ② 绑定IP地址.端口等信息到socket上,用函数bind() ③ 循环接收数据,用函数recvfrom() ...