过滤器疑问???

过滤器疑问???

麻烦回答的老师能不能专业点啊,一个问题问了三遍就是不回答,答非所问,

我在这加了个注册,用户不登录不能进入主页,但是在过滤器中,当userList==null时,我设置的重定向,却执行了fc.doFilter(request, response),这是为啥 啊,我输出了userList也是空啊 ,却执行了  else,我哪里错了 啊,谢谢。。

if(userList==null) {

System.out.println("跳转");

hsresponse.sendRedirect(hsrequest.getContextPath()+"/login.jsp?flag=1");

return;

}else {

System.out.println("执行");

fc.doFilter(request, response);

return;


}



注册

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

<title>用户注册</title>

<link href="css/common1.css" type="text/css" rel="stylesheet">

  <link href="css/add1.css" type="text/css" rel="stylesheet">

  <link rel="stylesheet" href="css/login1.css">

<script type="text/javascript">

function validate_form(){

//获取用户值

var username=document.getElementById("username").value;

if(username==null || username==""){

alert("用户不能为空");

return false;

}

//获取用户密码

var password=document.getElementById("password").value;

if(password==null || password==""){

alert("密码不能为空");

return false;

}

//获取用户再次输入密码

var repassword=document.getElementById("repassword").value;

if(repassword!=password){

alert("两次密码输入不一致");

return false;

}

return true;

}

</script>

</head>

<body>


>

    <div class="center-login">

      <div class="login-banner">

       <a href="#"><img src="image/login_banner.png" alt=""></a>

     </div>

     <div class="user-login">

       <div class="user-box">

         <div class="user-title">

           <p>用户注册</p>

         </div>

         <form id="regForm"  onsubmit="return validate_form()" class="login-table" action="${pageContext.request.contextPath }/RegistServlet" method="post">

          <div class="login-left">

            <label class="username">用户名&nbsp&nbsp&nbsp&nbsp</label>

            <input type="text" id="username" class="yhmiput" name="username">

          </div>

          <div class="login-left">

            <label class="username">密码&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp</label>

            <input type="password" id="password" class="yhmiput" name="password">

          </div>

  <div class="login-left">

            <label class="username">确认密码</label>

            <input type="password" id="repassword" class="yhmiput" name="repassword">

          </div>

 

        

        <div class="login-btn"><button>注册</button></div>

        </form>

      </div>

    </div>

  </div>



</body>

</html>

注册servlet

package com.imooc.web.servlet;


import java.io.IOException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.imooc.domain.User;

import com.imooc.service.UserService;

import com.imooc.service.impl.UserServiceImpl;


/**

 * Servlet implementation class RegistServlet

 */

@WebServlet("/RegistServlet")

public class RegistServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public RegistServlet() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 接收数据

String username=request.getParameter("username");

String password=request.getParameter("password");

//封装数据

User user=new User();

user.setUsername(username);

user.setPassword(password);

System.out.println("用户输入的账户密码是:"+user);

//处理数据

UserService userService1=new UserServiceImpl();

List<User> userList=(List<User>)getServletContext().getAttribute("userlist");

if(userList!=null ) {

userService1.regist(userList, user);

}

System.out.println("存储用户保存的账户密码:"+userList);

//显示数据

response.sendRedirect(request.getContextPath()+"/login.jsp");

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

登录

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%String flag=request.getParameter("flag") ;%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

 <link rel="stylesheet" href="css/login.css">

</head>

<body>

<div class="login">

            <div class="header">

                <h1>

                    <a href="/login.do">登录</a>

                  

                </h1>

                  <p style="color: red">${msg}</p>

                <button></button>

                

            </div>

            <form action="${pageContext.request.contextPath }/LoginServlet" method="post">

                <div class="name">

                    <input type="text" id="name" name="username">

                    <p></p>

                </div>

                <div class="pwd">

                    <input type="password" id="pwd" name="password">

                    <p></p>

                </div>

                <div class="code">

                    <input type="text" id="code" name="verifyCode" style="width: 150px">

                    &nbsp;&nbsp;&nbsp;&nbsp;

                    <img src="code.jpg" style="width: 150px;height: 42px;vertical-align: middle;">

                    <p></p>

                </div>

                <div class="btn-red">

                    <input type="submit" value="登录" id="login-btn">

                    <a href="register.jsp" id="login-btn">注册</a>

                </div>

            </form>

        </div>

        <script type="text/javascript">

        var flag='<%=flag%>';

        if("1"==flag){

        alert("请登录!");

        }

       

       

        </script>

</body>

</html>

登录servlet

package com.imooc.web.servlet;


import java.io.IOException;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.imooc.domain.User;

import com.imooc.service.UserService;

import com.imooc.service.impl.UserServiceImpl;


/**

 * Servlet implementation class LoginServlet

 */

@WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public LoginServlet() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//接收数据

String username=request.getParameter("username");

String password=request.getParameter("password");

//封装数据

User user=new User();

user.setPassword(password);

user.setUsername(username);

//处理数据

UserService userservice=new UserServiceImpl();

List<User> userlist=(List<User>) getServletContext().getAttribute("userlist");

User user1=userservice.login(userlist, user);

System.out.println(user1);

if(user1==null) {

//登录失败

request.setAttribute("msg","用户或密码错误,如未注册,请点击注册");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}else {

//登录成功

request.getSession().setAttribute("user1", user1);

response.sendRedirect(request.getContextPath()+"/bookList.html");

}

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

doGet(request, response);

}


}

过滤器

package com.imooc.Filter;


import java.io.IOException;

import java.util.List;


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 com.imooc.domain.User;


public class LoginFilter implements Filter {


@Override

public void destroy() {

// TODO Auto-generated method stub


}


@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain fc)

throws IOException, ServletException {

HttpServletRequest hsrequest=(HttpServletRequest)request;

HttpServletResponse hsresponse=(HttpServletResponse)response;

List<User> userList=(List<User>) hsrequest.getServletContext().getAttribute("userlist");

if(userList==null) {

hsresponse.sendRedirect("/login.jsp?flag=1");

return;

}else {

fc.doFilter(request, response);

return;

}


}


@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub


}


}



正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,非常抱歉给同学带来的不便,老师这里去掉了return,去掉后,在老师的工程中是可以的。

但经过和同学沟通了解到,同学的userList并不是null,在监听器中已经new过对象了,实际上是集合长度是0. 这里把判断条件userList==null修改为userList.isEmpty() 就可以进入到重定向到/login.jsp啦。修改后如下所示:

if(userList.isEmpty()) {

hsresponse.sendRedirect("/login.jsp?flag=1");

//return;

}else {

fc.doFilter(request, response);

return;

}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

芝芝兰兰 2019-11-03 16:20:20

同学你好。建议修改LoginFilter为:

package com.imooc.Filter;



import java.io.IOException;

import java.util.List;



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 com.imooc.domain.User;



public class LoginFilter implements Filter {



	@Override

	public void destroy() {

		// TODO Auto-generated method stub



	}



	@Override

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain fc)

			throws IOException, ServletException {

		HttpServletRequest hsrequest=(HttpServletRequest)request;

		HttpServletResponse hsresponse=(HttpServletResponse)response;

		List<User> userList=(List<User>) hsrequest.getServletContext().getAttribute("userlist");

		if(userList==null) {

			hsresponse.sendRedirect(hsrequest.getContextPath()+"/login.jsp?flag=1");

//			return;

		}else {

				fc.doFilter(request, response);

				return;

				}

			

		



	}



	@Override

	public void init(FilterConfig arg0) throws ServletException {

		// TODO Auto-generated method stub



	}



}

再试一下~

祝学习愉快~

  • 提问者 兮兮666 #1
    请问和我的代码有啥不同吗,我就问个 简单过滤器,没生效,问了3遍,3种答案,吧我代码运行下,检查下我哪里错了 就是了,
    2019-11-03 20:38:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师