请教下 我用过滤器写个验证登陆,除了登陆页面,没有出侧无法浏览~~ 关键代码如下:
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????
-----------------------------------------------------
if (session.getAttribute("username")==null&&
!requestpath.endsWith(loginpage)&&
!requestpath.endsWith(proLogin)){
System.out.println("session的值:"+session.getAttribute("username"));
//跳转到登录页面 request.setAttribute("tip", "您还尚未登录"); request.getRequestDispatcher(loginpage).forward(request, response);//登陆界面
/* ((HttpServletResponse)response).sendRedirect("top.jsp");
//登陆处理页面 */
}
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????package com.dong.filter;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 javax.servlet.jsp.jstl.core.Config;public class Logfilter implements Filter {
private FilterConfig config;
//初始化
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config=config;
}
//实现销毁方法
public void destroy() {
this.config=null;
} //过滤的核心方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("我的过滤器");
request.setCharacterEncoding("gbk");
//获取参数配置
String loginpage= config.getInitParameter("loginpage");
String proLogin= config.getInitParameter("proLogin");
//将请求转化为HttpServletRequest请求
HttpServletRequest requ=(HttpServletRequest)request;
//获取请求页面路径
String requestpath=requ.getServletPath();
//session为空,说明没有登录
//请求的页面不是登陆页面,也不是登录处理页面
HttpSession session=((HttpServletRequest)request).getSession();
if (session.getAttribute("username")==null&&
!requestpath.endsWith(loginpage)&&
!requestpath.endsWith(proLogin)){
System.out.println("session的值:"+session.getAttribute("username"));
//跳转到登录页面
request.setAttribute("tip", "您还尚未登录");
request.getRequestDispatcher(loginpage).forward(request, response);
/* ((HttpServletResponse)response).sendRedirect("top.jsp");
*/ }
else{
chain.doFilter(request,response);
System.out.println("完成");
}
}
}
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????
-----------------------------------------------------
if (session.getAttribute("username")==null&&
!requestpath.endsWith(loginpage)&&
!requestpath.endsWith(proLogin)){
System.out.println("session的值:"+session.getAttribute("username"));
//跳转到登录页面 request.setAttribute("tip", "您还尚未登录"); request.getRequestDispatcher(loginpage).forward(request, response);//登陆界面
/* ((HttpServletResponse)response).sendRedirect("top.jsp");
//登陆处理页面 */
}
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????
这边session获取的usarname是null,可总是抛异常java.lang.NullPointerException 怎么解决啊、?????package com.dong.filter;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 javax.servlet.jsp.jstl.core.Config;public class Logfilter implements Filter {
private FilterConfig config;
//初始化
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config=config;
}
//实现销毁方法
public void destroy() {
this.config=null;
} //过滤的核心方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("我的过滤器");
request.setCharacterEncoding("gbk");
//获取参数配置
String loginpage= config.getInitParameter("loginpage");
String proLogin= config.getInitParameter("proLogin");
//将请求转化为HttpServletRequest请求
HttpServletRequest requ=(HttpServletRequest)request;
//获取请求页面路径
String requestpath=requ.getServletPath();
//session为空,说明没有登录
//请求的页面不是登陆页面,也不是登录处理页面
HttpSession session=((HttpServletRequest)request).getSession();
if (session.getAttribute("username")==null&&
!requestpath.endsWith(loginpage)&&
!requestpath.endsWith(proLogin)){
System.out.println("session的值:"+session.getAttribute("username"));
//跳转到登录页面
request.setAttribute("tip", "您还尚未登录");
request.getRequestDispatcher(loginpage).forward(request, response);
/* ((HttpServletResponse)response).sendRedirect("top.jsp");
*/ }
else{
chain.doFilter(request,response);
System.out.println("完成");
}
}
}
为什么提示我等待什么实例销毁呢?这到底是怎么回事 啊?
Waiting for 1 instance(s) to be deallocated
经过检查是由于对数据库的查询之后,没有对Session进行释放做成的。
主要是Spring 下的 HibernateDaoSupport 类的 getSession() 导致的连接泄露。 解放方法: Java代码
Session s=getSession();
...........
数据库操作
.............
s.close(); 自己百度一下 能查到些线索 然后看看有没有相似的地方
别认为给分 这里的就该去帮你百度这里的分算个P啊帮你的人是希望你能成长
再看看requestpath是不是为null
if (session.getAttribute("username")==null&&
!requestpath.endsWith(loginpage)&&
!requestpath.endsWith(proLogin)){
//前面的条件应该没错
// 估计是requestpath有问题, 或者loginpage proLogin有问题.
//....
}code]
!requestpath.endsWith(loginpage) ||
!requestpath.endsWith(proLogin)){System.out.println("session的值:"+session.getAttribute("username"));//跳转到登录页面
request.setAttribute("tip", "您还尚未登录");
request.getRequestDispatcher(loginpage).forward(request, response);
/* ((HttpServletResponse)response).sendRedirect("top.jsp");
*/ }