问题描述
一个利用cookie实现自动登录功能,也不知道写的对不对,但是部署时就有错误,下面分别是web.xml各filter.java、不有错误信息:web.xml<servlet-mapping><servlet-name>HostelServlet</servlet-name><url-pattern>/HostelServlet</url-pattern></servlet-mapping><filter><!--<display-name>LoginFilter</display-name>--><filter-name>LoginFilter</filter-name><filter-class>com.student.web.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>LoginFilter</filter-name><url-pattern>/jsps/main.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>LoginFilter</filter-name><servlet-name>HosteServlet</servlet-name></filter-mapping><filter-mapping><filter-name>LoginFilter</filter-name><servlet-name>UserInfoServlet</servlet-name></filter-mapping>
filter.javapackagecom.student.web.filter;importjava.io.IOException;importjava.lang.reflect.InvocationTargetException;importjava.util.LinkedHashMap;importjava.util.Map;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.beanutils.BeanUtils;importcom.student.user.domain.User;importcom.student.user.service.UserService;@WebFilter(urlPatterns={"/jsps/main.jsp"},servletNames={"HostelServlet","UserInfoServlet",})publicclassLoginFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{chain.doFilter(request,response);/**1、取得session中数据判断用户有没有登录*如果session中有数据说明用户已经登录,如果为null说明没有登录*2、如果没登录,取得cookie中数据,如果cookie为null转到登录页面,*如果不为空,用cookie中的用户名和密码查询数据库,把查询出的数*据保存到session中,*3、session中有数据后放行*///把ServletRequest对象转成HttpServletRequest对象HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseresp=(HttpServletResponse)response;Useruser=(User)req.getSession().getAttribute("sessionUser");if(user==null){Cookie[]cookie=req.getCookies();if(cookie==null){req.getRequestDispatcher("/jsps/user/login.jsp").forward(req,resp);}else{UserServiceuserService=newUserService();Map<String,String>map=newLinkedHashMap<String,String>();for(Cookiec:cookie){if(c.getName()=="cookieUsername"||c.getName()=="cookiePassword"){map.put(c.getName(),c.getValue());}}try{BeanUtils.populate(user,map);//封装数据}catch(IllegalAccessExceptione){thrownewRuntimeException();}catch(InvocationTargetExceptione){thrownewRuntimeException();}req.getSession().setAttribute("sessionUser",userService.userLoginService(user));}}else{chain.doFilter(request,response);//放行}}publicvoidinit(FilterConfigfConfig)throwsServletException{}}
错误信息:六月13,20142:00:10下午com.sun.faces.spi.InjectionProviderFactorycreateInstance信息:JSF1048:有PostConstruct/PreDestroy注释。标有这些注释的ManagedBeans方法将表示注释已处理。六月13,20142:00:10下午org.apache.catalina.core.StandardContextfilterStart严重:ExceptionstartingfilterLoginFilterjava.lang.ClassNotFoundException:com.student.web.filter.LoginFilteratorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)atorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)atorg.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)atorg.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)atorg.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)atorg.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)atorg.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)atorg.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4656)atorg.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5312)atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)atorg.apache.catalina.core.StandardContext.reload(StandardContext.java:3926)atorg.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1271)atorg.apache.catalina.startup.HostConfig.check(HostConfig.java:1440)atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:301)atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)atorg.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)atorg.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1374)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)atorg.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)atjava.lang.Thread.run(Thread.java:744)六月13,20142:00:10下午org.apache.catalina.core.StandardContextstartInternal严重:ErrorfilterStart六月13,20142:00:10下午org.apache.catalina.core.StandardContextstartInternal严重:Context[/students]startupfailedduetopreviouserrors六月13,20142:00:10下午org.apache.catalina.loader.WebappClassLoadercheckThreadLocalMapForLeaks严重:Thewebapplication[/students]createdaThreadLocalwithkeyoftype[com.sun.faces.util.Util$1](value[com.sun.faces.util.Util$1@64d5eca6])andavalueoftype[java.util.HashMap](value[{com.sun.faces.patternCache={=}}])butfailedtoremoveitwhenthewebapplicationwasstopped.Threadsaregoingtoberenewedovertimetotryandavoidaprobablememoryleak.六月13,20142:00:10下午org.apache.catalina.core.StandardContextreload
顺便看一下这样实现的逻辑对不
解决方案
解决方案二:
java.lang.ClassNotFoundException:com.student.web.filter.LoginFilter没你这个类呀,你编译了吗,或者编译通过了吗?
解决方案三:
重启下tomcat吧
解决方案四:
com.student.web.filter.LoginFilter这个类没找到,是不是没有编译啊,或者class文件放错地方了还有,判断字符串相等是不是要用equals()啊
解决方案五:
你这配置文件怎么那么多filter-mapping,干什么用的,只有一个filter你用什么对应
解决方案六:
引用1楼longtian1213的回复:
java.lang.ClassNotFoundException:com.student.web.filter.LoginFilter没你这个类呀,你编译了吗,或者编译通过了吗?
我用的Myeclipse直接部署的,我把Tomcat中的项目文件删了,然后重新部署,其它的类都有就是没有这个类,我把这个类放在其它文件夹下重新部署也一样
解决方案七:
引用2楼a276202031的回复:
重启下tomcat吧
重启了很多次,结果一样不行
解决方案八:
引用4楼zq549805070的回复:
你这配置文件怎么那么多filter-mapping,干什么用的,只有一个filter你用什么对应
引用3楼a1969212650的回复:
com.student.web.filter.LoginFilter这个类没找到,是不是没有编译啊,或者class文件放错地方了还有,判断字符串相等是不是要用equals()啊
嗯,改回来了。那个类编译不出class文件
解决方案九:
引用6楼lingfeng892的回复:
Quote: 引用2楼a276202031的回复:
重启下tomcat吧重启了很多次,结果一样不行
clean一下然后在重启