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​​​ 页面,同时传入​​request​​​ 和 ​​response​​对象。

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. 运行结果

运行程序,得到如下的页面:

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

点击 按钮,就可以跳转到如下的页面:

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

可以看到这里通过后台 向 前端传值,实现了数据在页面的展示。

详细 代码可以参考我的 ​​github​