如何将 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 模式。请提供任何帮助。下面是我的代码。
如何获取 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 代码:
<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>
最佳答案
在您的 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。单击选项卡时,您需要更改显示值。你没有提到你的 tab 元素是什么,但我们假设它们是 div。您可以编写一个 javascript 函数来加载表单,或者您甚至可以全部内联完成:
<div id="mytab" onclick="document.getElementById('status').style.display = 'block';">Load the form</div>
关于java - 如何将 servlet 的响应重定向到我们收到请求的同一个 jsp 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831659/