测试开发系列之——mvc、jsp、jstl、el和会话跟踪技术

学习目标

  1. MVC模式
  2. jsp
  3. jstl和el表达式
  4. 会话跟踪技术

mvc模式

这种模式用于应用程序的解耦、分层开发

  • Model:一般用来处理数据,包括读取和设置数据,一般指的是操作数据库。
  • View:一般用来展示数据,也就是放数据,比如通过HTML来展示。
  • Controller:因为一个模块里面可能由多个视图——模型,控制器就起到了连接模型和视图的功能。

软件开发3层架构

什么是jsp

  • 全称java server page,主要为了弥补servlet输出页面太过麻烦的缺点。
    servlet注重的是流程控制和事务处理
    jsp注重的是页面展示
  • JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容

JSP运行基本过程

同步请求动态资源过程

JSP标准标签库(JSTL)

  • 需要standard.jar和jstl.jar(菜鸟)
  • 核心标签库是最常用的JSTL标签。
  • 引用<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
  • <c:forEach> 基础迭代标签,接受多种集合类型
  • <c:if> 与我们在一般程序中用的if一样

JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

隐含对象 描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域

会话跟踪技术session

  1. session是一门服务端会话缓存技术。
  2. session由服务端的web容器创建,保存在服务器端。
  3. session保存数据:键值对形式。
  4. session过期:默认30分钟。

什么是cookie

不超过4KB的小型文本文件,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)。

  1. cookie是一门客户端缓存技术
  2. cookie数据由服务器生成,发送给浏览器保存
  3. cookie数据的格式:键值对
  4. cookie数据过期机制:内存Cookie浏览器关闭后就消失。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除

练习:登录+js操作cookie

运行结果截图

初始界面:
初始界面
输入错误的用户名和密码:
输入错误的用户名和密码
返回错误:
返回错误
输入正确的用户名和密码:
输入正确的用户名和密码
返回ok:
返回ok
Cookie已保存:
Cookie已保存
返回后用户名仍缓存:
返回后用户名仍缓存

工程截图

工程截图

User.java

package com.one.pojo;

import lombok.Data;

@Data
public class User {
  private int userId;
  private String userName;
  private String userPwd;
  public User(int userId, String userName, String userPwd){
    super();
    this.userId = userId;
    this.setUserName(userName);
    this.setUserPwd(userPwd);
  }
  public User(String userName, String userPwd){
    super();
    this.setUserName(userName);
    this.setUserPwd(userPwd);
  }
  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  public String getUserPwd() {
    return userPwd;
  }
  public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
  }
}

UserServlet.java代码

package com.one.servlet;

import com.one.pojo.User;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class UserServlet
 */
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  List<User> list=null;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UserServlet() {
      list = new ArrayList<>();
    list.add(new User(1,"zs","666"));
    list.add(new User(2,"lisi","888"));
    }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = request.getParameter("action");
    if("login".equals(action)){
      login(request, response);
    }else if("findAll".equals(action)){
      findAll(request, response);
    }
  }

  private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //将list放入request值域中
    request.setAttribute("list", list);
    request.getRequestDispatcher("index.jsp").forward(request, response);
  }
  
  private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 接受请求并响应
    // 1.获取请求参数并封装为对象
    String username = request.getParameter("username");
    String userpwd = request.getParameter("userpwd");
    // 2.数据验证 非空 正则表达式
    // 3.登录业务处理,得到登陆业务结果
    boolean b = false;
    for(User user : list){
      if(user.getUserName().equals(username)&&user.getUserPwd().equals(userpwd)){
        b = true;     
      }
    }
    // 4.根据结果进行跳转
    if(b){
      //服务器内部转发,同一请求,地址栏不会变化,登陆成功后,将用户信息放入session值域
      request.getSession().setAttribute("user", new User(username, userpwd));
      //登录成功,记住密码,存放到cookie
      Cookie c = new Cookie("username",username);
      c.setMaxAge(1*24*60*60);//存放1天,以秒为单位
      response.addCookie(c);
      //response.getWriter().append("{data:'ok',status:1}");
      /**
      PrintWriter out = response.getWriter();
      String str = "{\"data\":\"ok\",\"status\":\"1\"}";
      out.println(str);
      out.flush();
      **/
      PrintWriter pw = response.getWriter();
      String jsonStr = "{status:1, message:\"ok\"}";
      pw.print(jsonStr);
      
      //从一个控制成跳到另一个控制层方法
      //服务器内部转发,同一请求,地址栏不会变化
      //request.getRequestDispatcher("userServlet?action=findAll").forward(request, response);
    }else{
      //重定向,二次请求,地址栏发生变化
      //response.getWriter().append("{data:'error',status:0}");
      PrintWriter out = response.getWriter();
      String str = "{\"data\":\"error\",\"status\":\"0\"}";
      out.println(str);
      out.flush();      
      //response.sendRedirect("login.jsp?msg=error");
    }
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
  }
}

index.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <!-- 欢迎你,<%=request.getParameter("username") %> -->
  欢迎你,${sessionScope.user.userName}----${param.username}
  循环${requestScope.list}集合,取出每一个user 作业jsp ---jstl+el
  <c:forEach items="${requestScope.list}" var="user">
    ${user.userName}---${user.userPwd}
  </c:forEach>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  ${param.msg}
  <form action="userServlet" method="get">
    <input name="username" value = "${cookie.username.value}"/><br/>
    <input name="action" value="login" type="hidden"/><br/>
    <input name="userpwd" type="password" value = "${cookie.userpwd.value}"/><br/>
    <input type="submit" value="登陆"/>
  </form>
</body>
</html>
发布了14 篇原创文章 · 获赞 1 · 访问量 854

猜你喜欢

转载自blog.csdn.net/anniewhite/article/details/104078225