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框架为 ...