我有一个从intelliJ运行的简单的tomcat服务器,我正在尝试配置一个servlet,该服务器将允许用户选择不同颜色的啤酒,但是一旦提交表单,我总是会收到找不到404资源的信息。我的代码有问题吗?还是inteliJ config问题?

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
    <servlet>
        <servlet-name>
            beerSelect
        </servlet-name>
        <servlet-class>
            com.example.web.controller.beerSelect
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>beerSelect</servlet-name>
        <url-pattern>/beerSelect.do(</url-pattern>
    </servlet-mapping>
</web-app>


form.html

<!DOCTYPE html>
<html>
<head>
    <title>Beverages</title>
    <link rel="stylesheet" type="text/css" href="/style/main.css">
</head>
<body>
<h1 class="title">Beer selection form</h1>
<form method="post" action="beerSelect.do">
    Select your beer type:
    <select name="color" size="1">
        <option value="light">Light</option>
        <option value="amber">Amber</option>
        <option value="mild">Mild</option>
        <option value="dark">Dark</option>
    </select>
    <input type="SUBMIT" value="Submit">
</form>
</body>
</html>


beerSelect.java

package com.example.web.controller;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
 * Created with IntelliJ IDEA.
 * User: Chris
 * Date: 18/10/13
 * Time: 10:42
 * To change this template use File | Settings | File Templates.
 */

public class beerSelect extends HttpServlet{
    PrintWriter responseWriter;
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
        response.setContentType("text/html");
        responseWriter = response.getWriter();
        responseWriter.print("<p>Beer Selection Advice<p>");
        responseWriter.print("<br>Beer Color:" + request.getParameter("color"));
    }
}

最佳答案

乍一看是否在web.xml中发现一个错误

 <url-pattern>/beerSelect.do(</url-pattern>
                            ↑


卸下(开口圆括号

编辑

由于您的ServletException方法仅处理doPost,您将收到未处理的IOException未来错误。

public void doPost(HttpServletRequest request, HttpServletResponse response)
                                                 throws IOException{


改成

public void doPost(HttpServletRequest request, HttpServletResponse response)
                                                 throws IOException, ServletException{




还将@Override注释添加到doPost方法中,请检查此answer

 @Override creates a compile-time check that a method is being overridden.
 This is very useful to make sure you do not have a silly signature issue
 when trying to override.


见下文

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
                                                 throws IOException, ServletException{

10-01 01:14