【问题标题】:How to pass values from servlet to html page如何将值从 servlet 传递到 html 页面
【发布时间】:2014-11-20 15:03:05
【问题描述】:

我正在使用 servlet (v3.0) 和 jetty v9 开发 Web 服务器。我必须提供一个 HTML 页面,但在此之前,我需要根据布尔变量的值修改页面上几个元素的 CSS 内联样式。

多年来,我一直在查看 JSP 教程和示例,但我觉得自己离弄明白还差得远。为了简化它,这就是我想要做的:

page.jsp:(在 /WAR/html 中)

<html>
    <head>My Page</head>
    <body>
        <p <% style="display:none" if variable is true %>></p>
    </body>
</html>

GetPage.java:

public class GetPage extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        boolean decision = getDecision();
        // get the JSP page and process the JSP with the boolean variable...
        resp.setContentType("text/html");
        resp.getWriter().print(???);
    }
}

我已经使用 Java 多年,但以前从未使用过 JSP。我原以为这是 JSP 101,但我不明白它是如何工作的。此外,我的真实用例与上面的示例相差不远。 JSP 是否为此目的而矫枉过正,如果是,是否有更好的选择?

【问题讨论】:

标签: java jsp servlets


【解决方案1】:

如果没有 JSP,您可以简单地从 servlet 编写 html,如下所示:

 response.setContentType("text/html");  
 PrintWriter out = response.getWriter();  
 out.println("<html>");
 out.println("<body>");
 if(yourcondition){
   <p style="display:none;"></p>
 }else{
   <p></p>
 }
 out.println("</body>");
 out.println("</html>");

或者使用Jquery Ajax(不带jsp),您可以将ajax 请求发送到您的servlet 并从您的servlet 获得响应。这样你就不需要在你的servlet中耦合你的html页面,如上所示。

HTML:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
  throws IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("yourvalue");
 }

<script>
 $(document).ready(function(){
    //sends ajax get request
    $.get( "myServlet", function( data ) {
        //Do your logic with the response
        if(data == "myvalue"){
            $("p").css("display", "none");
         }
    });
 });
</script>

用jsp:

Servlet

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
  throws IOException {
    request.setAttribute("myvalue",val);
    RequestDispatcher rd = sc.getRequestDispatcher("mypage.jsp");
    rd.forward(req, res);
 }

JSP

<p <c:if test="${your condition}">style="display: none;"</c:if>></p>

或

<p style="display: ${ var == 'myvalue' ? 'none': 'block'};"></p>

jQuery

 var myVal= '${val}'

 if(myVal == "none"){
    $("p").css("display", "none");
 }

【讨论】:

  • 感谢您的详细回复。但是,我绝对想走使用 JSP(或任何其他模板引擎)的路线。我了解 JSP 中的实际替换语法是怎么回事,但它是我不明白的服务器部分。我不想从 servlet 编写 HTML,HTML 太多了。我遇到的问题是如何从 servlet 加载 JSP 页面,将变量传递给一些 JSP 解析对象(大概),然后返回最终转换的 HTML 页面。我正在研究 Mike Kobit 发布的 dup 问题的解决方案
  • 是的,那个帖子有足够的信息让你开始。简单介绍一下如何将请求从servlet转发到jsp:首先将要传递的对象设置为请求对象,然后使用getRequestDispatcher(url)定义目标jsp/servlet(也可以转发到其他servlet),最后转发要求。容器将负责解析等。另外,我用 servlet 代码更新了我的答案。有时我发现代码比解释更容易理解.. :)
  • 框架如何知道它应该使用jsp引擎来处理页面?难道仅仅是因为jsp文件扩展名?
  • Jsp 实际上是一个 servlet。在应用程序启动期间或容器按需编译的特殊类型的 servlet。本质上,这些 jsp servlet 为您执行 println()。而不是你把它们写下来。在此处查看第 291 页:books.google.ca/…
  • 如果你好奇的话,我建议你在业余时间阅读“Head First Servlets and JSP”中的第 7 章...... :)
【解决方案2】:

小服务程序

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    request.setAttribute("attrib", true);
    request.getRequestDispatcher("/page.jsp").include(request, response);
}

jsp

${ attrib ? 'none': 'block'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2011-01-16
    相关资源
    最近更新 更多