Java Servlet 404问题

时间:2013-07-04 04:48:07

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

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

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

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

HTML优先:

为了挽救一些恐惧,这是问题出现的特定片段。我与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尚未在此特定应用程序中编程。

2 个答案:

答案 0 :(得分:0)

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

前进示例:

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

重定向示例:

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

答案 1 :(得分:0)

如果您的JSP页面位于WEB-INF下,则无法重定向到JSP页面。这是因为WEB-INFare下的内容受限于直接访问。因此,您必须转发该资源的请求。这可以通过修改您的方法来完成,如下所示。 (我假设您的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目录下。