【问题标题】:Servlet Error : Requested Resource not available [duplicate]Servlet 错误:请求的资源不可用 [重复]
【发布时间】:2015-05-13 15:01:29
【问题描述】:

我想手动部署和执行网络应用程序。

目录结构:

webapps > 简单程序(包含 Servlet 和 JSP 文件)> WEB_INF(包含 web.xml)> 类(包含类)

Servlet : ServletClassCalled

import java.io.IOException;
import javax.servlet.http.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.*;
import java.io.PrintWriter;
import java.util.*;

@WebServlet("/ServletClassCalled")
public class ServletClassCalled extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet (HttpServletRequest request,HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
        String username = request.getParameter("username");
        String chkValues[] = request.getParameterValues("chk1");
        pw.write("Success");
        pw.write(username);
        pw.write("Chk Val 1 "+chkValues[0]+" Chk Val 2 "+chkValues[1]);
    }
    public void doPost (HttpServletRequest request,HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        Enumeration headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
        String paramName = (String)headerNames.nextElement();
        out.print(paramName);
        String paramValue = request.getHeader(paramName);
        out.println(paramValue);
        }
    }
}

JSP : index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>Simple App</h1>
<form method="get" action="ServletClassCalled">
    User Name : <input type="text" name="username" /><br/>
    Hobbies: <input type="checkbox" name="chk1" value="Coding" /> Coding <input type="checkbox" name="chk1" value="Sleeping" /> Sleeping<br/>
    <input type="submit" name="submit" value="submit" />
</form>
<hr/>
<form method="post" action="ServletClassCalled">
    <input type="submit" name="submit" value="submit" />
</form>
</body>
</html>

部署描述符:web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<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"
  metadata-complete="true">

    <!-- Define servlets that are included in the example application -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
      <servlet-name>ServletClassCalled</servlet-name>
      <servlet-class>ServletClassCalled</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletClassCalled</servlet-name>
        <url-pattern>/ServletClassCalled</url-pattern>
    </servlet-mapping>
    <servlet>
      <servlet-name>GetHeader</servlet-name>
      <servlet-class>GetHeader</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetHeader</servlet-name>
        <url-pattern>/GetHeader</url-pattern>
    </servlet-mapping>
</web-app>

因为我在欢迎列表中列出了索引文件,所以它显示正确,但是当我尝试提交表单时它显示错误。

【问题讨论】:

  • 检查发布动作的 URL。
  • @LuiggiMendoza : localhost:8080/SimpleProg/ServletClassCalled 正在提交的表单上。我做错了吗?
  • 好的,那么请发布您收到的堆栈跟踪或其他错误消息。此外,如果您使用的是 Servlet 3.0,则无需两次声明 servlet:使用注释或在 web.xml 中以不同的名称声明它。
  • servlet类的包是什么?它的类文件位于 deloyed webapp 结构中的什么位置?为什么要使用 web.xml AND annotations 来定义和映射 servlet(可以完全删除 web.xml 文件)
  • @JBNizet :我已经在问题中给出了上面的目录结构。

标签: jsp servlets http-status-code-404


【解决方案1】:

我忘记在 web.xml 中关闭我的标签。现在它工作正常。

【讨论】:

    【解决方案2】:

    对于更新的 Servlet 版本 3.0 它提供了将使用包在内部映射 servlet 的功能

    • javax.servlet.annotation.WebServlet;

    还会生成 servlet 路径的自动生成代码

    • @WebServlet("/ServletClassCalled")

    因此,如果您使用的是 servlet 3.0,则无需在 web.xml 文件中编写 servlet 的映射

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2013-10-13
      • 2013-01-06
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多