实验七 JSP内置对象(一)
需要资料的文章末尾自提
一、实验目的:
1、掌握response与request的基本用法。
2、理解转发和重定向的区别。
二、 实验内容:
设计如下图所示的页面,并实现用户信息的“删除”与“编辑”功能。
【实验步骤】
(1)新建一个名为”web7”的项目(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”。User.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 = (ArrayList<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++;
String sno = user.getSno();
String name = user.getName();
int age = user.getAge();
String gender = user.getGender();
String deleteLink = "delete?index=" + (rowNum - 1);
String editLink = "editPage.jsp?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>
<a href="<%=editLink%>" >编辑</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 {
String referer = req.getHeader("referer");//获取上一级页面的URL
if (null==referer){
resp.sendRedirect(req.getContextPath()+"/users.jsp");
return;
}
int index = Integer.parseInt(req.getParameter("index"));
List<User> users = (ArrayList<User>) getServletContext().getAttribute("users");
users.remove(index);
resp.sendRedirect(req.getContextPath()+"/users.jsp");
}
}
(4)新建JSP,命名为“editPage”。editPage.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>
<h1>编辑用户信息</h1>
<%
//从application(ServletContext对象)中获取全局变量users的值
List<User> users = (ArrayList<User>) application.getAttribute("users");
//获取被编辑的用户的下标值
int index = Integer.parseInt(request.getParameter("index"));
//根据下标获取待编辑的用户
User user = users.get(index);
//【代码一】读取待编辑用户的基本信息,为sno、name、age、gender变量赋值
%>
<form action="edit?index=<%=index%>" method = "post">
<!--通过?在form的action后面传递参数时,需要指定form的method="post",不然无法获得?后面的参数-->
学号 <input type="text" name="sno" readonly="true" value=<%=sno%>><br/>
姓名 <input type="text" name="name" value=<%=name%>><br/>
年龄 <input type="text" name="age" value=<%=age%>><br/>
性别 <input type="text" name="gender" value=<%=gender%>><br/>
<br/>
<input type="submit" value="提交"></br>
</form>
</body>
</html>
(5)在“it.servlet”包中新建名为“EditServlet”的Java类。EditServlet.java文件完成用户信息的修改。
package it.servlet;
import it.entity.User;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/edit")
public class EditServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求体的编码方案为utf-8
req.setCharacterEncoding("utf-8");
//【代码二】设置响应对象以及浏览器的字符方案为utf-8
//从ServletContext对象中获取全局变量users的值
List<User> users = (ArrayList<User>) getServletContext().getAttribute("users");
//获取要修改的用户的下标值
int index = Integer.parseInt(req.getParameter("index"));
//【代码三】根据下标获得待修改的用户对象,用户对象的变量名为user
//从请求对象中,获取修改后的用户信息
String sno = req.getParameter("sno");
// 【代码四】
//通过setter,完成用户信息的修改
user.setSno(sno);
// 【代码五】
resp.getWriter().println("<script>alert('修改成功');window.location.href='"
+req.getContextPath()+"/users.jsp'</script>");
/*如果使用
resp.getWriter().println("<script>alert('修改成功')</script>");
resp.sendRedirect(req.getContextPath()+"/users.jsp");
浏览器直接跳转到users.jsp,而不显示“修改成功”的javascript对话框
*/
}
}
三、具体实现
<%@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>
<h1>编辑用户信息</h1>
<%
//从application(ServletContext对象)中获取全局变量users的值
List<User> users = (ArrayList<User>) application.getAttribute("users");
//获取被编辑的用户的下标值
int index = Integer.parseInt(request.getParameter("index"));
//根据下标获取待编辑的用户
User user = users.get(index);
//【代码一】读取待编辑用户的基本信息,为sno、name、age、gender变量赋值
String sno = user.getSno();
String name = user.getName();
int age = user.getAge();
String gender = user.getGender();
%>
<form action="edit?index=<%=index%>" method = "post">
<!--通过?在form的action后面传递参数时,需要指定form的method="post",不然无法获得?后面的参数-->
学号 <input type="text" name="sno" readonly="true" value=<%=sno%>><br/>
姓名 <input type="text" name="name" value=<%=name%>><br/>
年龄 <input type="text" name="age" value=<%=age%>><br/>
性别 <input type="text" name="gender" value=<%=gender%>><br/>
<br/>
<input type="submit" value="提交"></br>
</form>
</body>
</html>
package it.servlet;
import it.entity.User;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/edit")
public class EditServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求体的编码方案为utf-8
req.setCharacterEncoding("utf-8");
//【代码二】设置响应对象以及浏览器的字符方案为utf-8
resp.setContentType("text/html;charset=UTF-8");
//从ServletContext对象中获取全局变量users的值
List<User> users = (ArrayList<User>) getServletContext().getAttribute("users");
//获取要修改的用户的下标值
int index = Integer.parseInt(req.getParameter("index"));
//【代码三】根据下标获得待修改的用户对象,用户对象的变量名为user
User user = users.get(index);
//从请求对象中,获取修改后的用户信息
String sno = req.getParameter("sno");
// 【代码四】
String name = req.getParameter("name");
String ageString = req.getParameter("age");
int age = Integer.parseInt(ageString);
String gender = req.getParameter("gender");
//通过setter,完成用户信息的修改
user.setSno(sno);
// 【代码五】
user.setName(name);
user.setAge(age);
user.setGender(gender);
resp.getWriter().println("<script>alert('修改成功');window.location.href='"
+req.getContextPath()+"/users.jsp'</script>");
/*如果使用
resp.getWriter().println("<script>alert('修改成功')</script>");
resp.sendRedirect(req.getContextPath()+"/users.jsp");
浏览器直接跳转到users.jsp,而不显示“修改成功”的javascript对话框
*/
}
}
四、资料自提
链接:https://pan.baidu.com/s/1qmaybwHPX-TbAMOF8sZNiA?pwd=ai7v
提取码:ai7v