【问题标题】:Java Servlet 404 issuesJava Servlet 404 问题
【发布时间】:2013-07-01 23:20:58
【问题描述】:

我正在通过对 servlet 进行一些调用来进行简单的程序重定向。但是,由于某种原因,每次尝试在此特定项目构建中构建代码时,我都会不断收到 404 错误。

值得注意的是,我正在 Eclipse 中构建这个项目并使用 Apache Tomcat。

这是我的编码......

HTML 优先:

为了避免一些麻烦,这是出现问题的特定 sn-p。我与 MySQL 数据库的连接以及数据库读取都运行良好。

<form action="objectServer" method="get">
    <select name="choice">
        <% while (rs.next()){ %>
        <option value="<%=rs.getString(2) %>"><%=rs.getString(2) %></option>
        <% }
            MysqlConnection.close(connect);
        %>
    </select>
    <br />
    <input type="submit" value="View the Descrition!" />
</form>

Java 代码:

第一个是一个简单的 java 类,它验证一个项目是否已被选中并帮助重定向。

package com.program.service;

public class Service {
    public boolean redirect(String selected){
        if( (selected == null) || (selected == "") ){
            return false;
        } else {
            return true;
        }
    }
}

最后是 servlet 本身。

package com.program.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wines.service.Service;


@WebServlet("/objectServer")
public class InfoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String selected = request.getParameter("choice");
        Service service = new Service();
        boolean redirector = service.redirect(selected);
        if(redirector){
            response.sendRedirect("next_page.jsp");
        } else {
            response.sendRedirect("this_page.jsp");
        }
    }
}

正如人们所看到的,这是一个非常简单的程序,应该重定向到下一页,但由于某种原因,我错过了一些我现在看不到的东西。我不知道这是否是我的编码、我的服务器或其他我可能错过的问题。请注意,web.xml 尚未在此特定应用程序中编程。

【问题讨论】:

  • 没有web.xml,你怎么能在tomcat中部署呢? web.xml 将告诉容器需要做什么..
  • 获取错误页面的 URL 是什么?如果是这样,您将 Url 与 servlet 映射到哪里?
  • 看起来您的 servlet 和您的一个页面不在同一个路径位置。如果您发布项目文件夹结构的示例,那就太好了。

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


【解决方案1】:

根据您的设置,您的 jsp 很可能只能通过 Servlet 访问。在这种情况下,您需要使用“转发”而不是“重定向”。请理解“转发”和“重定向”之间的区别。这是一个很好的阅读:Forward versus redirect

示例转发:

RequestDispatcher dispatcher = aRequest.getRequestDispatcher("this_page.jsp");
dispatcher.forward(aRequest, aResponse);

重定向示例:

response.sendRedirect(absoluteOrRelativeURL); // e.g absoluteOrRelativeURL= "objectServer"

【讨论】:

  • 你不能重定向到.jsp,因为jsp不是直接访问的。你错了,如果JSP在web应用程序的主文件夹中可以做到这一点在 WEB-INF 中,它将在next_page.jsp URL 上调用 GET 请求。更换每次转发的重定向可以解决问题。顺便说一句,当你说如果你打算重定向,那么你必须重定向到一个Servlet而不是jsp你可能打算这样做以便通过@987654325中的servlet预处理页面@ 方法。请扩展您对这些主题的回答。
【解决方案2】:

如果您的 JSP 页面位于 WEB-INF 下,则无法重定向到 JSP 页面。这是因为 WEB-INF 下的内容无法直接访问。因此,您必须转发对该资源的请求。这可以通过如下修改您的方法来完成。 (我假设您的 jsp 页面直接位于 WEB-INF 目录下)

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String selected = request.getParameter("choice");
        Service service = new Service();
        boolean redirector = service.redirect(selected);
        if(redirector){
          request.getRequestDispatcher("WEB-INF/next_page.jsp").forward(request,response);
        } else {
          request.getRequestDispatcher("WEB-INF/this_page.jsp").forward(request,response);
        }
    }

此外,如果您希望为特定资源创建重定向,请确保为 servlet 映射执行重定向。您不能对位于 WEB-INF 目录下的特定资源进行重定向。

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 2015-03-24
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2014-05-10
    相关资源
    最近更新 更多