实验六 JSP基本语法
需要资料的文章末尾自提
一、实验目的:
1、掌握JSP的基本用法。
2、理解JSP和Servlet的分工。
二、实验内容:
设计如下图所示的页面。单击某一行的“删除”链接,则删除该行对应的用户数据。
【实验步骤】
(1)新建一个名为”web6”的项目(Web应用程序)。在项目中,新建“it.entity“包,在包中新建名为”User”的java类。
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)新建JSP,命名为“users”。users.jsp文件用于展示用户的基本信息。
<%@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)新建“it.servlet”包,在包中新建名为“DeleteServlet”的Java类。DeleteServlet.java文件用于删除一条用户信息。
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");
*/
}
}
}
三、具体实现
<%@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");
}
}
}
四、资料自提
链接:https://pan.baidu.com/s/1ifszJdUmR_7_2hnER3yNLw?pwd=xzgr
提取码:xzgr