【问题标题】:Session parameter is aways null会话参数始终为空
【发布时间】:2018-10-15 07:30:31
【问题描述】:

我试图将一个字符串从一个 servlet 传递到另一个,但我总是在第二个 servlet 中得到一个空值。我已经用头撞了这个几乎 2 周无济于事,而且我已经没有想法了。我已阅读此处发布的所有类似问题,但我仍然得到一个空值。

这是第一个 servlet

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
{
    try 
    {
        HttpSession session = request.getSession();
        String name = (String) session.getAttribute("name");
        int userId = DBConnect.getIdByName(name);
        int lobbyId = DBConnect.insertInLobby(userId);
        request.setAttribute("lobbyId", lobbyId);
        request.getRequestDispatcher("PlatformPairsLobby.jsp").forward(request, response);
    } 
    catch (ServletException | IOException e) 
    {
        logger.error("Error " + e);
    }
}

这是第二个名称字符串始终为空的 servlet。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
{
    HttpSession session = request.getSession();
    String name = (String) session.getAttribute("name");
    int id = DBConnect.getIdByName(name);
    request.setAttribute("id", id);
    String lobbyId = request.getParameter("lobbyId");
    request.setAttribute("lobbyId", lobbyId);
    response.setContentType("application/x-java-jnlp-file");
    try 
    {
        request.getRequestDispatcher("PairsJnlp.jsp").include(request, response);
    } 
    catch (ServletException | IOException e)
    {
        logger.error("Error " + e);
    }
}

为了访问第二个 servlet,我在这个 JSP 中使用了一个按钮

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="java.awt.List"%>
<%@page import="java.util.*"%>
<%@page import="database.DBConnect"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
<%  
ArrayList<String> list = (ArrayList<String>) 
request.getAttribute("lobbyList");
Integer lobbyId = (Integer) request.getAttribute("lobbyId");
%>

------------------

window.location.href = 
"http://192.168.100.154:8080/GamePlatformCore/SecondServlet?lobbyId=<%=lobbyId%>";

名称是在不同的 servlet 中设置的。

request.setAttribute("verificare", verificare);
HttpSession session = request.getSession();
session.setAttribute("name", name);

if(request.getServletContext().getAttribute("userMessages")==null)
{
    request.getServletContext().setAttribute("userMessages",new ArrayList<String>());       
}

request.getRequestDispatcher(WELCOME_PAGE).forward(request, response);

【问题讨论】:

  • 你应该真正将Java和Display分开,将Java放入Servlet,将Display放入JSP(MVC范式)
  • 我很困惑,在你的 Servlet1 中你调用 PlatformPairsLobby.jsp - 你是说你在 JSP 中有一个 doGet 方法吗?
  • 我没有看到你在 Session 中放了任何东西。试试session.setAttribute("lobbyId", lobbyId);
  • PlatformPairsLobby.jsp 是最后发布的 jsp。我试过 session.setAttribute("name", name);在第一个 servlet 中,仍然没有工作
  • 您确定 Session 为空吗?显示的调用永远不允许返回 null。 (此外,您几乎可以肯定是要导入 java.util.List,而不是 java.awt。如果可能的话,请现代化为 Spring MVC 之类的东西。)

标签: java jsp servlets null


【解决方案1】:

您正在使用请求范围属性来获取字符串值,使用以下代码获取会话值:

<% String lobbyId = (String)request.getSession().getAttribute(lobbyId); %>

【讨论】:

  • 我需要将名称从 servlet1 获取到 servlet2。第二个中没有使用 lobbyId 参数。这是一段旧代码。
猜你喜欢
  • 2015-10-07
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多