0

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

值得注意的是,我正在 Eclipse 中构建这个项目并且正在使用 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 尚未在此特定应用程序中进行编程。

4

2 回答 2

0

如果您的 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 目录下的特定资源进行重定向。

于 2013-07-04T06:45:00.640 回答
0

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

转发示例:

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

重定向示例:

response.sendRedirect(absoluteOrRelativeURL); // e.g absoluteOrRelativeURL= "objectServer"
于 2013-07-04T05:24:52.113 回答