实现功能:
1.用户登录与退出操作。
2.统计网站访问量。
3.过滤恶意请求。
视图层jsp
login.jsp:
<form action="index.jsp" method="post">
<table>
<tr>
<td>用户名: </td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码: </td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
<%
String error = (String) request.getAttribute("error");
if (error != null) {
out.write(error);
}
%>
welcome.jsp:
你好,<%=session.getAttribute("username")%>,你是第<%=application.getAttribute("num")%>位访客。
<a href="logout.do">退出登录</a>
过滤层Filter
资源过滤,ResourceFilter .java:
@WebFilter({"/welcome.jsp"})
public class ResourceFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponse hresponse = (HttpServletResponse) response;
HttpSession session = hrequest.getSession();
String username = (String) session.getAttribute("username");
if(username == null){
hresponse.sendRedirect("login.jsp");
}else{
chain.doFilter(request,response);
}
}
}
编码过滤,CharacterFilter
@WebFilter({"/servlet.do","/login.do"})
public class CharacterFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request,response);
}
}
业务层Servlet
LoginServlet:
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
private String username = "张三";
private String password = "123123";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if(this.username.equals(username) && this.password.equals(password)){
HttpSession session = request.getSession();
ServletContext application = request.getServletContext();
session.setAttribute("username",username);
Integer num = (Integer) application.getAttribute("num");
if (num == null) {
num = 0;
}
num++;
application.setAttribute("num", num);
response.sendRedirect("welcome.jsp");
}else{
request.setAttribute("error","用户名或密码错误,请重新输入。");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
}
退出登录,LogoutServlet :
@WebServlet("/logout.do")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.invalidate();
resp.sendRedirect("login.jsp");
}
}
备注:最近来手感,写了个类似Tomcat服务
github地址:https://github.com/cnamep001/my_tomcat.git