首页 文章

Servlet到JSP总是传递null值

提问于
浏览
1

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

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

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

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

    如果要输出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
    
    }
    

    EDIT

    您询问,

    有没有办法触发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>
    

    在你熟悉正常的 synchronous http行为之前,建议你这样做 .

  • 0

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

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

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

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

相关问题