1

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

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>

表单.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"));
    }
}
4

1 回答 1

3

乍一看,如果发现一个错误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{

还要在doPost方法中添加 @Override 注释检查这个答案

 @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{
于 2013-10-18T12:12:09.817 回答