思路
设置一个登录页面 当我们信息输入正确时,可以进去主页
当我们信息输入错误时,进入错误界面
当我们注销时,就不能再进到主页(通过过滤器来实现)
首先 编写 login界面、success界面、error界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<div align="center" >
<h1>主页</h1>
</div>
<div align="right"><a href="/servlet/logout" > 注销</a></div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>errow</title>
</head>
<body>
<div align="center" >
<h1>账号或密码输入错误</h1>
</div>
<div align="right"><a href="login.jsp"> 返回登陆</a></div>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<div align="center" >
<h1>登录界面</h1>
<form action="/servlet/login" method="post">
账号 <input type="text" name="username" value="${username}">
<input type="submit" name="提交">
</form>
</div>
</body>
</html>
然后我们编写servletl 来处理登录和注销事务
处理登录
import com.llf.pojo.Contant;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class servletLogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
/**
* 判断输入的信息是否与admin相等 如果相等 重定向到成功界面
* 如果失败 重定向到错误界面
*/
if (username.equals("admin")){
//登陆成功
req.getSession().setAttribute(Contant.user1,req.getSession().getId());
resp.sendRedirect("/sys/success.jsp");
}else {
//登录失败
resp.sendRedirect("/errow.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
处理注销
import com.llf.pojo.Contant;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class servletLoginOut extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object attribute = req.getSession().getAttribute(Contant.user1);
/**
* 判断是否为空,然后注销后重定向到登录界面
*/
if (attribute!=null){
req.getSession().removeAttribute(Contant.user1);
resp.sendRedirect("/login.jsp");
}else {
resp.sendRedirect("/login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
在这里 方面我们后期的更新、修改 我们将获得的Attribute值设置为变量 并创建一个实体类 用来对其初始化
最后创建过滤器 来实现注销后不能进入主页的功能
import com.llf.pojo.Contant;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SysFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain Chain) throws IOException, ServletException {
/**
* 因为过滤器中的ServletRequest、ServletResponse不能得到Session的值,
* 所以我们需要对其进行强制转换,转换成子类HttpServletRequest、 HttpServletResponse
*/
HttpServletRequest req1 = (HttpServletRequest) req;
HttpServletResponse resp1 = (HttpServletResponse) resp;
// 判断Attribute的值是否为空 空值的话就转到错误页面
if (req1.getSession().getAttribute(Contant.user1)==null){
resp1.sendRedirect("errow.jsp");
}
Chain.doFilter(req,resp);
}
@Override
public void destroy() {
}
}
所有工作完成后 开始写servlet注册和映射,这里需要注意映射路径一定要和jsp中的链接路径一致,否则页面跳转就会报500的错误
<servlet>
<servlet-name>servletLogin</servlet-name>
<servlet-class>com.llf.Servlet.servletLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletLogin</servlet-name>
<url-pattern>/servlet/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletLoginOut</servlet-name>
<servlet-class>com.llf.Servlet.servletLoginOut</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletLoginOut</servlet-name>
<url-pattern>/servlet/logout</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.llf.Filter.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
最后演示成果
然后在登录界面访问主页
虽然没有重定向到错误页面 但是也阻止了它可以进入主页 说明我们的过滤器发挥了作用