javaweb--Experiment 7 JSP built-in objects (1)--Final review

Experiment 7 JSP built-in objects (1)

需要资料的文章末尾自提

1. Experimental purpose:

1. Master the basic usage of response and request.
2. Understand the difference between forwarding and redirection.

2. Experimental content:

Design the page as shown in the figure below, and implement the "delete" and "edit" functions of user information.

【Experimental steps】

(1) Create a new project (Web application) named "web7". In the project, create a new "it.entity" package, and create a new java class named "User" in the package.
This part is the same as Experiment 6.

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 User.jsp file is used to display the user's basic information.
The difference from Experiment 6 is that an "Edit" hyperlink is added to each row.

<%@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) 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.
This part is the same as Experiment 6.

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) Create a new JSP and name it "editPage". editPage.jsp is the page for editing user information.

<%@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) Create a new Java class named "EditServlet" in the "it.servlet" package. The EditServlet.java file completes the modification of user information.

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对话框
 */
    }

}

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>
        <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对话框
 */
    }

}

4. Self-retrieval of information

Link: https://pan.baidu.com/s/1qmaybwHPX-TbAMOF8sZNiA?pwd=ai7v
Extraction code: ai7v

Guess you like

Origin blog.csdn.net/qq_52495761/article/details/134604199