10
votes

I have a small application (HTML form, servlet as controller and jsp files) and i try to figure out why i cannot to forward the request from servlet to jsp files.

the problem is after submit from html, showed up "HTTP Status 404"

Application flow:

  1. submit from html.
  2. controller get the name from html.
  3. controller supposed to move the request to jsp files.

thanks!

project hierarchy: http://s23.postimg.org/kgt7r7lwb/Capture.jpg

main.html:

<html>
<title>Coupons categories</title>
<body>
  <h1 align="center">Coupons categories</h1>
  <form method="GET" action="Controller">
    Select category 
    Type:
    <select name="type" size=1>
      <option value="restaurants">Restaurants</option>
      <option value="electrics">Electrics</option>
      <option value="hotels">Hotels</option>
    </select>
    <br><br>
      <input type="Submit">
   </form>
</body>
<html>

controller.java:

   @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //PrintWriter out = response.getWriter();
        //out.write(request.getPathInfo());

        String path = request.getParameter("type");
        if(path.equals("electrics"))
        {
            request.setAttribute("timestamp", new Date());
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/view/electrics.jsp");
            dispatcher.forward(request, response);
        }
        else if(path.equals("hotels"))
        {
            request.setAttribute("timestamp", new Date());
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/view/hotels.jsp");
            dispatcher.forward(request, response);          
        }
        else if(path.equals("restaurants"))
        {
            request.setAttribute("timestamp", new Date());
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/view/restaurants.jsp");
            dispatcher.forward(request, response);          
        }
    }

electrics.jsp:

<%@ page language="java" contentType="text/html; charset=windows-1255"
    pageEncoding="windows-1255"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
<title>Insert title here</title>
</head>
<body>
    <h2>products list...</h2>
    <%
    Object ob = request.getAttribute("timestamp");
    out.println(ob);
    %>
</body>
</html>

web.xml:

    <description>
      CouponsServer
    </description>
    <display-name>Controller for CouponsServer</display-name>

    <servlet>
      <servlet-name>Controller</servlet-name>
      <servlet-class>uses.server.Controller</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>/Controller</url-pattern>
    </servlet-mapping>


</web-app>

update: Probably the problem is in the controller.java. When i try the following code, i got HTTP Status 500. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter out = response.getWriter();
        out.write(request.getPathInfo());
    }
3
If the path parameter on getRequestDispatcher is absolute it is still relative to the servlet context (deploy app name). Is the '/view' directory a first tier directory of the application? You can also use a relative path with getRequestDispatcher which is relative to the Servlets current path.David H. Bennett
@user1257931 /view folder in WebContet. you can see the hierarchy: s23.postimg.org/kgt7r7lwb/Capture.jpgItay Avraham
Does problem appear when you move main.html from view to WebContent?Pshemo
@Pshemo yes, still appear.Itay Avraham
@user1257931 please see my edit in the question above.Itay Avraham

3 Answers

10
votes

Try this

 request.getRequestDispatcher("/view/electrics.jsp").forward(req,res);
0
votes

Your code is running fine in my local with the web.xml defined at the end with welcome list or even without it. Try your code running with the dynamic Web content version 2.5 where the web.xml is generated automatically.

<?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/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <description>
      CouponsServer
    </description>
  <display-name>Controller for CouponsServer</display-name>


  <servlet>

    <display-name>Controller</display-name>
    <servlet-name>Controller</servlet-name>
    <servlet-class>uses.server.Controller</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/Controller</url-pattern>
  </servlet-mapping>
</web-app>
0
votes

web.xml

<servlet>
    <servlet-name>Controller</servlet-name>
    <servlet-class>uses.server.Controller</servlet-class>
</servlet>

<servlet-mapping>
     <servlet-name>Controller</servlet-name>
     <url-pattern>/Controller</url-pattern>
</servlet-mapping>

<welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
</welcome-file-list>