【问题标题】:Communicate with servlet on JSP page load [duplicate]在 JSP 页面加载时与 servlet 通信 [重复]
【发布时间】:2016-01-04 03:28:31
【问题描述】:

我刚开始使用 Servlet,我完全被难住了。

我在网上查看了数十种资源,并尝试了所有资源,但均未成功。它们都(有细微的变化)都有一个包含以下代码的 jsp 文件:

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

...和一个包含此代码的 servlet:

String message = "Example source code of Servlet to JSP communication.";
    request.setAttribute("message", message);

    getServletContext().getRequestDispatcher("/newjsp_1.jsp").forward(request, response);

我已经把上面的代码放在了doPost()、doGet() 和servlet 的主体中,没有任何效果。然后我想到 jsp 文件实际上不可能知道它应该与哪个 servlet 通信。我研究了 xml 映射和注释映射,但它们似乎并不适用。

到目前为止,我已经将 Ajax 与 servlet 进行了良好的通信,但我可以使用 ajax 指定操作。如何将数据从 jsp 传递到 servlet,然后再返回?

任何想法都将不胜感激!

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    这里是一个简单的 Servlet-JSP 通信示例代码:

    index.jsp

    <!doctype html>
    <html>
    <head>
        <title>Servlet - JSP Communication Demo</title>
    </head>
    
    <body>
        <%
            if(request.getAttribute("message") != null) {
                out.println("<h1>" + request.getAttribute("message") + "</h1>");
            }
        %>
    
        <form method="get" action="sayhello">
            <label for="name">Enter your name</label>
            <input type="text" name="name" id="name" />
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>
    

    ServletDemo.java

    package com.demo;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ServletDemo extends HttpServlet{
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            if(request.getParameter("name") != null && request.getParameter("name") != "") {
                request.setAttribute("message", "Hello " + request.getParameter("name"));
            }else {
                request.setAttribute("message", "");
            }
    
            getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
        }
    }
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
        <servlet>
            <servlet-name>Servlet-JSP Communication Demo</servlet-name>
            <servlet-class>com.demo.ServletDemo</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>Servlet-JSP Communication Demo</servlet-name>
            <url-pattern>/sayhello</url-pattern>
        </servlet-mapping>
    </web-app>
    

    目录结构

    --tomcat
      --webapps
        --servlet
          --WEB-INF
            --classes
              --com
                --demo
                  --ServletDemo.class
          --web.xml
        --index.jsp
    

    代码说明

    这里我创建了一个简单的表单,通过GET 方法将表单数据发送到ServletDemo servlet。另一方面,servlet 获取表单数据并回复一些消息。在 JSP 中显示消息。

    【讨论】:

    • 这很有帮助。谢谢!
    【解决方案2】:

    您采用的方法非常古老!这是 1999 年的 JavaWorld article,描述了如何在 servlet 和 JSP 之间进行通信。

    在 web.xml 中,您将 URL 路径绑定到您的 servlet。应用服务器将通过在 servlet 上调用 doGet() 来响应该 URL 路径上的 HTTP GET,并通过调用 doPost() 来响应 HTTP POST。您可以在作为参数传递给这些方法的HttpServletRequest 上设置属性。当您使用该请求调用forward 方法时,这些属性将与JSP 共享。

    它应该是这样工作的。

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多