【问题标题】:how to pass String values from (Servlet) java class to file.jsp in maven Project?如何将字符串值从(Servlet)java类传递到maven Project中的file.jsp?
【发布时间】:2014-03-21 10:00:34
【问题描述】:

我的 maven 项目中有两个名为 bulletedList.java 和 blist.jsp 的文件作为 Web 应用程序。

我的 .jsp 文件链接到 .java 文件。并且有一个按钮可以在我按下该按钮后立即生成数字,然后 .java 文件会生成 4 个随机数并将它们转换为字符串。然后到了我想在 jsp 文件中使用这些生成的值作为项目符号列表的阶段,但我无法做到这一点。

bulletedList.java(servlet)的代码是:

public BulletedList() {
    super();
}

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

    PrintWriter out = response.getWriter();
    out.println("<title>My BulletedList Servlet!</title>");

    String No1 = "" + ((int) (Math.random() * 50));
    String No2 = "" + ((int) (Math.random() * 25));
    String No3 = "" + ((int) (Math.random() * 75));
    String No4 = "" + ((int) (Math.random() * 99));

    response.getWriter().write(No1);
    response.getWriter().write(No2);
    response.getWriter().write(No3);
    response.getWriter().write(No4);

    response.sendRedirect("bList.jsp");

    //out.println("<h1>" + request.getParameter("No1") + "</h1>");
}

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

现在我不知道我需要做什么才能在 jsp 文件中使用这些值并在浏览器中显示它们。

我试过这个:

request.getParameter(No1) 在 (LI) 标记之后,但它只是将纯 No1 显示为文本,而不是显示存储在其中的任何由 math.random() 生成的随机值。

【问题讨论】:

    标签: jsp maven servlets web-applications jsp-tags


    【解决方案1】:

    不要使用重定向

    重定向将标头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源 url。然后浏览器向给定的 url 发起一个新的请求。由于是新请求,所以旧的请求和响应对象丢失了。

    用途:

    RequestDispatcher rd= request.getRequestDispatcher("bList.jsp");
    rd.forward(request, response);
    

    【讨论】:

    • 但我仍然不明白为什么:{getServletContext().getRequestDispatcher("bList.jsp").forward(request, response);} 不起作用
    • request.getRequestDispatcher() 将 url 的相对路径作为参数 (Ex- /bList.jsp)context.getRequestDispatcher() 将 url 的绝对路径作为参数._(Ex- /Package/bList.jsp)_
    • 所以如果你想使用 context requestDispatcher 你必须提供jsp的完整路径。即getServletContext().getRequestDispatcher (“/ContextRoot/jsp/bList.jsp”);
    【解决方案2】:

    首先将请求转发给JSP,而不是发送重定向:

    request.getRequestDispatcher("bList.jsp").forward(request, response);
    

    您当前的代码将告诉浏览器对 bList.jsp 发出全新的请求,而无需调用您的 servlet。

    然后在请求范围内设置您的值,而不是将它们写入 out

    request.setAttribute("no1", No1);
    request.setAttribute("no2", No2); 
    

    在您的 JSP(本质上只是请求链中的另一个 servlet)中,您可以访问这些属性并将它们嵌入到您的 HTML 标记中。

    <li><%= pageContext.getRequest().getAttribute("no1") %></li>
    

    但更好,也是首选的方法是使用 JSP 表达式语言来访问或输出请求范围属性:

    <li>${no1}</li>
    

    【讨论】:

    • 非常感谢,但我不得不使用@Zeeshan 的 RequestDispatcher 代码,否则它仍然给出空值。
    • 那个代码可能不正确,我已经更新了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多