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将内存分为堆.栈.方法区 ...
随机推荐
- tomcat启动后 项目运行缓慢,要几十到几百秒不等 怎么样./startup.sh 运行加快
修改 linux系统中 /usr/local/jdk1.8.0_11/jre/lib/security/java.security 借力 好文章.我们新的Linux系统,部署了多个 Tomca,同时重 ...
- js初识
01-Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) ...
- javascript判断访问终端,手机端自动跳转
在网页的顶部加入javascript判断代码: function checkserAgent(){ var userAgentInfo=navigator.userAgent; var userAge ...
- Qt(Mac) 进程的启动
试了半天,终于成功了!!!!(教程都是Windows的) 1.与Windows不一样,Mac的要在了路径前加上open: 2.例 图为把一个按钮与TextEdit程序进程联系,点击后就可以启动Text ...
- 搜索【洛谷P2845】 [USACO15DEC]Switching on the Lights 开关灯
P2845 [USACO15DEC]Switching on the Lights 开关灯 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一 ...
- linux 基本概念
Linux把物理内存分为了固定统一大小的块,称为page(页框),一般为4KB. Linux采用4KB页框大小作为标准的物理内存分配单元,内核用数据结构page描述一个页框的状态信息,其实页是进程的概 ...
- BestCoder Round #80 待填坑
Lucky Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name"
解决办法
- C语言中的副作用、序列点、完整表达式
C语言中有个术语叫:副作用 副作用其实是对数据对象或文件的修改.(数据对象的定义是:用于存储值的数据存储区域) 例如语句 states = 50; 从C语言的角度来讲:这个赋值表达式的副作用是将变量的 ...
- 六度分离 (folyd算法)
1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说,大意是说,任何2个素不相识的人中间最多只隔着 ...