此方法用于在对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中的对应的方法的更多相关文章

  1. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

  2. 谈一谈java里面的反射机制

    首先来看看百度百科中是如何定义的: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方 ...

  3. JAVA类型信息——反射机制

    JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...

  4. java基础之反射机制

    一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  5. Java动态性之反射机制(reflection)

    说到反射机制,第一次接触的人可能会比较懵,反射?什么反射?怎么反射?反射是干嘛的?下面我将在这篇文章中讲讲Java的反射机制 不过在这之前,还有一个问题需要解决,标题名中的动态性,说起动态性,我先介绍 ...

  6. java基础篇---反射机制

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  7. java学习--Reflection反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  8. Java学习:反射机制简介

    反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  9. Java高级特性——反射机制(第二篇)

    在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...

随机推荐

  1. tomcat启动后 项目运行缓慢,要几十到几百秒不等 怎么样./startup.sh 运行加快

    修改 linux系统中 /usr/local/jdk1.8.0_11/jre/lib/security/java.security 借力 好文章.我们新的Linux系统,部署了多个 Tomca,同时重 ...

  2. js初识

    01-Javascript简介   Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) ...

  3. javascript判断访问终端,手机端自动跳转

    在网页的顶部加入javascript判断代码: function checkserAgent(){ var userAgentInfo=navigator.userAgent; var userAge ...

  4. Qt(Mac) 进程的启动

    试了半天,终于成功了!!!!(教程都是Windows的) 1.与Windows不一样,Mac的要在了路径前加上open: 2.例 图为把一个按钮与TextEdit程序进程联系,点击后就可以启动Text ...

  5. 搜索【洛谷P2845】 [USACO15DEC]Switching on the Lights 开关灯

    P2845 [USACO15DEC]Switching on the Lights 开关灯 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一 ...

  6. linux 基本概念

    Linux把物理内存分为了固定统一大小的块,称为page(页框),一般为4KB. Linux采用4KB页框大小作为标准的物理内存分配单元,内核用数据结构page描述一个页框的状态信息,其实页是进程的概 ...

  7. BestCoder Round #80 待填坑

    Lucky Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  8. Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name"

    解决办法

  9. C语言中的副作用、序列点、完整表达式

    C语言中有个术语叫:副作用 副作用其实是对数据对象或文件的修改.(数据对象的定义是:用于存储值的数据存储区域) 例如语句 states = 50; 从C语言的角度来讲:这个赋值表达式的副作用是将变量的 ...

  10. 六度分离 (folyd算法)

    1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说,大意是说,任何2个素不相识的人中间最多只隔着 ...