为什么我的servlet不运行?

时间:2014-06-16 19:50:52

标签: java xml java-ee servlets

这是我的HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="ISO-8859-1">
        <title>Beer Selection Page</title>
    </head>
    <body >
        <form method = "post"
            action = "SelectBeer.do">
            Select beer Characteristics<br/>
            Color:
            <select name="color" size="1">
                <option>light
                 <option>amber
                 <option>brown
                 <option>dark
            </select>
            <br/><br/>
            <center><input type="SUBMIT"></center> 
        </form>
    </body>
</html>

这是我的xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0">
    <display-name>Test2</display-name>
    <servlet>
        <servlet-name>Ch3 beer</servlet-name>
        <servlet-class>BeerSelect</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Ch3 beer</servlet-name>
        <url-pattern>/SelectBeer.do</url-pattern>
    </servlet-mapping>
</web-app>

在这里,是我的servlet:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

/**
 * Servlet implementation class BeerSelect
 */

 public class BeerSelect extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * Default constructor. 
 */
public BeerSelect() {
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws       ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("text.html");
    PrintWriter out = response.getWriter();
    out.println("Beer Selection Advice");
    String c= request.getParameter("color");
    out.println("Got beer color " + c);
}

}

当我在服务器上运行它时,响应是

HTTP状态404 - / Test2 /


输入状态报告

message / Test2 /

说明请求的资源不可用。

Test2
.....Java Resources
...................src
......................default package
.....................................BeerSelect.java
.....WebContent
...............META-INF
...............WEB-INF
......................lib
......................web.xml
...............Beer.html

此外,是否有人知道为什么返回的字符串&#34; c&#34;在servlet中是null ??

2 个答案:

答案 0 :(得分:0)

消息:请求的资源不可用。告诉您,您尝试通过URL /Test2/获取的资源(文件)不可用,即服务器不能给你。很可能它没有被映射。

在您的Web应用程序的上下文中 Test2您的servlet映射到:

/SelectBeer.do

这意味着,您的网络应用程序上下文之外的 您的访问网址应该是这样的:

http://server:port/Test2/SelectBeer.do

假设您的HTML文件位于应用程序上下文的 root 中,您应该能够像这样引用servlet:

<form method = "post" action = "SelectBeer.do"> ...

因为它相对映射到根,或使用绝对路径这样:

<form method = "post" action = "/Test2/SelectBeer.do"> ...

由于您似乎没有index.html(或web.xml中配置的任何欢迎文件),如果您尝试访问 webapp的根 {{ 1}}如果没有明确包含文件名,您将收到 404错误。要正确打开文件,您需要使用:

Test2/

答案 1 :(得分:0)

只需将网址格式更改为<url-pattern>/Test2/*</url-pattern>

即可

您创建另一个模式并请求不同的请求..您也可以使用通配符*。不

创建调用后,将在模式上搜索url模式。对于上面的示例,您需要将url模式放在请求中

localhost:8080/Test2/

这样的东西将与网址格式相匹配