InvocationTargetException异常的深入研究-servlet的setAttribute与getAttribute

在某项目中,前端jsp传入的用户id数据通过session域传入后台servlet进行处理的过程中,无意间出现了InvocationTargetException异常

前端部分代码如下:测试代码,非原项目代码

 1 // 登录处理源码
 2 if ("student".equals(role)) {
 3     // 学生登录
 4     // 创建学生服务对象
 5     StudentService ss = new StudentServiceImpl();
 6     // 调用服务中的登录进程
 7     Student student = ss.login(uid, upwd);
 8     // 判断此学生是否存在
 9     if(student != null) {
10         // 如果存在,则登录成功, 存储学生信息
11         /* javax.servlet.http.HttpSession源码
12          * public void setAttribute(String name, Object value);
13         */
14         // 第一种设置域属性方式:sid 在实体类中定义的是int类型,setAttribute中传入值则自动装箱成Integer
15         // req.getSession().setAttribute("uid", student.getSid());
16         // 第二种设置属性方式:为了验证,此处给指定字符串数据
17         req.getSession().setAttribute("uid", "1");
18         req.getSession().setAttribute("uname", student.getSname());
19         // 页面跳转
20         resp.sendRedirect(req.getContextPath() + "/index.jsp");
21         return;
22     } else {
23         // 失败信息
24         req.setAttribute("error", "用户名或密码错误,请重新登录!");
25         // 请求转发
26         req.getRequestDispatcher("login.jsp").forward(req, resp);
27         return;
28     }
29 }
1 <-- 登录成功后的跳转链接 -->
2 <div>
3     <a href="student.action?operation=queryInfo&uid=${uid }" class="left-font03">查看个人信息</a>
4 </div>
 1 // 获取详细信息的servlet代码
 2 public void queryInfo(HttpServletRequest req, HttpServletResponse resp){
 3     StudentService ss = new StudentServiceImpl();
 4     // 第一种获取uid方式:从url中的参数中获取uid,为String类型数据
 5     //String uid = req.getParameter("uid");
 6
 7     // 第二种获取uid方式:从登录时保存在session中属性获取,此属性为int类型,通过setAttribute方法自动装箱成Integer类型属性传递
 8     // int sid = (Integer) req.getSession().getAttribute("uid");
 9
10     // 第二种获取uid方式:从登录时保存在session中属性获取,此属性为String类型
11     String uid = (String) req.getSession().getAttribute("uid");
12
13     // 出现InvocationTargetException异常的源头就在此,由于使用getAttribute方法获取保存在对应域内的属性值默认属性为Object,
14     // 此时强转类型需要使用与原类型匹配的类型,否则在下面语句转换数据为int类型时会出错
15     int sid = Integer.parseInt(uid);
16     Student student = ss.queryById(sid);
17     if(cs.queryById(sid) != null ){
18         req.setAttribute("student", student);
19         try {
20
21 // 请求转发         req.getRequestDispatcher("student/information.jsp").forward(req, resp);
22             return;
23         } catch (ServletException e) {
24             e.printStackTrace();
25         } catch (IOException e) {
26             e.printStackTrace();
27         }
28     }
29 }
30
31 // 重写service方法,通过反射提取方法
32 @Override
33 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
34     // 获取当前对象所属类的Class对象
35     Class<?> c = this.getClass();
36     // 接收想要被调用的方法的名字
37     String name = req.getParameter("operation");
38     try {
39         // 通过class对象获取要调用的方法
40         // 如果被调用方法出错,此处就会抓取异常信息,也就是InvocationTargetException异常的来源
41         Method method = c.getMethod(name, HttpServletRequest.class, HttpServletResponse.class);
42         // 通过反射调用该方法
43         method.invoke(this, req, resp);
44     } catch (Exception e) {
45         e.printStackTrace();
46     }
47 }


个人总结分享,共同学习。

时间: 2024-11-08 19:34:33

InvocationTargetException异常的深入研究-servlet的setAttribute与getAttribute的相关文章

InvocationTargetException异常

package com.smbea.demo.reflect; /** * 越界异常 * @author hapday * @date 2017年1月20日 @time下午7:59:01 */ public class OverstepBoundaryException extends Exception { /** * */ private static final long serialVersionUID = 1L; private String message; public Strin

引入工程报包导入异常:import javax.servlet.annotation.WebFilter;

引入工程报包导入异常:import javax.servlet.annotation.WebFilter; (2013-02-21 16:38:00)   分类: java 今天上午导入了一个项目,用的是tomcat7.0的,但是我自己是tomcat6.0的,结果项目导入就很郁闷的发现有的类打上了红叉叉,进去一看,import javax.servlet.annotation.WebFilter 不能引入,找不到类,发现是少导入了servlet-api 包的问题,然后就去网上下载了一个包,可是导

前端异常监控解决方案研究

摘要: 异常监控不复杂也不简单啊... 原文:前端异常监控解决方案研究 作者:frustigor 前端监控包括行为监控.异常监控.性能监控等,本文主要讨论异常监控.对于前端而言,和后端处于同一个监控系统中,前端有自己的监控方案,后端也有自己等监控方案,但两者并不分离,因为一个用户在操作应用过程中如果出现异常,有可能是前端引起,也有可能是后端引起,需要有一个机制,将前后端串联起来,使监控本身统一于监控系统.因此,即使只讨论前端异常监控,其实也不能严格区分前后端界限,而要根据实际系统的设计,在最终的

Servlet中getInitParameter(),getParameter(),getAttribute()异同

ServletConfig#getInitParameter()作用于单个Servlet ServletContext#getInitParameter()作用于全局Servlet 作用域不同,但都需要先在web.xml中配置,都只能返回String类型变量 HttpServletRequest#getParameter():获取网页中表单里元素的name值,客户端向服务器返回数据,只能返回String类型变量 HttpServletRequest#setAttribute()和getAttri

JavaScript常用的方法和函数(setAttribute和getAttribute )

仅记录学习的新知识和示例,无干货. 1.setAttribute和getAttribute          (Attribute:属性) setAttribute:为元素添加指定的属性,并为其赋值:如果指定的属性已经存在,则仅设置或改变它的值. 调用方法:element.setAttribute(attributeName,attributeValue) 这是一个方法,无返回值,IE8及以下不支持. getAttribute:返回指定属性名的属性值. 调用方法:element.getAttri

Java异常的深入研究与分析

对于本文的内容,属于基础知识研究范畴,切勿以为读完此文就能将异常知识掌握到家.切记:操千曲而后晓声,观千剑而后识器,所以我觉得没有大量的源码阅读经验,你很难知道什么时候需要自定义异常,什么时候需要抛出异常. 异常机制概述 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 异常处理的流程 当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException异常解决

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) org.apache.struts2.json.JSONWriter.p

Java异常The type javax.servlet.http.HttpServletRequest cannot be resolved

The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files. 这个错误表示的意思还不太清楚,可能是,myeclipse不会自动找这个包servlet.jar,就算在相应工程/WebRoot/WEB-INF/lib里面,而且奇怪的是该错误提示总是在代码的最前面 ( 第一行位置 ) 解决办法:加入相关类的 jar 包到

setAttribute和getAttribute

1. ele.getAttribute(attributeName); 返回元素的指定属性值,如果元素没有该属性,则返回null 2. ele.setAttribute(attributeName,value); 为元素指定属性设置值,如果没有该属性,则创建该属性,并赋值 3. 在IE 7以及更早版本部分属性的设置应使用另外的名称,为了兼容IE <script> dom=(function(){ var fixAttr={ tabindex:'tabIndex', readonly:'read