zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Servlet程序实战二之后台向前端传值

程序前端Servlet 实战 之后 传值
2023-09-14 09:13:18 时间

Servlet程序实战二之后台向前端传值

1. 需求

业务中经常的需求就是,如何实现后台向前端页面传值?因为很多情况就是:后台算好值,然后传递给前端去展示。那么这个逻辑怎么在 jsp+servlet 中实现呢?

2. 代码

2.1 java 代码
  • User
package entity;

public class User {
    private String userName;
    private String telephone;
    private String startMonth;
    private String endMonth;

    public User() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getStartMonth() {
        return startMonth;
    }

    public void setStartMonth(String startMonth) {
        this.startMonth = startMonth;
    }

    public String getEndMonth() {
        return endMonth;
    }

    public void setEndMonth(String endMonth) {
        this.endMonth = endMonth;
    }
}

这个User类就是用于往 前端页面中输出的对象。我们只需要往这个对象中填充属性,然后让其在前端展示即可。

  • LoginServlet
package servlet;

import entity.User;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("处理get 请求...");
        PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset=utf-8");
        out.println("<strong>Login Servlet</strong>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("处理 post 请求...");
        request.setCharacterEncoding("utf-8");

        User user = new User();
        user.setUserName(request.getParameter("userName"));
        user.setTelephone(request.getParameter("telephone"));
        user.setStartMonth(request.getParameter("startMonth"));
        user.setEndMonth(request.getParameter("endMonth"));
        response.setContentType("text/html;charset=utf-8");

        //把注册成功的用户对象保存在session中
        request.getSession().setAttribute("user",user);

        //跳转到注册成功页面-> userInfo.jsp,同时传递这request 和 response 对象
        request.getRequestDispatcher("../userInfo.jsp").forward(request,response);
    }
}

这个LoginServlet类是负责处理前端的register操作。其主要的操作有如下几个:

  • 设置request 的编码格式为utf-8
  • new一个 User 对象,然后往这个对象中填充属性值,其中这个属性值是通过前端传递而来的
  • 接着获取这个请求的Session,然后往这个 Session 中添加属性(其实就是键值对),其键是自命名的user,值就是user对象。
  • 在请求结束之后,跳转到 userInfo.jsp 页面,同时传入requestresponse对象。
2.2 前端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h2>Register!</h2>
<%-- 将这个值传递给HelloServlet这个类处理,使用post方法 --%>
<form action="servlet/LoginServlet" method="post">
    <%--<input type="submit" value="Post请求方式处理HelloServlet">--%>
        userName:<input type="text" name="userName" ><br>
        telephone:<input type="text" name="telephone" ><br>
        startMonth:<input type="text" name="startMonth" ><br>
        endMonth:<input type="text" name="endMonth" ><br>
    <input type="submit" name ="提交">
</form>
</body>
</html>

这里register.jsp 我不再赘述,其原理同实战一

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>

<h2>Hello World!</h2>
<%-- 将这个值传递给HelloServlet这个类处理,使用post方法 --%>
<p>测试中文输出</p>
<form>
    <%--<input type="submit" value="Post请求方式处理HelloServlet">--%>
    <jsp:useBean id="user" scope="session" class="entity.User"/>
    <table>
        <>
            <td>用户名:</td>
            <td><jsp:getProperty name="user" property="userName" /></td></br>
            <td>手机:</td>
            <td><jsp:getProperty name="user" property="telephone" /></td></br>
            <td>开始日期:</td>
            <td><jsp:getProperty name="user" property="startMonth" /></td></br>
            <td>结束日期:</td>
            <td><jsp:getProperty name="user" property="endMonth" /></td></br>
        </tr>
    </table>
</form>
</body>
</html>

接着看这个userInfo.jsp中语句。

  • <jsp:useBean id="user" scope="session" class="entity.User"/> 这个是jsp 特有的语法,是用于来获取Bean对象 user。注意这个 id 必须是 LoginServlet类中setAttribute("user",user);中的键。
  • scope="session" 表示这个对象是 session 级别
  • class="entity.User" 表明这个对象的类 的全路径名
  • <td><jsp:getProperty name="user" property="endMonth" /></td></br> 而这个就是输出这个Bean 对象的一些属性值。

3. 运行结果

运行程序,得到如下的页面:
在这里插入图片描述
点击 按钮,就可以跳转到如下的页面:
在这里插入图片描述
可以看到这里通过后台 向 前端传值,实现了数据在页面的展示。
详细 代码可以参考我的 github