Experiment 6 JSP basic syntax
需要资料的文章末尾自提
1. Experimental purpose:
1. Master the basic usage of JSP.
2. Understand the division of labor between JSP and Servlet.
2. Experiment content:
Design the page as shown below. Click the "Delete" link of a row to delete the user data corresponding to that row.
【Experimental steps】
(1) Create a new project (Web application) named "web6". In the project, create a new "it.entity" package, and create a new java class named "User" in the package.
package it.entity;
//用户类
public class User {
private String sno;
private String name;
private int age;
private String gender;
public User(String sno, String name, int age, String gender) {
this.sno = sno;
this.name = name;
this.age = age;
this.gender = gender;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
(2) Create a new JSP and name it "users". The users.jsp file is used to display basic information of users.
<%@page import="java.util.*"%>
<%@page import="it.entity.User"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户信息管理</title>
</head>
<body>
<div align="center">
<h1>用户信息管理</h1>
<%
//application为ServletContext对象,即代表当前web应用
List<User> users = (List<User>) application.getAttribute("users");
//当网站中没有users全局变量时,创建users对象,包含初始的用户信息
if (users == null) {
users = new ArrayList<>();
users.add(new User("990001", "张三", 12, "女"));
users.add(new User("990002", "李四", 12, "男"));
users.add(new User("990003", "王五", 12, "女"));
users.add(new User("990004", "赵六", 12, "男"));
users.add(new User("990005", "小七", 12, "男"));
application.setAttribute("users",users);
}
%>
<table border="1px" width="90%" >
<tr><th width="15%">编号</th>
<th width="15%">学号</th>
<th width="15%">姓名</th>
<th width="15%">年龄</th>
<th width="15%">性别</th>
<th width="25%">操作</th>
</tr>
<%
int rowNum = 0;//行编号
for (User user : users) {
rowNum++;
//【代码一】为sno、name、age、gender赋值
String deleteLink = "delete?index=" + (rowNum-1);
%>
<tr style="text-align: center">
<td ><%= rowNum%></td>
<td><%= sno%></td>
<td><%= name%></td>
<td><%= age%></td>
<td><%= gender%></td>
<!--点击“删除”链接,使用javascript脚本弹出确认对话框,单击“确定”后,才执行删除操作-->
<td>
<a href="<%=deleteLink%>" onClick="return confirm('您确定要删除吗?请确认');">删除</a>
</td>
</tr>
<%
}
%>
</table>
</div>
</body>
</html>
(3) Create a new "it.servlet" package and create a new Java class named "DeleteServlet" in the package. The DeleteServlet.java file is used to delete a user information.
package it.servlet;
import it.entity.User;
import java.io.IOException;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/delete")
public class DeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*【代码二】
1、 如果从地址栏直接访问本资源时,则重定向到users.jsp;
2、 否则,执行用户的删除:
(1)从ServletContext对象中获取全局变量users的值
(2)通过req变量,获取被删除的用户的下标值。
将字符串转换为整型的方法为:int Integer.parseInt(String s);
(3)根据下标删除用户
(4)重定向到users.jsp页面。
resp.sendRedirect("users.jsp");
*/
}
}
}
3. Specific implementation
<%@page import="java.util.*"%>
<%@page import="it.entity.User"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户信息管理</title>
</head>
<body>
<div align="center">
<h1>用户信息管理</h1>
<%
//application为ServletContext对象,即代表当前web应用
List<User> users = (List<User>) application.getAttribute("users");
//当网站中没有users全局变量时,创建users对象,包含初始的用户信息
if (users == null) {
users = new ArrayList<>();
users.add(new User("990001", "张三", 12, "女"));
users.add(new User("990002", "李四", 12, "男"));
users.add(new User("990003", "王五", 12, "女"));
users.add(new User("990004", "赵六", 12, "男"));
users.add(new User("990005", "小七", 12, "男"));
application.setAttribute("users",users);
}
%>
<table border="1px" width="90%" >
<tr><th width="15%">编号</th>
<th width="15%">学号</th>
<th width="15%">姓名</th>
<th width="15%">年龄</th>
<th width="15%">性别</th>
<th width="25%">操作</th>
</tr>
<%
int rowNum = 0;//行编号
for (User user : users) {
rowNum++;
//【代码一】为sno、name、age、gender赋值
String sno = user.getSno();//学号
String name = user.getName();//姓名
int age = user.getAge();//年龄
String gender = user.getGender();//性别
String deleteLink = "delete?index=" + (rowNum-1);
%>
<tr style="text-align: center">
<td ><%= rowNum%></td>
<td><%= sno%></td>
<td><%= name%></td>
<td><%= age%></td>
<td><%= gender%></td>
<!--点击“删除”链接,使用javascript脚本弹出确认对话框,单击“确定”后,才执行删除操作-->
<td>
<a href="<%=deleteLink%>" onClick="return confirm('您确定要删除吗?请确认');">删除</a>
</td>
</tr>
<%
}
%>
</table>
</div>
</body>
</html>
package it.servlet;
import it.entity.User;
import java.io.IOException;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/delete")
public class DeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*【代码二】
1、 如果从地址栏直接访问本资源时,则重定向到users.jsp;
2、 否则,执行用户的删除:
(1)从ServletContext对象中获取全局变量users的值
(2)通过req变量,获取被删除的用户的下标值。
将字符串转换为整型的方法为:int Integer.parseInt(String s);
(3)根据下标删除用户
(4)重定向到users.jsp页面。
resp.sendRedirect("users.jsp");
*/
// 检查请求来源
String referer = req.getHeader("Referer");
if (referer != null && referer.endsWith("/users.jsp")) {
// 请求来自合法来源,直接处理删除操作
ServletContext servletContext = getServletContext();
List<User> users = (ArrayList<User>) servletContext.getAttribute("users");
// 直接处理删除操作,不再检查参数存在和越界
String indexParam = req.getParameter("index");
if (indexParam != null) {
int index = Integer.parseInt(indexParam);
users.remove(index);
}
resp.sendRedirect("users.jsp"); // 重定向到users.jsp页面
} else {
// 请求来自非法来源,重定向回users.jsp
resp.sendRedirect("users.jsp");
}
}
}
4. Self-retrieval of information
Link: https://pan.baidu.com/s/1ifszJdUmR_7_2hnER3yNLw?pwd=xzgr
Extraction code: xzgr