普通的java文件只执行main中调用的那些方法。但是servlet做了什么?我想也许它会执行文件,但我只是试图分割HTTP servlet请求和响应,但它不起作用。什么是使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数的简洁方法?
这是我的试用代码:
public void requestReader(HttpServletRequest req) {
try {
int len = req.getContentLength();
byte[] input = new byte[len];
ServletInputStream sin = req.getInputStream();
int c, count = 0 ;
while ((c = sin.read(input, count, input.length-count)) != -1) {
count +=c;
}
sin.close();
String inString = new String(input);
int index = inString.indexOf("=");
String value = inString.substring(index + 1);
inputStream = URLDecoder.decode(value, "UTF-8");
} catch (IOException e) {
}
}//end of requestReader
public void responseWriter(HttpServletResponse resp) {
try{
resp.setStatus(HttpServletResponse.SC_OK);
OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream());
writer.write("Working");
writer.flush();
writer.close();
} catch (IOException e) {
}
}//end of responseWriter
答案 0 :(得分:3)
普通的java文件只执行main中调用的那些方法。
“Java文件”不执行任何操作。 JVM由java
命令行工具启动,执行main方法。
但是servlet做了什么?我想也许它会在文件中执行
servlet在Servlet容器内运行,例如Apache Tomcat或Jetty。容器本身是通过main方法启动的,它在web.xml
文件中学习servlet类,并在请求到达时调用servlet的service()
方法。
使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数的简洁方法是什么?
这正是servlet的作用(尽管HTTP请求的头部由servlet容器解析并作为请求对象的一部分传递给servlet)。你真的想做什么?
如果你没有运行servlet容器,那么使用servlet是没有意义的。
答案 1 :(得分:0)
否 Java类只是按顺序执行方法。
如果您想使用多种方法,则必须分解您的功能并明确调用您想要使用的其他方法,就像在独立程序中一样。
Servlet执行从请求处理程序开始,通常为doPost
or doGet
。
这是一个tutorial to read through,但还有无数其他人 - 只需搜索“servlet教程”。
答案 2 :(得分:0)
方法永远不会按顺序执行。它们在被叫时被执行。
servlet的功能是为来自Web浏览器的HTTP请求提供服务。为此,您的servlet必须实现service()
方法,然后从其中调用您的方法。
您还可以实现doPost()
或doGet()
,但它们只响应POST和GET命令。
您可以先查看here
答案 3 :(得分:0)
Servlet通常用于Web服务器的上下文中。这与“普通Java文件”形成对比,后者通常从命令行执行,并以main
方法开头。
为了使servlet正常工作,您需要将其作为Java Web应用程序的一部分。如果您以前从未这样做过,最好遵循关于Java Web应用程序的教程。
简而言之,HttpServlet的doPost
,doGet
或service
方法大致相当于main
方法(尽管有一些重要的区别,例如{{1}输入一次方法,而main
可以输入多次)。
答案 4 :(得分:0)
当GET HTTP请求进入,并且servlet被映射到请求的路径时,则调用servlet doGet
方法。如果是POST,则调用doPost
。您需要覆盖这些方法中的一个(或两个),以便根据请求和响应执行所需操作。
阅读HttpServlet的javadoc以了解更多信息。
答案 5 :(得分:0)
HttpServlet已经定义了可以为不同类型的http请求实现的方法:
doGet()
doPost()
doDelete()
doPut()
等...
所有这些方法都有一个请求和响应参数。
您可以读取请求的数据,调用所需的任何服务,然后使用参数中的httpServletResponse编写响应。
您不必像在问题中那样定义自己的方法。
答案 6 :(得分:0)
对任何感兴趣的人来说,这是一个通过将ServletResponse传递给另一个类来实现的更新代码:
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
try {
int len = req.getContentLength();
byte[] input = new byte[len];
ServletInputStream sin = req.getInputStream();
int c, count = 0 ;
while ((c = sin.read(input, count, input.length-count)) != -1) {
count +=c;
}
sin.close();
String inString = new String(input);
int index = inString.indexOf("=");
String value = inString.substring(index + 1);
inputStream = URLDecoder.decode(value, "UTF-8");
} catch (IOException e) {
}
responseWriter(resp);
}//end of requestReader
public void responseWriter(HttpServletResponse resp) {
try{
resp.setStatus(HttpServletResponse.SC_OK);
OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream());
writer.write("Working");
writer.flush();
writer.close();
} catch (IOException e) {
}
}//end of responseWriter
当我问这个问题时,这就是我想要实现的。