【问题标题】:Calling Java function inside doPost of servlet?在servlet的doPost中调用Java函数?
【发布时间】:2012-07-03 01:05:04
【问题描述】:

我想处理一个 HTTP 请求并对其进行一些处理。我可以执行以下操作吗?

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/soap+xml;charset=utf-8");
    char[] cbuf = new char[10000];

    PrintWriter out = response.getWriter();

    InputStreamReader in = new InputStreamReader(request.getInputStream());

    in.read(cbuf,0,10000);

    int req_len = request.getContentLength(); 

    String inputLine = new String(cbuf);

    Spoof sp = new Spoof();

    String xml_response = sp.spoof_second(inputLine.substring(0, req_len), request.getParameter("mode"));    

    out.println(xml_response);
}

我得到一个空响应,所以我想知道是否有一种方法可以调用函数 spoof_second()。

我的 web.xml 看起来像:

<?xml version="1.0"?>
<web-app
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
 version="2.4">
 <servlet>
    <servlet-name>home</servlet-name>
    <servlet-class>website.web.HomeServlet</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>home</servlet-name>
    <url-pattern>/home</url-pattern>
 </servlet-mapping>

我将请求发送到 [http://localhost:4321/website/home?mode=record] 所以模式是正确的并且 inputLine 也是正确的,因为我通过打印它们进行了检查。我不确定的是如何在 Eclipse 中构建整个项目,因为我认为没有进行函数调用。我没有收到任何异常,我收到了一个 HTTP 200 OK 响应,内容为空。

【问题讨论】:

  • 可以调用doPost里面的方法;你还有其他问题。我敢打赌 inputLine 是空的。
  • doPost 是一个方法,在另一个方法中调用的方法在 Java 中是完全有效的,所以您的问题应该是其他问题,也许如果您发布异常我们可以提供更多帮助
  • System.out xml_response。我认为这是作为 Null 值返回的。
  • 没有例外,当我执行 out.println(inputLine) 时它是正确的。我在 Tomcat 上部署代码,所以我不确定如何在 Eclipse 中构建项目,以及是否必须将类文件保存在任何文件夹中。我只是在 Tomcat 管理器中重新加载部署。
  • 能否把这个方法的代码贴出来sp.spoof_second

标签: java http servlets


【解决方案1】:

当您使用像http://localhost:4321/website/home?mode=record 这样的请求时,这将调用doGet。对于 do Post,您创建 HTML 表单并设置 action="home"method="post" 并添加 submit 按钮。在提交时,它将提交表单中的所有数据。

【讨论】:

  • 这如何回答 OP 的问题?
  • @USarora 这不是真的,相同的请求被传递给函数 doGet 和 doPost,你也可以在 doPost 中使用相同的 request.getParameter("mode")。
猜你喜欢
  • 2013-05-26
  • 2014-05-23
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2019-03-04
  • 2011-01-21
相关资源
最近更新 更多