【JAVADAY34】JSTL标签加EL表达式更改项目

项目完善

      • 使用EL和JSTL标签库来改原来的项目
          • 手动退出登录,销毁session和cookie
          • 多IF重定向问题(提交响应后无法调用sendRedirect)
          • 其余几个JSP文件的改造
          • 使用base标签,来简化html中href多次重复写contextpath

使用EL和JSTL标签库来改原来的项目

  • 前置工作,添加框架支持,导入3个jar包,一个数据库的,2个和标签库有关系的

  • src下创建目录,管理配置文件

  • 点击文件,项目结构,模块,导入tomcat相关的2个包

  • 将lib下的包,全部添加为库,这样你写代码的时候,就不会有些没提示了,甚至给你报错

  • 增加的功能

    • 手动退出登录,销毁session和cookie
private void doexitLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    HttpSession session = request.getSession();
    if(session!=null){
        /*手动退出,销毁session和cookie*/
        session.invalidate();
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("loginuser".equals(cookie.getName())) {
                    /*
                    以下三步,一步也不能少
                    消除cookie的时候有个路径问题要注意
                    我在建建的时候这个cookie关联的是request.getContextPath()下所有的路径
                    因此在销毁的时候,应该把它关联到request.getContextPath()下所有路径的
                    cookiemaxage设置为0才行,因为
                    /oa和/oa/user,即使你名字一样,但是路径不同,浏览器就会认为你这是2个cookie
                    如果你这里不设置路径,它就默认是当前路径的上一路径的cookie的maxage设置为0
                    其他的仍然是10天。
                    所以在销毁cookie的时候,最好就是原来关联的是哪个路径,我们销毁的时候也关联哪个路径
                    或者就是设置路径为本项目,反正我们有if语句,不怕删成别的cookie
                    * */
                    cookie.setMaxAge(0);
                    cookie.setPath(request.getContextPath());
                    response.addCookie(cookie);
                }else if ("loginpassword".equals(cookie.getName())){
                    cookie.setMaxAge(0);
                    cookie.setPath(request.getContextPath());
                    response.addCookie(cookie);
                }
            }
        }
        response.sendRedirect(request.getContextPath());
    }
}
  • 多IF重定向问题(提交响应后无法调用sendRedirect)
    • 如果是多个if嵌套,那么当我们使用response.sendRedirect就要注意了,Java在执行完这条语句后,并不会停下执行,而是将response.sendRedirect后面能执行的Java语句全部执行,如果你response.sendRedirect的后面还有response.sendRedirect,那么就会出现“提交响应后无法调用sendRedirect“这种错误
  • private void doValidation(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*用于验证cookie是否还和数据库信息一致,不一致则让cookie丧失直接进入的能力*/
        Cookie[] cookies = request.getCookies();
        String user = "";
        String password = "";
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("loginuser".equals(cookie.getName())) {
                    user = cookie.getValue();
                }
                if ("loginpassword".equals(cookie.getName())) {
                    password = cookie.getValue();
                }
            }
    
            if (user != null && password != null) {
                Connection connection = null;
                PreparedStatement preparedStatement = null;
                ResultSet resultSet = null;
                connection = DBUtil.getconnection();
                String sql = "select username,password from table_user where username=? and password=?";
                try {
                    preparedStatement = connection.prepareStatement(sql);
                    preparedStatement.setString(1, user);
                    preparedStatement.setString(2, password);
                    resultSet = preparedStatement.executeQuery();
                    if (resultSet.next()) {
                        /*走到这一步说明数据库的信息没有变化,cookie存的仍然有效*/
                        response.sendRedirect(request.getContextPath() + "/oa/list");
                    } else {
                        response.sendRedirect(request.getContextPath() + "/login.jsp");
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    DBUtil.close(connection, preparedStatement, resultSet);
                }
            }
        } else {
            response.sendRedirect(request.getContextPath() + "/login.jsp");
        }
    }
    
  • 其余几个JSP文件的改造
    • <%--
        Created by IntelliJ IDEA.
        User: TMJIE5200
        Date: 2022/3/24
        Time: 9:16
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      
          学生信息管理JSP改造
      
      
      

      欢迎光临 <%--从管理页面 改为管理页面 --%> 点击登录

      <%--
        Created by IntelliJ IDEA.
        User: TMJIE5200
        Date: 2022/3/24
        Time: 17:31
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      
          用户登录
      
      
          
      用户名称:
      用户密码:
      十天内免登录
      <%@ page import="com.sj.www.Bean" %>
      <%@ page import="java.util.ArrayList" %>
      <%@ page import="java.util.List" %>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
      
      
          
          Title
          
      
      
      <%
          String username="";
          Cookie[] cookies = request.getCookies();
          if(session.getAttribute("username")!=null){
              username= (String) session.getAttribute("username");
          }else if (cookies !=null){
              for (Cookie cookie : cookies) {
                  if (cookie.getName().equals("loginuser")){
                      username=cookie.getValue();
                  }
              }
          }
      %>
      

      学生信息列表,欢迎光临${username} 退出登录


      <%--这里显示动态的html页面--%>
      序号 学生学号 学生姓名 学生性别 学生班级 操作
      ${stuStatus.count} ${student.id} ${student.name} ${student.sex} ${student.classno} 修改 删除 详情
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      
      
      
          
          update
      
      
      

      修改学生信息


      学生学号:
      学生姓名:
      学生性别:
      学生班级:

      <%--
        Created by IntelliJ IDEA.
        User: TMJIE5200
        Date: 2022/3/24
        Time: 16:20
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      
      
          error
      
      

      ERROR!
      重新登陆

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

      学生信息详情


      学生学号: ${param.studentid}
      学生姓名: ${param.studentname}
      学生性别: ${param.studentsex}
      学生班级: ${param.studentclassno}
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>	
      
      
      
          
          add
      
      
      

      新增学生信息


      学生姓名:
      学生性别:
      学生班级:

      • XML文件
      
      <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
               version="5.0">
          
          <session-config>
              <session-timeout>20session-timeout>
          session-config>
          <welcome-file-list>
              <welcome-file>Welcomewelcome-file>
          welcome-file-list>
      web-app>
      
  • 使用base标签,来简化html中href多次重复写contextpath
    • 多用于href跳转
<%--动态获取,默认地址
只要下面代码中href的路径不以/开头,那么就会默认以下面这个href开头
--%>
    http://localhost:8080/JavaWeb0326/oa
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
    
    ....
    
<td>
                <a href="update.jsp?studentid=${student.id}&studentname=${student.name}&studentsex=${student.sex}&studentclassno=${student.classno}">修改a>
                <a href="oa/delete?studentid=${student.id}">删除a>
                <a href="detail.jsp?studentid=${student.id}&studentname=${student.name}&studentsex=${student.sex}&studentclassno=${student.classno}">详情a>
td>    

你可能感兴趣的:(JAVA学习,java,java-ee,web)