运行程序时发生无限循环 [英] Infinite loop occures when run the program
问题描述
FilterRequest.java
package com.mobitel.bankdemo.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mobitel.bankdemo.domain.User;
public class FilterRequest implements Filter {
FilterConfig filterConfig = null;
$ b $ public FilterRequest(){
super();
$ b $ public void init(FilterConfig filterConfig)throws ServletException {
this.filterConfig = filterConfig;
$ b $ public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throws ServletException,IOException {
HttpServletRequest request =(HttpServletRequest)req;
HttpServletResponse响应=(HttpServletResponse)resp;
System.out.println(Inside the filter ..............);
HttpSession session = request.getSession(true);
用户u = null;
if(session.getAttribute(loggedUser)!= null){
u =(User)session.getAttribute(loggedUser); (u!= null)
{
System.out.println(user does exit ..+ u.getUname());
chain.doFilter(req,resp);
} else {
String message =Please Login!;
req.setAttribute(loginMsg,message);
response.sendRedirect(login2.jsp);
$ b public void destroy(){
// do cleanup stuff
}
}
web.xml过滤器映射;
< filter-name> FilterRequest< / filter-name>
< filter-class> com.mobitel.bankdemo.web.FilterRequest< / filter-class>
< / filter>
< filter-mapping>
< filter-name> FilterRequest< / filter-name>
< url-pattern> *。jsp< / url-pattern>
< / filter-mapping>
预先感谢您
我不是java专家,但只是看看你的代码我只想说两件事情:
$ b
从这里请求的名字
if(session.getAttribute(loggedUser)!= null){
u =(用户)session.getAttribute(loggedUser); (u!= null)
{
System.out.println(user does exit ..+ u.getUname());
chain.doFilter(req,resp);
它会再次进入子程序或方法来过滤其他的东西,但进入这个方法后,你正在做 user = null
因此,如果我们在
之前进行了整理, / b>
if(u!= null)
{
System.out.println(user does exit。 。+ u.getUname());
chain.doFilter(req,resp);
所以在你的方法之外定义User u = null。可能会解决你的问题
This java web application run like an infinite loop. can anyone tell me the reason? need to filter every request here.allowed can use the system.other users should go to login page with a message..please help me to do this.
FilterRequest.java
package com.mobitel.bankdemo.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mobitel.bankdemo.domain.User;
public class FilterRequest implements Filter{
FilterConfig filterConfig = null;
public FilterRequest() {
super();
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
System.out.println("Inside the filter.............." );
HttpSession session = request.getSession(true);
User u = null;
if(session.getAttribute("loggedUser")!=null){
u = (User) session.getAttribute("loggedUser");
}
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
}else{
String message = "Please Login!";
req.setAttribute("loginMsg", message);
response.sendRedirect("login2.jsp");
}
}
public void destroy() {
// do cleanup stuff
}
}
web.xml filter mapping
<filter>
<filter-name>FilterRequest</filter-name>
<filter-class>com.mobitel.bankdemo.web.FilterRequest</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterRequest</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Thank you in advance
i am not java expert but just looking over your code i just want to say two things
(1) consider if filter gets a user name from request like here
if(session.getAttribute("loggedUser")!=null){
u = (User) session.getAttribute("loggedUser");
}
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
it will go again into subroutine or method to filter other things but after getting into this method you are doing user=null
and due to this it will again enter into same if we have sorted out before
which is
if (u!= null)
{
System.out.println("user does exits.." + u.getUname() );
chain.doFilter(req, resp);
so define User u=null outside of your method. May be it will solve ur problem
这篇关于运行程序时发生无限循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!