Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止servlet?_Java_Jsp_Servlets_Jakarta Ee - Fatal编程技术网

Java 如何停止servlet?

Java 如何停止servlet?,java,jsp,servlets,jakarta-ee,Java,Jsp,Servlets,Jakarta Ee,我有一个如下所示的servlet: public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); validateInput(param1, para

我有一个如下所示的servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
    String param1 = request.getParameter("param1");
    String param2 = request.getParameter("param2");

    validateInput(param1, param2, request, response);

    //if nothing's wrong with the input, do this and that
}


private void validateInput(String param1, String param2, HttpServletRequest request, HttpServletResponse response) throws IOException{
    boolean fail = false;

    //validate input blah blah blah

    if (fail){
        PrintWriter out = response.getWriter();
        out.write("invalid input");
        //end process or servlet
    }
}

我想将
param1
param2
传递给函数
validateInput()
,以验证输入是否有效。如果输入无效,请写回消息,然后结束该过程。我的问题是如何结束这个过程?我知道调用
返回doPost()
中的code>将结束进程,但我试图避免仅为了结束进程而将任何值从
validateInput()
返回到
doPost()
。我个人觉得这样比将
true
false
返回
doPost()
并调用
return更具可读性那里。有办法吗?还是根本不可能?

更复杂的方法是

  • 如果发现错误,验证并设置请求属性,并将请求转发给jsp
  • 在jsp上检查错误属性(如果存在)是否显示它们

另请参见


您是否尝试过以下任一方法

response.sendRedirect(“some view.jsp”)

(或)


System.exit(0);//哪个退出程序

听起来您想获取对
输出流的引用,以便将HTML写回客户端

您可以使用
response.getOutputStream()
返回
ServletOutputStream

一旦写入此流,就需要完成。完成后,您必须
close()
flush()

您写入此流的任何内容都将发送到浏览器。还记得打电话给
response.setContentType(“text/html”)这样浏览器就知道它在处理HTML了。

你称之为“过程”是什么?那一个请求?如果是的话,那么发送一条消息就结束了servlet的责任。HTTP是一种请求/响应协议

如果你的意思是停止servlet,那是不对的。servlet在容器中运行,容器仍在运行。它等待下一个请求


我看没有什么值得停下来的。验证和带错误的路由返回是常见的。

在运行
validateInput
之后,控件将始终返回到
doPost
,除非您抛出异常(在这种情况下是未检查的异常或
IOException

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
    String param1 = request.getParameter("param1");
    String param2 = request.getParameter("param2");

    if(!isValidInput(param1, param2)){
        PrintWriter out = response.getWriter();
        out.write("invalid input");
        return;
    }

    //if nothing's wrong with the input, do this and that

}


private boolean isValidInput(String param1, String param2){
    boolean fail = false;
    //validate input and return true/false

}
因此,如果您没有从
validateInput
返回任何值到
doPost
,即使您提交了响应,
doPost
仍将继续执行它应该执行的任何操作。(当然,如果提交了响应,浏览器将完全不知道服务器端的任何进一步活动)

您将需要返回一个值、抛出一个异常(可能会捕获该异常)或设置一个全局值,该全局值由
doPost
检查(这很混乱)。

尝试以下操作:

我将validate更改为返回布尔值,因此可以在doPost方法中对其运行if语句。我还让它返回成功而不是失败,只是为了让支票在您返回后更有意义

response.sendError将允许您执行一般错误页面(请参见:)而不是输出。如果您想要,您将需要setStatus(同样,请参阅链接)

返回应该终止执行并阻止其余的执行,但它不会像system.exit(0)那样关闭servlet


返回布尔值正是您应该做的。你应该回来!失败并让doPost处理写入和终止操作。@dtech:如果在
validateInput()
中无法结束请求,则是。。那是唯一的办法。是的,我指的是那一个请求。我想要的只是验证输入。如果失败,请使用该
out.write()
编写一些消息,并结束该请求。通过只调用
out.write()
,请求不会就此停止。它将继续执行其余的代码(如果有的话)。
System.exit(0)
将结束JVM,而不仅仅是单个请求。我不能使用
sendRedirect()
,因为我这里没有使用.jsp。我使用的是html和javascript。换句话说,你的意思是,如果不抛出异常(这里不可取)或从
validateInput()返回任何值,就无法停止单个请求吗
?我真的不想仅仅为了结束请求而返回任何值。我想让它变得干净。:(是的,这就是我要说的。没有什么“不干净的”“关于返回真/假值的验证方法。这是其函数的输出。我不使用JSP。我使用简单的HTML和JavaScript通过ajax请求。获取消息并显示它
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
    String param1 = request.getParameter("param1");
    String param2 = request.getParameter("param2");

    if (! validateInput(param1, param2, request, response)){
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        //Or you can use this instead... 
        //response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        //PrintWriter out = response.getWriter();
        //out.write("invalid input");
        return;
    }
    //if nothing's wrong with the input, do this and that
}




private boolean validateInput(String param1, String param2, HttpServletRequest request, HttpServletResponse response) throws IOException{
    boolean success = false;

    //validate input blah blah blah

    return success;
}