空指针异常
问题描述:
当我什么也不输的时候,它会报空指针异常如何去掉这个异常,不让它报了,如果输入正确用户名不会报错的
package com.LoginFilter;
import java.io.IOException;
import com.mfl.DataConn.DAOFactory;
import com.mlf.Bean.LoginBean;
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.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
public class SessionFilter implements Filter
{
public void init(FilterConfig filterConfig) throws ServletException
{
this.config = filterConfig;
System.out.println("初始化");
}
public static boolean isContains(String container, String[] regx)
{
boolean result = false;
System.out.println("regx.length长度="+regx.length);
for (int i = 0; i < regx.length; i++)
{
System.out.println("第"+i+"循环");
System.out.println("container="+container);
System.out.println("regx="+regx[i]);
//第一次是的container是/shop/index.jsp
//regx[0]是.jsp,所以里面包含成立,应该等于1,但条件是!=-1 所以返回true
if (container.indexOf(regx[i]) != -1)//indexOf返回 String 对象内第一次出现子字符串的字符位置。
{// 在取得URI中是否有.jsp或者.htm后缀的文件,-1是没有
System.out.println("if里第"+i+"循环");
return true;
}
}
System.out.println("result被执行");
return result;// 还要这个吗?
}
public FilterConfig config;
public void setFilterConfig(FilterConfig config)
{
this.config = config;
}
public FilterConfig getFilterConfig()
{
return config;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
{System.out.println("doFilter");
/*HttpServletRequest httpreq = (HttpServletRequest) request;
HttpSession session = httpreq.getSession();
String user = (String) session.getAttribute("userName");
// Object user = httpreq.getSession().getAttribute("userName");
System.out.println("doFilteruser");
System.out.println("user=" + user);
*
* */
HttpServletRequest req = (HttpServletRequest) request;
System.out.println("httpreq ReuestURI="+req.getRequestURI());
HttpSession session = req.getSession();
String user = (String) session.getAttribute("name");
System.out.println("用户名:::::userName="+user);
System.out.println("doFilter222");
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(
(HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings");// 得到初始化参数值是login.jsp
String includeStrings = config.getInitParameter("includeStrings");// //得到初始化参数值是.jsp;.html
String registerStrings=config.getInitParameter("registerStrings");
String register_do=config.getInitParameter("register_doStrings");
String useConfStrings=config.getInitParameter("useConfStrings");
String redirectPath = req.getContextPath()// 得到绝对还是上下文路径
+ config.getInitParameter("redirectPath");// 得到初始化参数值是login.jsp
String disabletestfilter = config.getInitParameter("disabletestfilter");// 得到值N
// disabltestfilter是N吧,它什么时候会与Y相等,不会相等 理解错了吗?
System.out.println("doFilter333");
System.out.println("disabletestfilter=" + disabletestfilter);
if (disabletestfilter.toUpperCase().equals("Y"))
{// 转换成小写与Y进行比较,
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}// 继续连接,若没有其它连接则激活servlet或jsp
return;
}
// 得到的值是login.jsp
String[] logonList = logonStrings.split(";");// ?????不明白,login没有分号呀,返回
// 为null吧
// 得到的值是:.jsp .html
String[] includeList = includeStrings.split(";");// 分隔符得到的值是.jsp和.html放入数组中
String[] registerList = registerStrings.split(";");
String[] useConfList=useConfStrings.split(";");
String[] register_doList= register_do.split(";");
for (int i=0;i<registerList.length ;i++ )
{
System.out.println("registerList="+registerList[i]);
}
System.out.println("doFilter4444");
LoginBean bean =null;
try
{
if(user!=null)
{
bean= DAOFactory.getLoginDAOInstance().executeInfo(user);
}
} catch (Exception e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
if (user == null)
{// 若用户名是null
/*
当用户是时候,除了index.jsp,regiser.jsp可以进行使用其它页面都不可以使用所以要写三个判断
*/
// 若没有.jsp,.html文件则dofilter()
if (!SessionFilter.isContains(req.getRequestURI(), includeList))
{// 若上下文路径里没有.jsp或者.html
System.out.println("includeList()...........");
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}// 若没有则继续其它连接
return;
}
// getRequestURI会输出所有文件的完整uri路径
// 若有login.jsp文件则dofilter()
if (SessionFilter.isContains( req.getRequestURI(), logonList))
{
System.out.println("loginList().......");//头一次执行了这个
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return;
}
System.out.println("useConfList()*********************");
if (SessionFilter.isContains( req.getRequestURI(), useConfList))
{
System.out.println("useConfList().......");//头一次执行了这个
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return;
}
if (SessionFilter.isContains( req.getRequestURI(), registerList))
{
System.out.println("registerStrings().......");//头一次执行了这个
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return;
}
if (SessionFilter.isContains(req.getRequestURI(), register_doList))
{
System.out.println("register_doList().......");//头一次执行了这个
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return;
}
System.out.println("哪个也没有执行");
try
{
wrapper.sendRedirect(redirectPath);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
} else if(bean.username.trim().equals(user.trim()))
{
System.out.println("user不是空");
try
{
chain.doFilter(request, response);
} catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ServletException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}// 还继续其它连接吗?
}
else
{System.out.println("执行else");
System.out.println("没有此用户");
}
}
public void destroy()
{
this.config = null;
}
}
[解决办法]
自己调试跟踪一下啊。。。。。
[解决办法]
我想基本不是程序的逻辑错误,
基本上完善一下你的程序, 比如说异常处理,等等。。。。。。
[解决办法]
把错误代码和出现错误的地方帖出来不 ,不要把一堆都帖上去,