如何将servlet的响应重定向到我们收到请求的同一个jsp页面

时间:2013-09-16 15:22:41

标签: java spring jsp servlets model-view-controller

如何将servlet的响应重定向到我收到请求的同一个jsp页面。假设我的jsp页面上有一个名为status的选项卡 http://localhost:8080/Example/status.jsp。现在,当我发送请求并收到响应时,它应该在同一页面上显示响应,即。它应该显示回复 http://localhost:8080/Example/status.的jsp。但是它向我展示了回应 http://localhost:8080/Example/Status其中Status是web.xml文件中的url-pattern。请任何帮助表示赞赏。下面是我的代码。 如何在status.jsp中获得响应。

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws 
IOException {

             try{

                 String showstatus =req.getParameter("showstatus");
                 PrintWriter out = res.getWriter();   
                 Runtime rt = Runtime.getRuntime();
                 Process pr = rt.exec("C:\\tools\\server\\util stat -a" );
                 BufferedReader stdInput = new BufferedReader(new   
InputStreamReader(pr.getInputStream()));

                BufferedReader input = new BufferedReader(stdInput);
                String stat = "";
                    while((stat = input.readLine()) != null){
                        out.println(stat);
                    }
             }
                catch (Throwable t)  
                  {  
                    t.printStackTrace();  
                  }  


                finally {  

                }  }

JSP CODE:

<div id= "status" style="display:none;">
            <FORM action="status" METHOD="POST">
                <input type=submit name=showstatus 
id=txtSubmit value=Status />

            </FORM>
        </div>

WEB.XML:

<servlet>       
    <servlet-name>Status</servlet-name>
    <servlet-class>com.emc.clp.license.Status</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Status</servlet-name>
    <url-pattern>/status</url-pattern>
</servlet-mapping>

1 个答案:

答案 0 :(得分:1)

在servlet中,不是将util的输出直接打印到响应中,而是将其保存在内存中并将其传递给jsp:

String stat;
StringBuffer utilOutput = new StringBuffer();
while((stat = input.readLine()) != null){
    utilOutput.append(stat + "\n");
}
req.setAttribute("utilOutput", utilOutput.toString());
req.getRequestDispatcher("/Example/status.jsp").forward(req, res);

在你的jsp中,我假设你有一个div或者你想看到输出的东西:

<div id= "status" style="display:none;">
    <form action="/status" method="POST">
        <input type="submit" name="showstatus" id="txtSubmit" value="Status" />
    </form>
</div>
<div id="result">
    <pre>
        ${requestScope.utilOutput}
    </pre>
</div>

请注意,我在表单操作中添加了正斜杠。如果您的用户正在从/Example/status.jsp提交表单,那么相对路径会将帖子发送到/Example/status,但您的servlet只会处理/status的请求。

您的请求对象req具有属性映射,您可以使用请求中的setAttribute()方法将任何相关对象放入其中。请求调度程序将您的请求和响应对象转发到另一个资源(您的jsp)以进行处理。 jsp可以使用上面的EL表示法按名称访问这些值。

如果以这种方式加载,则内联样式中的display:none将始终阻止在页面上看到该表单。我认为最明显的显示方式是在客户端使用javascript。单击选项卡时,您需要更改显示值。你没有提到你的标签元素是什么,但让我们说它们是div。您可以编写一个javascript函数来加载表单,或者您甚至可以全部内联:

<div id="mytab" onclick="document.getElementById('status').style.display = 'block';">Load the form</div>