问题:我的带有web.xml的index.jsp继续进入HTTP 404和500
我正在使用Tomcat6。
这是来自index.jsp:
<legend>Registration</legend>
<form action="./register"> <%-- Address from web.xml --%>
First name: <input type="text" name="firstName"><br>
Last name: <input type="text" name="lastName"><br>
<input type="submit" value="Register">
</form>
当我在注册时:
我点击名字和姓氏,我进入404,消息:
HTTP状态404 - Servlet RegistrationServlet不可用
类型状态报告
消息 Servlet RegistrationServlet不可用
description 请求的资源(Servlet RegistrationServlet不可用)不可用。
Apache Tomcat / 6.0.35
您认为导致该错误的原因是什么?
班级RegistrationServlet
位于RegistrationServlet.java
src/coreservlets/
下
我检查了web.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/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>ShowBalance</servlet-name>
<servlet-class>coreservlets.ShowBalance</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowBalance</servlet-name>
<url-pattern>/show-balance</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RandomNumberServlet</servlet-name>
<servlet-class>coreservlets.RandomNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomNumberServlet</servlet-name>
<url-pattern>/random-number</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegistrationServlet</servlet-name>
<servlet-class>coreservlets.RegistrationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistrationServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PrimeServlet</servlet-name>
<servlet-class>coreservlets.PrimeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PrimeServlet</servlet-name>
<url-pattern>/prime</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
过去两天我一直在努力解决这个小罪魁祸首,但没有任何帮助,我会非常感激。
修改
根据要求,这里是RegistrationServlet
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RegistrationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
synchronized (session) {
NameBean nameBean = (NameBean) session.getAttribute("name");
if (nameBean == null) {
nameBean = new NameBean();
session.setAttribute("name", nameBean);
}
nameBean.setFirstName(request.getParameter("firstName"));
nameBean.setLastName(request.getParameter("lastName"));
String address = "/WEB-INF/mvc-sharing/ShowName.jsp";
RequestDispatcher dispatcher = request
.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
}
此处还有项目树:
答案 0 :(得分:5)
您的网址完全没问题。如果URL错误,您将收到如下消息:
请求的资源
register
不可用
但是你得到了
Servlet
RegistrationServlet
不可用
这意味着找到了servlet,但由于其构造和初始化因异常而失败,因此无法执行。在Tomcat的封面下,基本上以下步骤之一失败了:
Servlet servlet = new RegistrationServlet();
servlet.init(servletConfig);
servlet.init();
您需要读取此异常的服务器日志,然后相应地修复代码。
虽然您的网址完全正常,但在上下文中更改容易出错。您更愿意指定域相对URL:
<form action="${pageContext.request.contextPath}/register">
答案 1 :(得分:1)
错误......这很明显,但是/ WEB-INF / classes / coreservlets /中的RegistrationServlet.class是什么?你编译了吗? (使用Tomcat,您是否需要明确编译?如果不这样做,那就太令人惊讶了。)
答案 2 :(得分:0)
注册路径可能不考虑上下文路径。解决这个问题的一个好方法是使用jstl核心url标记 -
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
...
<c:url value="/register" var="url">
<form action="${url}">
这将确保将您的上下文路径添加到网址。
答案 3 :(得分:0)
如果在实例化servlet时发生任何错误,我们将收到此类错误,
即使WEB-INF\lib
文件夹中缺少库。确保所有库都放在WEB-INF\lib
。