Java Web Servlet 传值给 jsp 的方法
使用 request 传值
使用步骤
-
在
Servlet
里的doGet
或doPost
使用req.setAttribute(String name, Object o)
方法设置要传值的键值对 -
继续使用
req.getRequestDispatcher(String path)
得到RequestDispatcher
对象 -
使用
requestDispatcher.forward(ServletRequest request, ServletResponse response)
调用指定jsp
文件 -
在
jsp
里 使用el 表达式
或常量表达式
来获取传递的值
注意:访问时需要访问 Servlet
的路由才行,不能访问 jsp
文件,不然是没法传值的
具体代码
Servlet 部分
package com.mrx.myservlet
import com.mrx.myservlet.been.UserBeen
import javax.servlet.annotation.WebServlet
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
@WebServlet(name = "登录接口", value = ["/login"])
class Login : HttpServlet() {
override fun doGet(req: HttpServletRequest?, resp: HttpServletResponse?) {
resp?.let {
it.contentType = "text/html"
it.status = 403
it.writer.println("FuckYOU!")
}
}
override fun doPost(req: HttpServletRequest?, resp: HttpServletResponse?) {
req?.characterEncoding = Charsets.UTF_8.toString()
val userName = req?.getParameter("u").toString()
val passwd = req?.getParameter("p").toString()
val user = UserBeen(userName, passwd)
println(userName)
req?.let {
it.setAttribute("result", user)
it.getRequestDispatcher("/index.jsp").forward(it, resp)
}
}
}
jsp 部分
<%@ page
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
<meta charset="UTF-8">
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/login">
<label>
用户名: <input name="u"/>
</label>
<label>
密码: <input name="p"/>
</label>
<input type="submit" value="登录"/>
</form>
<jsp:useBean id="result" scope="request" class="com.mrx.myservlet.been.UserBeen"/>
<c:if test="${result!=null}">
<h1>用户名: ${result.userName} </h1>
<h1>密码: ${result.passwd} </h1>
</c:if>
<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>
运行结果
访问地址是
http://localhost:8080/Gradle___com_mrx___MyServlet_1_0_SNAPSHOT_war/
点击 登录
按钮后的访问地址是
http://localhost:8080/Gradle___com_mrx___MyServlet_1_0_SNAPSHOT_war/login
使用 cookie 传值
使用步骤
-
使用
HttpServletResponse
的addCookie(Cookie cookie)
方法向response
添加 cookie -
一样的,使用
RequestDispatcher
转发请求给jsp
好让浏览器刷新页面 -
在
jsp
里使用cookie.get("key").value
就能得到值
核心代码
大部分都和上头的一样,这里只贴出核心部分
Servlet 部分
val user = UserBeen(userName, passwd)
val cookies = user.toCookie()
resp?.let {
for (cookie in cookies) {
it.addCookie(cookie)
}
}
jsp 部分
<c:if test="${cookie['userName']!=null}">
<h1>欢迎回来 ${cookie['userName'].value}</h1>
</c:if>
运行结果
使用 session 传值
使用步骤
-
在
Servlet
里使用HttpServletRequest
的getSession()
方法,获取session
-
使用
HttpSession
的setAttribute(String name, Object value)
方法,设置session
键值对 -
一样的,使用
RequestDispatcher
转发请求给jsp
好让浏览器刷新页面 -
jsp
里使用sessionScope
获取session
的值
核心代码
Servlet
req?.let {
it.session.setAttribute("mySession", user)
it.setAttribute("result", user)
it.getRequestDispatcher("/index.jsp").forward(it, resp)
}
jsp
<c:if test="${sessionScope['mySession']!=null}">
<h1>来自 session 的消息 -> ${sessionScope['mySession']}</h1>
</c:if>