文章目錄
- 一、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屬性
1.4 Cookie的方法
1.5 Cookie的添加和擷取
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個
,且大小不能超過4KB。所有網站的Cookie
總數不能超過300個。Cookie
- 名稱限制
的名稱隻能包含Cookie
碼表中的字母、數字字元。不能包含逗号、分号、空格,不能以$開頭。ASCII
的值不支援中文。Cookie
- 存活時間限制
setMaxAge()
方法接收數字
負整數:目前會話有效,浏覽器關閉則清除。
0 :立即清除。
正整數:以秒為機關設定存活時間。
-
通路路徑限制
預設路徑:取自第一次通路的資源路徑字首。 隻要以這個路徑開頭就能通路到。
設定路徑:
方法設定指定路徑。setPath()
二、Session
2.1 HttpSession介紹
-
HttpSession :伺服器端會話管理技術
本質也是采用用戶端會話管理技術。
隻不過在用戶端儲存的是一個特殊辨別,而共享的資料儲存到了伺服器端的記憶體對象中。
每次請求時,會将特殊辨別帶到伺服器端,根據這個辨別來找到對應的記憶體空間,進而實作資料共享!
是Servlet規範中四大域對象之一-的會話域對象。
- 作用:可以實作資料共享
2.2 HttpSession常用方法
2.3 HttpSession擷取
- HttpSession實作類對象是通過
對象來擷取。HttpServletRequest
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的細節
- 唯一辨別的檢視
-
浏覽器禁用Cookie
方式一:通過提示資訊告知使用者,大部分網站采用的解決方式。(推薦)
方式二:通路時拼接
辨別,通過jsessionid
方法重寫位址。(了解)encodeURL()
- 鈍化和活化
-
什麼是鈍化和活化
鈍化:序列化。把長時間不用,但還不到過期時間的HttpSession進行序列化,寫到磁盤上。
活化:相反的狀态。
-
何時鈍化
第一種情況:當通路量很大時,伺服器會根據getLastAccessTime來進行排序,
對長時間不用,但是還沒到過期時間的HttpSession進行序列化。
第二種情況:當伺服器進行重新開機的時候,為了保持客戶HttpSession中的資料,也要對其進行序列化。
-
注意
HttpSession的序列化由伺服器自動完成,我們無需關心。
通路
servletDemo01
和
servletDemo02
輸出的結果
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);
}
}
方式二:通路時拼接
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);
}
}
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。
3.2 JSP快速入門
1.建立 一個
web
項目。
2.在web目錄下建立一個
index.jsp
檔案。
3.在檔案中寫一句内容為:這是我的第一個
jsp
。
4.部署并啟動項目。
5.通過浏覽器測試。
3.3 JSP執行過程
3.4 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 指令
<%@ 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細節
- 九大隐式對象
-
PageContext 對象
是JSP獨有的, Servlet中沒有。
是四大域對象之一的頁面域對象,還可以操作其他3三個域對象中的屬性。
還可以擷取其他八個隐式對象。
生命周期是随着JSP的建立而存在,随着JSP的結束而消失。每個JSP頁面都有一個PageContext對象。
- 四大域對象
3.8 MVC模型
- M(Model) :模型。用于封裝資料,封裝的是資料模型!
- V(View) :視圖。用于顯示資料,動态資源用JSP頁面,靜态資源用HTML頁面!
- C(Controller) :控制器。用于處理請求和響應,例如Servlet !
四、學生管理系統
4.1 案例效果
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>