天天看点

JavaWeb核心|Cookie&Session&Jsp一、Cookie二、Session三、Jsp四、学生管理系统

文章目录

  • 一、Cookie
    • 1.1 会话介绍
    • 1.2 Cookie介绍
    • 1.3 Cookie属性
    • 1.4 Cookie的方法
    • 1.5 Cookie的添加和获取
    • 1.6 Cookie的使用
    • 1.7 Cookie的细节
  • 二、Session
    • 2.1 HttpSession介绍
    • 2.2 HttpSession常用方法
    • 2.3 HttpSession获取
    • 2.4 HttpSession的使用
    • 2.5 HttpSession的细节
  • 三、Jsp
    • 3.1 JSP介绍
    • 3.2 JSP快速入门
    • 3.3 JSP执行过程
    • 3.4 JSP文件内容介绍
    • 3.5 Jsp语法
    • 3.6 JSP指令
    • 3.7 JSP细节
    • 3.8 MVC模型
  • 四、学生管理系统
    • 4.1 案例效果
    • 4.2 登录功能实现
    • 4.3 添加功能实现
    • 4.4 查看学生功能

一、Cookie

1.1 会话介绍

  • 会话: 浏览器和服务器之间的多次请求和响应。
  • 为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束(关闭浏览器、到了过期时间)。这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话。
  • 会话过程中所产性的一些数据,可以通过会话技术( Cookie和Session )保存。

1.2 Cookie介绍

  • Cookie :客户端会话管理技术

    把要共享的数据保存到客户端。

    每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享!

  • 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率!

1.3 Cookie属性

JavaWeb核心|Cookie&Session&Jsp一、Cookie二、Session三、Jsp四、学生管理系统

1.4 Cookie的方法

JavaWeb核心|Cookie&Session&Jsp一、Cookie二、Session三、Jsp四、学生管理系统

1.5 Cookie的添加和获取

JavaWeb核心|Cookie&Session&Jsp一、Cookie二、Session三、Jsp四、学生管理系统

1.6 Cookie的使用

  • 需求说明

    通过Cookie记录最后访问时间,并在浏览器上显示出来。

  • 最终目的.

    掌握Cookie的基本使用,从创建到添加客户端,再到从服务器端获取。

  • 实现步骤

    1.通过响应对象写出一一个提示信息。

    2.创建Cookie对象,指定name和value。

    3.设置Cookie最大存活时间。

    4.通过响应对象将Cookie对象添加到客户端。

    5.通过请求对象获取Cookie对象。

    6.将Cookie对象中的访问时间写出。

package com.itjc.servlet;

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;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

    /*
        Cookie的使用
     */

@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.通过响应对象写出提示信息
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter pw = resp.getWriter();
        pw.write("欢迎访问本网站,您的最后访问时间为: <br>");
        //2.创建Cookie对象,用于记录最后访问时间
        Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");
        //3.设置最大存活时间
        cookie.setMaxAge(3600);
        //4.将cookie对象添加到客户端
        resp.addCookie(cookie);
        //5.获取ookie
        Cookie[] cookies = req.getCookies();
        for (Cookie c : cookies) {
            System.out.println(c);
            if ("time".equals(c.getName())) {
                // 6、获取cookie中的value
                String value = c.getValue();
//                System.out.println(value);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                pw.write(sdf.format(new Date(Long.parseLong(value))));
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
           

1.7 Cookie的细节

  • 数量限制

    每个网站最多只能有20个

    Cookie

    ,且大小不能超过4KB。所有网站的

    Cookie

    总数不能超过300个。
  • 名称限制

    Cookie

    的名称只能包含

    ASCII

    码表中的字母、数字字符。不能包含逗号、分号、空格,不能以$开头。

    Cookie

    的值不支持中文。
  • 存活时间限制

    setMaxAge()

    方法接收数字

    负整数:当前会话有效,浏览器关闭则清除。

    0 :立即清除。

    正整数:以秒为单位设置存活时间。

  • 访问路径限制

    默认路径:取自第一次访问的资源路径前缀。 只要以这个路径开头就能访问到。

    设置路径:

    setPath()

    方法设置指定路径。

二、Session

2.1 HttpSession介绍

  • HttpSession :服务器端会话管理技术

    本质也是采用客户端会话管理技术。

    只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。

    每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!

    是Servlet规范中四大域对象之一-的会话域对象。

  • 作用:可以实现数据共享
    JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

2.2 HttpSession常用方法

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

2.3 HttpSession获取

  • HttpSession实现类对象是通过

    HttpServletRequest

    对象来获取。
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

2.4 HttpSession的使用

  • 需求说明

    通过第一个Servlet设置共享数据用户名,并在第=个Servlet获取到。

  • 最终目的

    掌握HttpSession的基本使用,如何获取和使用。

  • 实现步骤

    1.在第一个

    Servlet

    中获取请求的用户名。

    2.获取

    HttpSession

    对象。

    3.将用户名设置到共享数据中。

    4.在第1个

    Servlet

    中获取

    HttpSession

    对象。

    5.获取共享数据用户名。

    6.将获取到用户名响应给客户端浏览器。

package com.itjc.servlet;


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("/servletDemo01")
public class ServletDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的用户名
        String username = req.getParameter("username");
        //2.获取Ht tpSession的对象
        HttpSession session = req.getSession();
        System.out.println(session);
        System.out.println(session.getId());
        session.setAttribute("username", username);
        //3.将用户名信息添加到共享数据中

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
           
package com.itjc.servlet;


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.text.SimpleDateFormat;

@WebServlet("/servletDemo02")
public class ServletDemo02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取Ht tpSession的对象
        HttpSession session = req.getSession();
        System.out.println(session);
        System.out.println(session.getId());
        //2. 获取共享数据
        Object username = session.getAttribute("username");


        // 3、响应给浏览器
        resp.getWriter().write(username + "");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
           

2.5 HttpSession的细节

  • 唯一标识的查看
    JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
  • 浏览器禁用Cookie

    方式一:通过提示信息告知用户,大部分网站采用的解决方式。(推荐)

    方式二:访问时拼接

    jsessionid

    标识,通过

    encodeURL()

    方法重写地址。(了解)
  • 钝化和活化
  • 什么是钝化和活化

    钝化:序列化。把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。

    活化:相反的状态。

  • 何时钝化

    第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,

    对长时间不用,但是还没到过期时间的HttpSession进行序列化。

    第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对其进行序列化。

  • 注意

    HttpSession的序列化由服务器自动完成,我们无需关心。

访问

servletDemo01

servletDemo02

输出的结果

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
package com.itjc.servlet;


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("/servletDemo03")
public class ServletDemo03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //1.获取Ht tpSession的对象
        HttpSession session = req.getSession(false);
        if (session == null) {
            resp.getWriter().write("对不起,请解除对cookie的禁用再次尝试!");
        } else {
            System.out.println(session);
            System.out.println(session.getId());
            //2. 获取共享数据
            Object username = session.getAttribute("username");

            // 3、响应给浏览器
            resp.getWriter().write(username + "");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
           
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

方式二:访问时拼接

jsessionid

标识,通过

encodeURL()

方法重写地址。(了解)

package com.itjc.servlet;


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("/servletDemo01")
public class ServletDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的用户名
        String username = req.getParameter("username");
        //2.获取Ht tpSession的对象
        HttpSession session = req.getSession();
        System.out.println(session);
        System.out.println(session.getId());
        //3.将用户名信息添加到共享数据中
        session.setAttribute("username", username);

        //实现url重写 相当于在地址栏中拼接了一个jessionid
        resp.getWriter().write("<a href='" + resp.encodeURL("http://localhost:8989/session/servletDemo03") + "'>go ServletDemo03</a>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
           
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

1、request.setAttribute 作用域是请求和被请求页面之间。

request.setAttribute()是只在此action的下一个forward需要使用的时候使用 ;

request.setAttribute()可存放的参数是String和Object。

2、session.setAttribute 作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。会话期间指的是浏览器打开该页面,到关闭。 一般用于存放用户信息。

request.setAttribute()可存放的参数是String和Object。

三、Jsp

3.1 JSP介绍

  • JSP(Java Server Pages) :是- -种动态网页技术标准。
  • JSP 部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态的生成HTML、XML 或其他格式文档的Web网页,然后再响应给客户端。
  • JSP 是基于Java语言的,它的本质就是Servlet。
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

3.2 JSP快速入门

1.创建 一个

web

项目。

2.在web目录下创建一个

index.jsp

文件。

3.在文件中写一句内容为:这是我的第一个

jsp

4.部署并启动项目。

5.通过浏览器测试。

3.3 JSP执行过程

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

3.4 JSP文件内容介绍

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

index_jsp

/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/8.5.31
 * Generated at: 2021-09-18 03:51:35 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\n");
      out.write("\n");
      out.write("<html>\n");
      out.write("<head>\n");
      out.write("    <title>$Title$</title>\n");
      out.write("</head>\n");
      out.write("<body>\n");
      out.write("<h1>第一个jsp页面</h1>\n");
      out.write("</body>\n");
      out.write("</html>\n");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
           

HttpJspBase

package org.apache.jasper.runtime;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.HttpJspPage;
import org.apache.jasper.compiler.Localizer;

public abstract class HttpJspBase extends HttpServlet
  implements HttpJspPage
{
  private static final long serialVersionUID = 1L;

  public final void init(ServletConfig config)
    throws ServletException
  {
    super.init(config);
    jspInit();
    _jspInit();
  }

  public String getServletInfo()
  {
    return Localizer.getMessage("jsp.engine.info");
  }

  public final void destroy()
  {
    jspDestroy();
    _jspDestroy();
  }

  public final void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    _jspService(request, response);
  }

  public void jspInit()
  {
  }

  public void _jspInit()
  {
  }

  public void jspDestroy()
  {
  }

  protected void _jspDestroy()
  {
  }

  public abstract void _jspService(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse)
    throws ServletException, IOException;
}
           

3.5 Jsp语法

  • JSP注释
  • Java 代码块
<%
	System. out. printIn( "He11o JSP");//普通输出语句,输出在控制台
	out. printIn("He11o JSP");
	//out是JspWriter对象,输出在页面上
%>
           
  • JSP 表达式
  • JSP声明
< %!声明变量或方法%>
//如果加!代表的是声明的是成员变量 方法一定要加!
//如果不加!代表的是声明的是局部变量
           

3.6 JSP指令

  • page 指令
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="/error.jsp" %>
           
  • include 指令:可以包含其他页面
<%@ include file=包含的页面%>
<%@include file="include.jsp" %> //使用其他页面的变量
           
  • taglib 指令:可以引入外部标签库

3.7 JSP细节

  • 九大隐式对象
    JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
  • PageContext 对象

    是JSP独有的, Servlet中没有。

    是四大域对象之一的页面域对象,还可以操作其他3三个域对象中的属性。

    还可以获取其他八个隐式对象。

    生命周期是随着JSP的创建而存在,随着JSP的结束而消失。每个JSP页面都有一个PageContext对象。

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
  • 四大域对象
    JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

3.8 MVC模型

  • M(Model) :模型。用于封装数据,封装的是数据模型!
  • V(View) :视图。用于显示数据,动态资源用JSP页面,静态资源用HTML页面!
  • C(Controller) :控制器。用于处理请求和响应,例如Servlet !
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

四、学生管理系统

4.1 案例效果

JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统
JavaWeb核心|Cookie&amp;Session&amp;Jsp一、Cookie二、Session三、Jsp四、学生管理系统

4.2 登录功能实现

1.创建一个web项目。

2.在web目录下创建一个index:jsp.

3.在页面中获取会话域中的用户名,获取到了就显示添加和查看功能的超链接,没获取到就显示登录功能的超链接。

4.在web目录下创建一个loginjsp.实现登录页面。

5.创建LoginServlet ,获取用户名和密码。

6.如果用户名为空,则重定向到登录页面。

7.如果不为空,将用户名添加到会话域中,再重定向到首页。

创建一个web项目,在 web 目录下创建一个 index.jsp。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学生管理系统首页</title>
</head>
<body>
    <%--
        获取会话域中的数据
        如果获取到了则显示添加和查看功能的超链接
        如果没获取到则显示登录功能的超链接
    --%>
    <% Object username = session.getAttribute("username");
        if(username == null) {
    %>
        <a href="/stu/login.jsp" target="_blank" rel="external nofollow" >请登录</a>
    <%} else {%>
        <a href="/stu/addStudent.jsp" target="_blank" rel="external nofollow" >添加学生</a>
        <a href="/stu/listStudentServlet" target="_blank" rel="external nofollow" >查看学生</a>
    <%}%>
</body>
</html>
           

在 web 目录下创建一个 login.jsp。实现登录页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学生登录</title>
</head>
<body>
    <form action="/stu/loginStudentServlet" method="get" autocomplete="off">
        姓名:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"> <br>
        <button type="submit">登录</button>
    </form>
</body>
</html>

           

3.1.3 创建 LoginStudentServlet,获取用户名和密码

package com.itheima.servlet;

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 java.io.IOException;

/*
    学生登录
 */
@WebServlet("/loginStudentServlet")
public class LoginStudentServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取用户名和密码
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //2.判断用户名
        if(username == null || "".equals(username)) {
            //2.1用户名为空 重定向到登录页面
            resp.sendRedirect("/stu/login.jsp");
            return;
        }

        //2.2用户名不为空 将用户名存入会话域中
        req.getSession().setAttribute("username",username);

        //3.重定向到首页index.jsp
        resp.sendRedirect("/stu/index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

           

4.3 添加功能实现

在 web 目录下创建一个 addStudent.jsp,实现添加学生的表单项

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加学生</title>
</head>
<body>
<form action="/stu/addStudentServlet" method="get" autocomplete="off">
    学生姓名:<input type="text" name="username"> <br>
    学生年龄:<input type="number" name="age"> <br>
    学生成绩:<input type="number" name="score"> <br>
    <button type="submit">保存</button>
</form>
</body>
</html>

           

创建 AddStudentServlet,获取学生信息并保存到文件中

package com.itheima.servlet;

import com.itheima.bean.Student;

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 java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/*
    实现添加功能
 */
@WebServlet("/addStudentServlet")
public class AddStudentServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取表单中的数据
        String username = req.getParameter("username");
        String age = req.getParameter("age");
        String score = req.getParameter("score");

        //2.创建学生对象并赋值
        Student stu = new Student();
        stu.setUsername(username);
        stu.setAge(Integer.parseInt(age));
        stu.setScore(Integer.parseInt(score));

        //3.将学生对象的数据保存到d:\\stu.txt文件中
        BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\stu.txt",true));
        bw.write(stu.getUsername() + "," + stu.getAge() + "," + stu.getScore());
        bw.newLine();
        bw.close();

        //4.通过定时刷新功能响应给浏览器
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("添加成功。2秒后自动跳转到首页...");
        resp.setHeader("Refresh","2;URL=/stu/index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

           

4.4 查看学生功能

创建 ListStudentServlet,读取文件中的学生信息到集合中

1、将集合添加到会话域中

2、重定向到 listStudent.jsp 页面上
           
package com.itheima.servlet;

import com.itheima.bean.Student;

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 java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/*
    实现查看功能
 */
@WebServlet("/listStudentServlet")
public class ListStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建字符输入流对象,关联读取的文件
        BufferedReader br = new BufferedReader(new FileReader("d:\\stu.txt"));

        //2.创建集合对象,用于保存Student对象
        ArrayList<Student> list = new ArrayList<>();

        //3.循环读取文件中的数据,将数据封装到Student对象中。再把多个学生对象添加到集合中
        String line;
        while((line = br.readLine()) != null) {
            //张三,23,95
            Student stu = new Student();
            String[] arr = line.split(",");
            stu.setUsername(arr[0]);
            stu.setAge(Integer.parseInt(arr[1]));
            stu.setScore(Integer.parseInt(arr[2]));
            list.add(stu);
        }

        //4.将集合对象存入会话域中
        req.getSession().setAttribute("students",list);

        //5.重定向到学生列表页面
        resp.sendRedirect("/stu/listStudent.jsp");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

           

在 web 目录下创建一个 listStudent.jsp

<%@ page import="com.itheima.bean.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查看学生</title>
</head>
<body>
    <table width="600px" >
        <tr>
            <th>学生姓名</th>
            <th>学生年龄</th>
            <th>学生成绩</th>
        </tr>
        <% ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
            for(Student stu : students) {
        %>
            <tr align="center">
                <td><%=stu.getUsername()%></td>
                <td><%=stu.getAge()%></td>
                <td><%=stu.getScore()%></td>
            </tr>
        <%}%>
    </table>
</body>
</html>