繁体   English   中英

Servlet 到 JSP 总是传递空值

[英]Servlet to JSP always passing null value

我刚开始使用 JSP 和 Servlet,所以遇到了一个非常基本的问题。 我正在尝试从 JSP 向 servlet 发出请求,在那里我设置了一个参数,然后将来自 servlet 的答案转发回 jsp。 这是我的 JSP 中的代码:

<% String s = (String)request.getAttribute("name");
   out.println(s);
%>

这是我的 servlet 代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    try (PrintWriter out = response.getWriter()) {
        request.setAttribute("name", new String("aa"));
        this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
    }
}

所以最后,servlet 有价值,但我的 jsp 没有。

在没有作者的情况下尝试,您不希望对单个响应有两个写作上下文。 你也没有使用它:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("name", new String("aa"));
    this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
}

这里你已经声明了一个 String 类型,但你也将它转换为 String ,这是多余的。

<% String s = (String)request.getAttribute("name");
   out.println(s);
%>

此外, <%= %><% %>之间存在差异。 如果要将变量输出到 jsp 中,请使用带有等号 ( <%= %> ) 的变量。 scriptlet 代码的第二行也会产生错误。 您在 servlet 中编写的代码不仅会在 JSP 上继续运行,而且不是如何工作的。

如果要输出 name 属性,请执行以下操作:

<%= request.getAttribute("name") %>

然而,自 2010 年以来不鼓励使用 scriptlet(过时的技术)。我们改用 EL 和 JSTL。 您应该能够像这样输出变量:

${name}

在您的 Servlet 中,您需要做的就是:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  String name = "Jane"; //create a string
  request.setAttribute("name", name); //set it to the request

  RequestDispatcher rs = request.getRequestDispatcher("index.jsp"); //the page you want to send your value
  rs.forward(request,response); //forward it

}

编辑

你问,

有没有办法触发 servlet 让我们说单击按钮或类似的东西?

是的,有多种方法可以做到这一点,这实际上取决于您希望如何设置。 在单击按钮时触发 servlet 的简单方法是这样的。 *(假设您有一个 servlet 映射到/Testing ):

<a href="/Testing">Trigger Servlet<a>

另一种方法可能是使用表格:

<form action="Testing" method="get">
<input type="hidden" name="someParameterName" value="you can send values like this">
<button type="submit">Do some magic</button>
</form>

还有 AJAX(涉及 javascript)。 但这是相当先进的,在您熟悉正常的同步http 行为之前,我不建议您这样做。

我认为您应该使用请求对象调用请求调度程序方法。 这是你如何做到的:

RequestDispatcher rs = request.getRequestDispatcher("index.jsp");
rs.forward(request,response);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM