我有一个从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{