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. 运行结果
运行程序,得到如下的页面:
点击 按钮,就可以跳转到如下的页面:
可以看到这里通过后台 向 前端传值,实现了数据在页面的展示。
详细 代码可以参考我的 github