javaweb--实验七 JSP内置对象(一)--期末复盘

实验七 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

猜你喜欢

转载自blog.csdn.net/qq_52495761/article/details/134604199