我正在通过调用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尚未在此特定应用程序中编程。
答案 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目录下。