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将内存分为堆.栈.方法区 ...
随机推荐
- JBOSS在win7环境下启动run.bat无反应
今天从隔壁机器拷贝了一份Jboss,却发现启动无任何反应. 仔细对比了jdk jboss的各项参数发现都是相同,无奈之下,检查run.bat文件 发现时在此句出现前后 无反应: "%JAVA ...
- C++基础学习6:内联函数
C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展. 采用内联函数可以有效避免函数调用的开销,程序执行效 ...
- JS基础学习四:绑定事件
添加事件 IE: attachEvent Other: addEventListener var button = document.getElementById("buttonId&quo ...
- 洛谷 P1036 选数
嗯.... 这种类型的题在新手村出现还是比较正常的, 但是不知道为什么它的分类竟然是过程函数与递归!!!(难道这不是一个深搜题吗??? 好吧这就是一道深搜题,所以千万别被误导... 先看一下题目: 题 ...
- Arch下systemd无法开机执行rc.local之解决方法
早就发现了,Arch的systemd提供的那个 rc-local.service 貌似有问题,rc.local不会执行.因为没用rc.local,一直没管. 解决方法源自这里,需要稍加改动: http ...
- eclipse字体
- 【bzoj2935】[Poi1999]原始生物
2935: [Poi1999]原始生物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 145 Solved: 71[Submit][Status][D ...
- linux中swap的构建
一.使用物理分区构建swap 1.分区 [root@server3 ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes w ...
- 服务器查看外网IP地址和方法
返回IP地址 curl ip..com/ip.aspx curl whatismyip.akamai.com wget -qO - ifconfig.co curl icanhazip.com dig ...
- unittest框架
在我们真正的编写测试用例之前,我们需要了解一下测试框架. unittest是python自带的单元测试框架,尽管其主要是为单元测试服务的,但我们也可以用它来做接口的自动化测试. unittest框架为 ...