Servlet到JSP总是传递null值

时间:2018-05-27 22:25:40

标签: java jsp servlets

我刚开始使用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没有。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

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

然而,由于不鼓励使用2010年的小脚本(过时的技术)。我们使用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的简单方法就是这样。 *(假设您有一个映射到/Testing的servlet):

<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行为。