栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

我的第一个javaweb项目优化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的第一个javaweb项目优化

一:servlet3.0实现代码优化(优化配置文件)

使用注解@WebServlet(urlPatters="/请求地址")代替xml文件 原代码


  Archetype Created Web Application
   
      
          loginuser
          
              web.LoginServlet
          
      
      
          loginuser
          /login
      
 
    
    
        loginout
        
            web.LoginOutServlet
        
    
    
        loginout
        /loginout
    
 
    
    
        selectall
        
            web.SelectUsersServlet
        
    
    
        selectall
        /selectusers
    
 
    
    
        deletebyid
        
            web.DeleteUsersServlet
        
    
    
        deletebyid
        /deleteuser
    
 
    
    
        delete
        
            web.DeleteByIdServlet
        
    
    
        delete
        /deletebyid
    
 
    
    
        selectbyid
        
            web.SelectByIdServlet
        
    
    
        selectbyid
        /selectbyid
    
 
    
    
        update
        
            web.UpdateUserServlet
        
    
    
        update
        /updateuser
    
 
    
    
        add
        
            web.AddUserServlet
        
    
    
        add
        /adduser
    
这些代码将被删除,在每个servlet处理类中加入注解,替代他们
@WebServlet(urlPatterns = "/usersServlet")

name属性:

设置servlet的对象名

initParams属性:

设置初始化参数,在init()中获取数据的

这个属性是替代了web.xml文件中的标签


        aa
        
            com.yhp.web.LoginServlet
        
        
            a1
            张三的初始化参数
        
    
  初始化参数案例
package com.yhp.web;

import com.yhp.bean.Users;
import com.yhp.service.UsersService;
import com.yhp.service.impl.UsersServiceImpl;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/login",name = "loginservlet",initParams = {
        @WebInitParam(name = "a1",value = "张三的初始化参数"),
        @WebInitParam(name="a2",value = "abcd")  //初始化参数是在servlet的init方法中获取
},loadonStartup = 2)
public class LoginServlet extends HttpServlet {
    public LoginServlet() {
        System.out.println("loginservlet---2");
    }

    //  重写方法时,二选一,1.重写service()   2.重写doGet()和doPost()
    @Override
    public void init(ServletConfig config) throws ServletException {
        //获得初始化参数
        String a1_value = config.getInitParameter("a1");
        String a2_value = config.getInitParameter("a2");
        System.out.println(a1_value+","+a2_value+"--->init()");
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数(记得处理编码方式)
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");//要和表单中的name值相同
        String userpass = request.getParameter("userpass");
        //2.写逻辑(面向接口编程)
        UsersService usersService=new UsersServiceImpl();
        Users u = usersService.login(username, userpass);
        //3.返结果
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if(u==null){
            //登录失败(在后端返回给前端一个js弹窗)-如果使用js,则不要再使用重定向或转发的形式跳页面
            //location.href 属于重定向跳转页面
            writer.print("");
        }else{
            //登录成功
            HttpSession session = request.getSession();
            session.setAttribute("u1",u);
            writer.print("");
        }

    }

}
loadOnStartup属性:

设置启动的优先级 

@WebServlet(urlPatterns = "/loginout",loadonStartup = 1)

默认属性的值是-1,用户指定时,给正整数,且正整数越小,优先级越高

加完这个属性后,当前类的对象就会在服务器启动时,创建对象

设置优先级案例
package com.yhp.web;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(urlPatterns = "/loginout",loadonStartup = 1)
public class LoginOutServelet  extends HttpServlet {

    public LoginOutServelet() {
        System.out.println("loginout---1");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //清除session,跳转页面
        HttpSession session = req.getSession();
        session.invalidate();
        //跳转index.jsp页面
        resp.sendRedirect("index.jsp");
    }
}

使用上面的注解,可以简化web.xml的内容,但是也不要删除web.xml

二:合并servlet(后端部位为主)

 合并代码

 统一请求名为/usersServlet

修改所有请求格式:/usersServlet?key=请求名
package com.yhp.web;

import com.yhp.bean.Users;
import com.yhp.service.UsersService;
import com.yhp.service.impl.UsersServiceImpl;
import com.yhp.util.PageUtil;
import com.yhp.util.myPageUtilsPlus;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

//所以操作users表的请求都走这个处理类
@WebServlet(urlPatterns = "/usersServlet")
public class UsersServlet extends HttpServlet {
    //定义处理请求的新增方法
    protected void adduser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        //req.setCharacterEncoding("utf-8");
        String uname = req.getParameter("uname");
        String usex = req.getParameter("usex");
        String uage = req.getParameter("uage");
        String upass = req.getParameter("upass");
        //2.调逻辑
        UsersService usersService=new UsersServiceImpl();
        Users users = new Users();
        users.setUsername(uname);
        users.setSex(usex);
        users.setAge(Integer.parseInt(uage));
        users.setPassword(upass);
        int i = usersService.insert(users);
        //3.返结果
        resp.setContentType("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        if (i>0) {

            writer.println("");
        }else {

            writer.println("");
        }
    }
    //定义处理请求的假删除方法
    protected void deletebyid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        String userid = (String) req.getParameter("userid");
        int uid = Integer.parseInt(userid);
        //2.写逻辑
        UsersService usersService=new UsersServiceImpl();
        int i = usersService.deleteByid(uid);
        //3.返结果
        resp.setContentType("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        if (i>0){
            //删除成功   注意,不可以用重定向list.jsp
            //deleteservlet->location.href->selectusersservlet->list.jsp
            writer.println("");
        }else {
            //删除失败
            writer.println("");
        }
    }
    //定义处理请求的真删除方法
    protected void deleteuser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        String userid = req.getParameter("userid");
        //2.调逻辑
        UsersService usersService = new UsersServiceImpl();
        int i = usersService.deleteUser(Integer.parseInt(userid));
        //3.返结果
        resp.setContentType("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        if (i>0){
            //删除成功   注意,不可以用重定向list.jsp
            //deleteservlet->location.href->selectusersservlet->list.jsp
            writer.println("");
        }else {
            //删除失败
            writer.println("");
        }
    }
    //定义处理请求的退出方法
    protected void loginout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //清除session,跳转页面
        HttpSession session = req.getSession();
        session.invalidate();
        //跳转目标页面
        resp.sendRedirect("index.jsp");
    }
    //定义处理请求的登录方法
    protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        //req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");//要和表单的name值相同
        String userpass =req.getParameter("userpass");
        //2.写逻辑(面向接口编程)
        UsersService usersService =new UsersServiceImpl();
        Users u = usersService.login(username, userpass);
        //3.返结果
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (u==null){
            //登录失败(在后端给前端返回一个弹窗-若用js,就不要再用重定向或转发跳页面了否则405错误)
            //location.href是属于重定向跳转页面
            writer.print("");

        }else {
            //登录成功
            HttpSession session = req.getSession();
            session.setAttribute("u1",u);
            writer.print("");
        }
    }
    //定义处理请求的id查询方法
    protected void selectbyid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        String userid = req.getParameter("userid");
        //2.调方法
        UsersService service =new UsersServiceImpl();
        Users users =service.selectbyid(Integer.parseInt(userid));
        //3.返结果
        req.setAttribute("user",users);
        req.getRequestDispatcher("update.jsp").forward(req,resp);
    }
    //定义处理请求的全查方法
    protected void selectusers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        //req.setCharacterEncoding("utf-8");
        String pageIndex = req.getParameter("pageIndex");
        //如果没有接收到pageindex,默认查询第一页
        int index = pageIndex==null?1:Integer.parseInt(pageIndex);//页码值
        //接收模糊查询条件
        String uname = req.getParameter("uname");
        String usex = req.getParameter("usex");
        //2.写逻辑
        UsersService usersService =new UsersServiceImpl();
        List users = usersService.selectALL(index, PageUtil.PAGESIZE,uname,usex);
        //每页展示数据时,不够一页,也会独占一页位置
        //10/5=2页,11/5=2...1  /3页。
        //总页数=总条数%每页显示条数>0?总条数/每页显示条数+1:总条数/每页显示条数
        int total = usersService.totalCount(uname,usex);//总条数
        //int totalPages=total%PageUtil.PAGESIZE>0?total/PageUtil.PAGESIZE+1:total/PageUtil.PAGESIZE;//总页数
        //3.返结果(后端给前端传数据,必然涉及存值问题,4个作用域选择request)
        myPageUtilsPlus usersmyPageUtilsPlus = new myPageUtilsPlus<>();
        usersmyPageUtilsPlus.setPageIndex(index);
        usersmyPageUtilsPlus.setTotalCount(total);
        //usersmyPageUtilsPlus.setTotalPages(totalPages);
        usersmyPageUtilsPlus.setDataList(users);
        //存储分页的条件
        req.setAttribute("pu",usersmyPageUtilsPlus);
        //存储模糊查询条件
        req.setAttribute("username",uname);
        req.setAttribute("usersex",usex);
        req.getRequestDispatcher("/list.jsp").forward(req,resp);
    }
    //定义处理请求的更新方法
    protected void updateuser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数+处理post请求的乱码
        //req.setCharacterEncoding("utf-8");
        String uid = req.getParameter("uid");
        String uname = req.getParameter("uname");
        String usex = req.getParameter("usex");
        String uage = req.getParameter("uage");
        String upass = req.getParameter("upass");
        //2.写逻辑
        UsersService usersService=new UsersServiceImpl();
        Users users = new Users();
        users.setUserid(Integer.parseInt(uid));
        users.setUsername(uname);
        users.setSex(usex);
        users.setAge(Integer.parseInt(uage));
        users.setPassword(upass);
        int i = usersService.UpdateUser(users);
        //3.返结果
        resp.setContentType("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        if (i>0) {
            //更新成功 回到展示用户列表的页面(不能直接跳回到list.jsp,而是需要重新发送新的请求,间接走到list.jsp)
            writer.println("");
        }else {
            //更新失败 回到更新页面update.jsp(不能直接跳回到update.jsp,而是需要重新发送新的请求,间接走到update.jsp)
            writer.println("");
        }
    }
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String key =req.getParameter("key");
        switch(key){
            case "adduser":
                //执行新增方法
                adduser(req,resp);
                break;
            case "deletebyid":
                //执行假删除方法
                deletebyid(req,resp);
                break;
            case "deleteuser":
                //执行真删除方法
                deleteuser(req,resp);
                break;
            case "loginout":
                //执行退出方法
                loginout(req,resp);
                break;
            case "login":
                //执行登录方法
                login(req,resp);
                break;
            case "selectbyid":
                //执行id查询方法
                selectbyid(req,resp);
                break;
            case "selectusers":
                //执行全查方法
                System.out.println("执行全查的方法--servlet");
                selectusers(req,resp);
                break;
            case "updateuser":
                //执行更新方法
                updateuser(req,resp);
                break;
        }
    }
}
修改页面请求名   success.jsp
<%@ page import="com.yhp.bean.Users" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%
    Users u1 =(Users) session.getAttribute("u1");
%>
success.jsp,欢迎您:<%=u1==null?"":u1.getUserName()%>
  退出




list.jsp 
<%@ page import="com.yhp.bean.Users" %>
<%@ page import="java.util.List" %>
<%@ page import="com.yhp.util.PageUtilPlus" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    
        span{ border: 1px solid black}
        a{ text-decoration: none}
    


<%
    Users u1 =(Users) session.getAttribute("u1");
%>
    list.jsp,欢迎您:<%=u1==null?"":u1.getUserName()%>
   <%
     
       PageUtilPlus pu=(PageUtilPlus)request.getAttribute("pu");
       //得到模糊查条件
       String username = (String)request.getAttribute("username");
       username=(username==null?"":username);
       String usersex = (String)request.getAttribute("usersex");
       usersex=(usersex==null?"":usersex);
   %>
    
     
          
姓名:     性别:
<%for(Users u:pu.getDataList()){%> <% } %>
用户编号 用户姓名 用户性别 用户年龄 用户密码 操作
<%=u.getUserId()%> <%=u.getUserName()%> <%=u.getSex()%> <%=u.getAge()%> <%=u.getPassWord()%> ">删除 ">假删除 ">修改
&usex=<%=usersex%>">首页 &uname=<%=username%>&usex=<%=usersex%>">上一页 <%for(int i=1;i<=pu.getTotalPages();i++){%> &uname=<%=username%>&usex=<%=usersex%>"><%=i%>    <%}%> =pu.getTotalPages()?pu.getTotalPages():pu.getPageIndex()+1%>&uname=<%=username%>&usex=<%=usersex%>">下一页 &uname=<%=username%>&usex=<%=usersex%>">尾页
当前页:<%=pu.getPageIndex()%>, 总页数:<%=pu.getTotalPages()%>, 总条数:<%=pu.getTotalCount()%>
 update.jsp


    Title


<%
    Users user = (Users) request.getAttribute("user");
%>
   update.jsp
userid:
username:
sex:>男 >女
age:
password:
 add.jsp


    Title


   add.jsp
   
username:
sex:
age:
password:

三:使用EL表达式JSTL标签库优化页面代码 

 原来jsp的问题

jsp使用小脚本嵌套了java代码,使得jsp既要展示数据,又要编写业务逻辑,嵌套java代码 

优化方式:

使用EL表达式和JSTL标签库替代页面中的java代码 

 EL表达式 语法: ${key/变量名} 

 el表达式展示的数据,一定是来源于PageContext,request,Session,application这四个作用域中的

作用:展示数据 
<%
       pageContext.setAttribute("k1","pageContext的内容");
       // Object obj=pageContext.getAttribute("k1");
       Users users = new Users();
       users.setUserName("赵丽颖");
       users.setPassWord("123abc");
       pageContext.setAttribute("u1",users);
       //list集合
       List list=new ArrayList();
       list.add("abc");
       list.add(123456);
       list.add(users);
       pageContext.setAttribute("datalist",list);
       //map集合
       Map map=new HashMap();
       map.put("my","my_value");
       pageContext.setAttribute("mymap",map);
       // set  -无序,只能使用循环遍历数据,需要结合jstl一起才能展示数据
   %>
  pageContext的内容是: ${k1}
算术运算符:10+20=${10+20}
对象数据:username=${u1.userName},password=${u1.passWord}
支持三目运算符:${u1.userName=="赵丽颖"?"我是赵丽颖":"我不是"}
集合数据:${datalist[0]}--${datalist[1]}--${datalist[2].userName}
map:${mymap.my}

 ps:el如果读取过程中出现空值,则空值是空字符串:“”

作用域问题 
当不同作用域中,存储相同key时,数据如何读取?
<%
    pageContext.setAttribute("k2","pageContext的内容----k2");
    session.setAttribute("k2","session的内容----k2");
    application.setAttribute("k2","application的内容----k2");
    request.setAttribute("k2","request的内容----k2");
    //此时相同的key,el表达式在获取数据时,默认按照:pageContext->request->session->application  的范围顺序取值
    //如果想要获得特定环境下的值,可以加作用域:pageScope,requestScope,sessionScopt,applicationScope
    // ${作用域.key}
%>
k2=${applicationScope.k2}
 支持数据类型的自动转换
原来:String str=(String) request.getAttribute("k1");
      Integer.parseInt(str);

 el表达式:${k1} -取出后,识别为数值

<%
    pageContext.setAttribute("age","23");
%>
age=${age+10}
关于el表达式的范例 
<%@ page import="com.yhp.bean.Users" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    el_text


<%
    pageContext.setAttribute("k1","pageContext内容");
    //   Object obj=pageContext.getAttribute("k1");
    Users users = new Users();
    users.setUsername("龙傲天");
    users.setPassword("1234");
    pageContext.setAttribute("u1",users);
    //集合
    List list=new ArrayList();
    list.add("abc");
    list.add(123456);
    list.add(users);
    pageContext.setAttribute("datalist",list);
    //map集合
    Map map=new HashMap();
    map.put("my","my_value");
    pageContext.setAttribute("mymap",map);
    //set  -无序,只能使用循环遍历数据,徐亚结合jstl一起才能展示数据
%>
pageContext的内容是:${k1}
算数运算符:10+20=${10+20}
对象数据:username=${u1.username},password=${u1.password}
支持三目运算符:${u1.username=="龙傲天"?"我是龙傲天":"我不是龙傲天"}
集合数据 : ${datalist[0]}--${datalist[1]}--${datalist[2].username}
map : ${mymap.my} 当不同作用域中,存储相同key时,数据如何读取? <% pageContext.setAttribute("k2","pageContext的内容-----k2");//1优先级 session.setAttribute("k2","session的内容-----k2");//3 application.setAttribute("k2","application的内容------k2");//4 request.setAttribute("k2","request的内容------k2");//2 //此时相同的key,el表达式在获取数据时,默认按照:pageContext->request->session->application 的范围顺序取值 //如果想要获得特定环境下的值,可以加作用域:pageScope,requestScope,sessionScopt,applicationScope // ${作用域.key} %> k2=${applicationScope.k2}
<% pageContext.setAttribute("age","23"); %> age=${age+10}
 测试结果

  JSTL标签库优化页面代码

该标签库主要的作用在于对页面中循环,判断结构的支持

使用步骤

1.添加依赖包 2.在页面中引入标签库 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3. 标签库内容:判断
  <%
           pageContext.setAttribute("age",26);
       %>
   
       未成年
   
   
        青年
   
    
           壮年
    
判断-if-else结构: 
  
          
              when-未成年
          
        
             when-青年
        
        
            when-壮年
        
    
循环 
    <%
           Set set=new HashSet();
           set.add("zhangsan");
           set.add(123.78);
           set.add(123);
           pageContext.setAttribute("myset",set);
       %>

    ${sta.index}==${sta.count}==>s=${s}

varStatus 用来配置行号或下标

${sta.count}

${sta.index}

循环输出数值


    ${num},
JSTL案例
<%@ page import="java.util.Set" %>
<%@ page import="java.util.HashSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    jstl_text


    判断
    <%
        pageContext.setAttribute("age",29);
    %>
    
        未成年
    
    
        青年
    
    
        壮年
    

when-未成年 when-青年 when-壮年 循环 <% Set set=new HashSet(); set.add("张三"); set.add(123.54); set.add(123); pageContext.setAttribute("myset",set); %> ${sta.index}下标下的第${sta.count}个值==>s=${s}
输出1-100的值 ${num},

 四:优化项目代码(优化小脚本)

  success.jsp 
<%@ page import="com.yhp.bean.Users" %>
<%@ page import="com.yhp.util.PeopleUtil" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--<%--%>
<%--    Users u1=(Users) session.getAttribute("u1");--%>
<%--%>--%>
<%--   登录成功,欢迎您:<%=u1==null?"":u1.getUsername()%>--%>
     登录成功,欢迎您:${sessionScope.u1.username},当前在线人数:<%=PeopleUtil.PEOPLE_ON_LINE%>
       退出
   
<%--第一个参数用?拼接后面用&--%>


 list.jsp 


<%--<%--%>
<%--    Users u1=(Users) session.getAttribute("u1");--%>
<%--%>--%>
<%--列表页面,欢迎您:<%=u1==null?"":u1.getUsername()%>--%>
        列表页面,欢迎您:${sessionScope.u1.username}
            退出
    <%
//      //得到模糊查条件  key=username,usersex
        //分页数据: key=pu
    %>
    
        
    
    
        
姓名:   性别:
用户编号 用户姓名 用户性别 用户年龄 用户密码 操作
${u.userid} ${u.username} ${u.sex} ${u.age} ${u.password} 删除 假删除 修改
首页 上一页 ${i}   =pu.totalPages?pu.totalPages:pu.pageIndex+1}&uname=${username}&usex=${usersex}">下一页 尾页
当前页:${pu.pageIndex}, 总页数:${pu.totalPages}, 总条数:${pu.totalCount}>
  update.jsp
<%@ page import="com.yhp.bean.Users"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--<%--%>
<%--   Users user= (Users) request.getAttribute("user");--%>
<%--%>--%>
update.jsp登录成功,欢迎您:${sessionScope.u1.username}
    退出
   
userid:
username:
sex:
age:
password:

五:过滤器与监听器

 

过滤器一:统一编码方式 
package com.yhp.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter--1初始化方法");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter--1执行的方法--开始");
        //设置编码类型
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        request.setCharacterEncoding("utf-8");
        //调取下一个filter或者servlet
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("filter--1执行的方法--结束");
    }

    @Override
    public void destroy() {
        System.out.println("filter--1销毁的方法");
    }
}
过滤器二:提示用户登录 
package com.yhp.filter;

import com.yhp.bean.Users;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyFilter02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter--2初始化方法");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter--2执行的方法--开始");
        //验证用户是否登录
        //防止用户在未登录的情况下访问限定页面
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String uri = request.getRequestURI();//请求地址
        System.out.println("uri=" + uri);

        //活的session中的用户信息
        Users users = (Users) request.getSession().getAttribute("u1");
        if (users == null) {
            //未登录,提示用户登录
            //对一些资源放行
            String key = request.getParameter("key");
            if("index.jsp".endsWith(uri)||"login".equals(key)||"/favicin.ico".endsWith(uri)){
                filterChain.doFilter(servletRequest, servletResponse);
            } else {
                //response.sendRedirect("index.jsp");死循环,重定向会修改页面地址
                request.getRequestDispatcher("index.jsp").forward(request, response);
            }

         }else {
                    filterChain.doFilter(servletRequest, servletResponse);//调取下一个filter或目标servlet
                }
               System.out.println("filter--2执行的方法--结束");
    }

        @Override
        public void destroy () {
            System.out.println("filter--2销毁的方法");
        }
    }
 监听器:监听在线人数
package com.yhp.bean;
import com.yhp.util.PeopleUtil;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

//类名=表名,列名=属性名
public class Users implements HttpSessionBindingListener {
    private Integer userid;
    private String username;
    private Integer age;
    private String sex;
    private String password;
    private Integer status;

    public Users() {
    }

    public Users(Integer userid, String username, Integer age, String sex, String password, Integer status) {
        this.userid = userid;
        this.username = username;
        this.age = age;
        this.sex = sex;
        this.password = password;
        this.status = status;
    }

    @Override
    public String toString() {
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                ", password='" + password + ''' +
                ", status=" + status +
                '}';
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override//当session和当前类对象绑定时,自动调取(session.setAttribute())
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("当session和当前类对象绑定");
        PeopleUtil.PEOPLE_ON_LINE++;
    }

    @Override//当session和当前类对象解绑时,自动调取(session.setRemoveAttribute()或session.invalide())
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("当session和当前类对象解绑");
        PeopleUtil.PEOPLE_ON_LINE--;

    }
}
过滤器栈 

允许多个过滤器同时存在,各自配置各自的作用代码

web.xml文件中filter和filter-mapping标签的顺序,决定了filter执行的顺序 

xml配置文件 


    
        f1
        
            com.yhp.filter.MyFilter01
        
    
    
        f1
        /*
    

    
        f2
        
            com.yhp.filter.MyFilter02
        
    
    
        f2
        /*
    

    
        com.yhp.bean.Users
    

 

过滤器执行顺序与在xml文件的顺序有关

 六json+ajax

 后续内容持续更新中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号