【问题标题】:Servlet mapping is not workingServlet 映射不起作用
【发布时间】:2013-04-26 14:30:27
【问题描述】:

我使用 JSP 和 Servlet 创建了一个简单的程序。毕竟,我已经在 web.xml 中设置并映射了我的 servlet,如下所示。但我总是得到空白页。

<servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>exampleServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/exampleServlet</url-pattern>
</servlet-mapping>

我的 JSP 文件如下所示。

<html>
    <head></head>
    <body>
    <form action ="exampleServlet" method="POST" enctype="multipart/form-data">
        <table width="500" style="margin-top:100px;">
            <tr>
                <td>Subject</td>
                <td><input type="text" name="subj" id="subj"/></td>
            </tr>
            <tr>
                <td>Upload File</td>
                <td><input type="file" name="upload_file" id="upload_file"/></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" name="submit" value="Upload" /></td>
            </tr>
        </table>
    </form>
    </body>
</html>

任何 exampleServlet 都是,

import java.io.File;
import java.util.List;

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.PrintWriter;

public class exampleServlet extends HttpServlet {
    public void init() {

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String sub = request.getParameter("subj");
        System.out.println(sub);
    }
}

我的文件结构是,

JSP file  --> tomcat/webapps/application/index.jsp

Servlet   --> tomcat/webapps/application/WEB-INF/classes/exampleServlet.class

我哪里出错了?我犯了什么错误?你能推荐我吗?

编辑:我将表单元素发布到该 servlet。到那时它会传递这样的 URL http://localhost:8080/application/exampleServlet

【问题讨论】:

  • 你是如何访问它的,什么时候给出空白页?
  • 如果您的 doPost 方法除了打印之外什么都不做,您还期望得到什么?
  • @NilsH 我已经用所需的详细信息编辑了我的帖子。请看
  • @PauliusMatulionis 我想获取要上传的所选文件的文件路径。但最初我想测试流程是否顺利。这就是为什么我要打印价值。但它没有进入函数内部。
  • 你使用的是哪个tomcat容器?

标签: java jsp servlets web.xml


【解决方案1】:

您的应用程序一切正常。你得到空白页,因为你的 doPost 方法没有做任何事情。它仅将值打印到控制台输出。

将其更改为例如:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter writer = response.getWriter();
    writer.print("something");
}

然后看看something是否出现在浏览器中。

【讨论】:

  • 我改成这样了。但它不起作用。它再次显示空白页
  • 修改后是否重启过Tomcat?
  • 天啊。我疯了。我一直在尝试不重新启动Tomcat。现在它正在工作。谢谢大佬。
  • 没问题。请记住,在您进行任何更改后,您必须重新启动 servlet 容器。如果你只是继续重新部署你的应用程序,它最终会耗尽内存。
【解决方案2】:

尝试使用与url-pattern. 不同的servlet-clas 名称

类似跟随或反之亦然

  <servlet>
            <servlet-name>example</servlet-name>
            <servlet-class>exampleServlet</servlet-class>
    </servlet>
    <servlet-mapping>
            <servlet-name>example</servlet-name>
            <url-pattern>/egServlet</url-pattern>
    </servlet-mapping>

修改后重启服务器

【讨论】:

    【解决方案3】:

    如果在您提交表单时发生“错误”,那是因为您的 servlet 没有呈现任何输出,也没有返回任何响应。在您的 doPost 中,您应该将响应写回浏览器,或者将请求交给执行此操作的某事。

    public void doPost(HttpServletRequest req, HttpServletResponse res) {
        PrintWriter out = res.getWriter();
        out.println("<html><body>Hello world</body></html>");
    }
    

    至少会打印一些东西,虽然没什么用处。

    “正确”的做法是重定向或包含一个进行渲染的视图。

    【讨论】:

    • 设置断点或向控制台写入一些内容,看看您的 servlet 是否被调用。
    【解决方案4】:

    您的请求可能与 URL 模式不匹配。试试这样:

    <url-pattern>/exampleServlet/*</url-pattern>
    

    【讨论】:

    • 已编辑.. 这个应该去.. /application/ 应该在 webcontext 路径中。
    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2012-04-17
    • 1970-01-01
    • 2014-01-18
    • 2015-01-14
    • 2013-03-16
    相关资源
    最近更新 更多