Java 使用servlet?
普通的java文件只执行在main中调用的那些方法。但是servlet做什么呢?我想它可能会执行文件,但我只是尝试拆分HTTP servlets请求和响应,但它不起作用。使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数,这是一种什么好方法 这是我的试用代码:Java 使用servlet?,java,servlets,Java,Servlets,普通的java文件只执行在main中调用的那些方法。但是servlet做什么呢?我想它可能会执行文件,但我只是尝试拆分HTTP servlets请求和响应,但它不起作用。使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数,这是一种什么好方法 这是我的试用代码: public void requestReader(HttpServletRequest req) { try { int len = req.getContentLength();
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
没有Java类只是按顺序执行方法
如果要使用多个方法,必须分解功能并显式调用要使用的其他方法,就像在独立程序中一样
Servlet的执行通常从请求处理程序开始
这里有一个示例,但还有无数其他示例--只需搜索“servlet tutorial”。方法永远不会按顺序执行。它们在被调用时执行 servlet的功能是为来自web浏览器的HTTP请求提供服务。为此,servlet必须实现一个
service()
方法,然后从内部调用您的方法
您也可以实现doPost()
或doGet()
,但它们只响应POST和GET命令
您可以从查看web服务器上下文中通常使用的servlet开始。这与通常从命令行执行并以
main
方法开始的“普通Java文件”形成对比
为了让servlet正常工作,您需要使其成为JavaWeb应用程序的一部分。如果您以前从未这样做过,那么最好遵循有关JavaWeb应用程序的教程
简而言之,HttpServlet的
doPost
、doGet
或service
方法大致等同于main
方法(尽管有一些重要区别,例如main
方法只输入一次,而service
可以输入多次)。当GET HTTP请求进入时,servlet映射到请求的路径,然后调用servlet方法。如果它是一个帖子,那么就叫做。您需要重写这些方法中的一个(或两个)来处理请求和响应
阅读HttpServlet的javadoc了解更多信息
普通的java文件只执行在main中调用的那些方法
“Java文件”不执行任何操作。JVM由java
命令行工具启动,执行main方法
但是servlet做什么呢?我想它可能会执行文件
servlet在servlet容器中运行,例如ApacheTomcat或Jetty。容器本身是通过一个main方法启动的,它在web.xml
文件中了解servlet类,并在请求到达时调用servlet的service()
方法
使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数,这是一种什么好方法
这正是servlet所做的(尽管HTTP请求的头由servlet容器解析并作为请求对象的一部分传递给servlet)。你到底想干什么
如果您没有运行servlet容器,那么使用servlet是没有意义的。HttpServlet已经定义了可以为不同类型的http请求实现的方法:
doGet()
doPost()
doDelete()
doPut()
等等
所有这些方法都有一个请求和响应参数
您可以读取请求的数据,调用所需的任何服务,然后使用参数中的httpServletResponse编写响应
您不必像在问题中那样定义自己的方法。对于任何感兴趣的人,这里有一个更新代码,它通过将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
当我问这个问题时,这就是我想要达到的目标 不要再担心servlet和输入流了,你到底想做什么?你只是想显示一个页面还是什么?是的,我正在使用ApacheTomcat。我真正想做的是有一个类来处理输入。然后创建一个类,该类接受前一个类生成的字符串。它对它进行填充,然后将其发送到第三个类,该类将字符串返回给客户机程序。与拥有一个能做所有事情的单一类相反。@Eric Banderhide:当然,你可以做所有这些。servlet代码可以调用所有类型的其他类。事实上,这是通常的情况。