Java Web Servlet 传值给 jsp 的方法

使用 request 传值

使用步骤

  1. Servlet 里的 doGetdoPost 使用 req.setAttribute(String name, Object o) 方法设置要传值的键值对

  2. 继续使用 req.getRequestDispatcher(String path) 得到 RequestDispatcher 对象

  3. 使用 requestDispatcher.forward(ServletRequest request, ServletResponse response) 调用指定 jsp 文件

  4. 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>

运行结果

image
访问地址是
http://localhost:8080/Gradle___com_mrx___MyServlet_1_0_SNAPSHOT_war/
点击 登录 按钮后的访问地址是
http://localhost:8080/Gradle___com_mrx___MyServlet_1_0_SNAPSHOT_war/login

使用 cookie 传值

使用步骤

  1. 使用 HttpServletResponseaddCookie(Cookie cookie) 方法向 response 添加 cookie

  2. 一样的,使用 RequestDispatcher 转发请求给 jsp 好让浏览器刷新页面

  3. 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>

运行结果

image

使用 session 传值

使用步骤

  1. Servlet 里使用 HttpServletRequestgetSession() 方法,获取 session

  2. 使用 HttpSessionsetAttribute(String name, Object value) 方法,设置 session 键值对

  3. 一样的,使用 RequestDispatcher 转发请求给 jsp 好让浏览器刷新页面

  4. 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>

运行结果

image

posted @ 2021-09-09 08:00  博麗靈夢  阅读(484)  评论(0编辑  收藏  举报