小疑问!!!!
来源:5-3 权限拦截过滤器的编写
MasonM
2019-06-01 18:07:54
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //获得Session(需要HttpServletRequest) HttpServletRequest request=(HttpServletRequest)req; User existUser = (User)request.getSession().getAttribute("existUser"); if (existUser == null) { //没有登录 req.setAttribute("msg","你还没有登录,请先登录!"); req.getRequestDispatcher("/login.jsp").forward(request,resp); return; } chain.doFilter(req, resp); }
老师,为什么这里
使用ServletRequest对象req来设置属性req.setAttribute("msg","你还没有登录,请先登录!");
但转发的时候,forward里并不是用ServletRequest对象req呢?↓
req.getRequestDispatcher("/login.jsp").forward(request,resp);
而是用HttpServletRequest对象request呢?
6回答
同学你好,这是查看源码的提示,同学点击Accept试一下。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
MasonM
提问者
2019-06-02
请问一下老师,我在idea中按ctrl想查看源码,结果弹出这个,这个是什么意思呢?
应该选择哪一个?
吃吃吃鱼的猫
2019-06-02
同学你好,我根据经验来说,第一种是可以的哦~
使用了强转后的HttpServletRequest request对象来调用getRequestDispatcher()转发的话,jsp页面能获取到。
但是如果重新new了一个HttpServletRequest,是获取不到之前对象中的数据的。
同学可以在自己环境中进行测试一下哦~这样也能加深印象呢~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
MasonM
提问者
2019-06-02
这里是使用了ServletRequest req对象来设置msg属性的,
然后也是用ServletRequest req对象来调用getRequestDispatcher()来转发的,
如果是这里是使用了强转后的HttpServletRequest request对象来调用getRequestDispatcher()转发的话,jsp页面还能获取到吗?
例如:
1:
//获得Session(需要HttpServletRequest) HttpServletRequest request=(HttpServletRequest)req; User existUser = (User)request.getSession().getAttribute("existUser"); if (existUser == null) { //没有登录 req.setAttribute("msg","你还没有登录,请先登录!"); request.getRequestDispatcher("/login.jsp").forward(request,resp); return; } chain.doFilter(req, resp);
变成这样呢?
或者如果是这样呢?
//获得Session(需要HttpServletRequest) HttpServletRequest request=new HttpServletRequest() ; User existUser = (User)request.getSession().getAttribute("existUser"); if (existUser == null) { //没有登录 req.setAttribute("msg","你还没有登录,请先登录!"); request.getRequestDispatcher("/login.jsp").forward(request,resp); return; } chain.doFilter(req, resp);
或者这样的话,jsp页面还能获得到设置的msg吗
吃吃吃鱼的猫
2019-06-02
同学你好,
HttpServletRequest继承自ServletRequest
HttpServletRequest只是比ServletRequest多了一些针对于Http协议的方法。如getHeader (String name), getMethod () ,getSession () 等等。
转发方法在两者中都存在,所以,都可以使用哦~
同学第二个问题,数据存放在JSP内置对象request中,使用HttpServletRequest,ServletRequest都可以获得对象中的数据,和强转没有关系哦~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
好帮手慕阿满
2019-06-01
同学你好,这里在转发时使用ServletRequest和HTTPServletRequest都可以。至于使用ServletResponse,因为在这个doFilter中没有使用的HttpServletResponse,也没有转换,所以还是使用的ServletResponse。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~