【问题标题】:Why my web application does not redirect correctly?为什么我的 Web 应用程序无法正确重定向?
【发布时间】:2018-02-07 18:36:25
【问题描述】:

我正在尝试将属性从 java servlet 传递到 jsp 并将此属性写入 jsp 文件。但是它不会重定向到 jsp 文件 url,而是写入 jsp 文件的内容。这是我的相关代码:

Control.java:

@WebServlet("/Control")
public class Control extends HttpServlet{

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Key key = MacProvider.generateKey();
    long time = System.currentTimeMillis();
    try{
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, key)
                .setSubject("username")
                .setIssuedAt(new Date(time))
                .setExpiration(new Date(time+6000000))
                .claim("password","password")
                .compact();
        req.setAttribute("jwt", jwt);
        req.getRequestDispatcher("/Home.jsp").forward(req,resp);
    }catch (Exception e){
        e.printStackTrace();
    }

}
}

Home.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
${jwt}
</body>
</html>

在这里,浏览器停留在http://localhost:8080/Control,但它会写入 Home.jsp 文件的内容,该文件只是一个 java web 令牌结果字符串。

2) 我的第二个问题是,当我尝试将此 jwt 结果字符串存储在浏览器本地存储中,然后将其写入 jsp 文件以检查它是否存储在浏览器中时。但它不打印任何东西。为此,我只是将Home.jsp 文件更改如下:

(我从here获取了两个代码sn-ps)

Home.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
<script>
    localStorage.setItem("jwt", ${jwt});
    console.log(localStorage.getItem("jwt"));
    var jjwt = localStorage.getItem("jwt");
    document.write(jjwt);
</script>
</body>
</html>

再试一次:

<html>
<head>
<script>
function myFunction() {
    localStorage.setItem("jwt", ${jwt});
    console.log(localStorage.getItem("jwt"));
    var jjwt = localStorage.getItem("jwt");
    document.getElementById("myText").innerHTML = jjwt;
}
</script>
</head>
<body onload="myFunction()">

<span id="myText"></span>

</body>
</html>

我哪里做错了?

【问题讨论】:

    标签: java jsp servlets jwt


    【解决方案1】:

    1) 当您使用 RequestDispatcher.forward(request,response) 时,您的 servlet 仍将具有控制权,但您的 jsp 页面将被加载,因此无需担心。 如果您希望您的浏览器 URL 显示您的 JSP 页面 URL,请执行 response.sendRedirect("URL TO LOAD");

    2)由于您使用的是 JSP,因此请尝试访问请求变量,如下所示并打印它

    <% String jwt = (String) request.getAttribute("jwt");%>
    

    我们需要将其设置为

    localStorage.setItem('jwt', <%=jwt%>);
    

    【讨论】:

    • 第一个没问题,第二个我只想用js在本地存储一个变量,然后拿回来看看是否存储正确。
    • 如果我使用“response.sendRedirect”,我无法通过 req.setAttribute 传递属性。那么如何在使用“response.sendRedirect”时传递属性?
    • 重定向时无法将请求属性传递给jsp
    • 您可以使用
    • 试试这个:localStorage.setItem("jwt", ); console.log(localStorage.getItem("jwt")); var jjwt = localStorage.getItem("jwt"); document.write(jjwt);
    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 2013-06-27
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多