当前位置: 代码迷 >> Java Web开发 >> ,关于servlet和java反射的有关问题
  详细解决方案

,关于servlet和java反射的有关问题

热度:337   发布时间:2016-04-14 21:06:36.0
求助,关于servlet和java反射的问题

@Test
public void list2() {
SystemContext.setPageOffset(0);
SystemContext.setPageSize(15);
Pager<User> users = userDao.find("");
for(User u:users.getDatas()) {
System.out.println(u);
}
}

这个测试类能运行,从数据库中取出数据,但是我想用servlet来实现把数据传到JSP页面去,下面这段就报错了

public String list(HttpServletRequest request, HttpServletResponse response) {
SystemContext.setPageOffset(0);
SystemContext.setPageSize(15);
Pager<User> users = userDao.find("");
request.setAttribute("users", users);
return "/user/list.jsp";
}

这里继承了BaseServlet,BaseServlet是实现反射的主要代码

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletExceptionIOException {
try {
String method = request.getParameter("method");
System.out.println("method:"+method);
Method m = this.getClass().getMethod(method, HttpServletRequest.class,HttpServletResponse.class);
String path = (String)m.invoke(this, request,response);
if(path.startsWith(redirPath)) {
response.sendRedirect(redirPath.substring(redirPath.length()));
} else {
request.getRequestDispatcher(path).forward(request, response);
}

} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}

我是用mybatis来操作数据库的,上面那个测试类能获取SqlSession ,但是下面那个list方面就创建不了Sqlsession,然后下面是报错的信息,本人也是才开始学这一部分,求大神帮帮忙啊
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.crc.shop.web.BaseServlet.service(BaseServlet.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.crc.shop.util.MyBatisUtil
at com.crc.shop.dao.BaseDao.find(BaseDao.java:136)
at com.crc.shop.dao.BaseDao.find(BaseDao.java:107)
at com.crc.shop.dao.UserDao.find(UserDao.java:55)
at com.crc.shop.web.UserServlet.list(UserServlet.java:42)
... 26 more

说是MyBatisUtil类不能初始化,但是测试类就可以,已经弄了一天了
------解决思路----------------------
@Test 应该干了一些事情,比方说依赖注入之类

个人建议用断点,查看userDao以及BaseDao的内部成员变量是否正确

------解决思路----------------------

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.crc.shop.util.MyBatisUtil
at com.crc.shop.dao.BaseDao.find(BaseDao.java:136)
at com.crc.shop.dao.BaseDao.find(BaseDao.java:107)
at com.crc.shop.dao.UserDao.find(UserDao.java:55)
at com.crc.shop.web.UserServlet.list(UserServlet.java:42)
... 26 more

这里说是没有找到class,你用debug跟踪一下看看
------解决思路----------------------
debug useDao的代码
------解决思路----------------------
引用:
Quote: 引用:

debug useDao的代码

不太会用调试      能不能教一下啊  


建议先把DEBUG调试学会。。。提高效率
  相关解决方案