Eclipse - Java问题找到控制器

时间:2015-04-24 10:19:32

标签: java eclipse jsp model-view-controller

我正在通过一本充满教程的法语JSP书籍学习JSP。我目前正在学习“MVC& Jsp”,基本上是DVD目录和购物车。当用户单击添加按钮时,控制器将dvds添加到购物车。 但是,似乎我的控制器没有被调用。我调用System.Out来检查它是否有效,并且我的控制台上没有弹出文本... 这是我的项目浏览器。

以下是我的目录和控制器的代码。

<%@page import="exoLivres.ShoppingCart"%>

<%@ page errorPage="../PagesErreur/Erreurpage.jsp" %>
<jsp:useBean id="cart" scope="session" class="exoLivres.ShoppingCart" />
<html>
    <head>
        <title>Catalogue DVD</title>
    </head>
    <body>
    <a href="U:/workspace/myfirstProject/WebContent/MVC/ShoppingCartMVC.jsp">Quantité actuelle : </a> <%=cart.getNumOfItems() %>
    <hr>
        <center><h3>Catalogue DVD</h3></center>
        <table border="1">
                <tr><th>Description</th><th>Prix</th></tr>
        <tr>
            <form action="ShopController" method="post">
<!--no error, but nothing happening-->
                <td>Frozen</td>
                <td>$19.95</td>
                <td><input type="submit" name="Submit" value="Ajouter"></td>
                <input type="hidden" name="id" value="1">
                <input type="hidden" name="desc" value="Frozen">
                <input type="hidden" name="price" value="19.95">
                <input type="hidden" name="command" value="add">
            </form>
        </tr>
        <tr>
            <form action="ShopController" method="post">
<!--no error, but nothing happening-->
                <td>XMen Origins</td>
                <td>$19.95</td>
                <td><input type="submit" name="Submit" value="Ajouter"></td>
                <input type="hidden" name="id" value="1">
                <input type="hidden" name="desc" value="XMen">
                <input type="hidden" name="price" value="19.95">
                <input type="hidden" name="command" value="add">
        </form>
        </tr>
        <tr>
            <form action="ShopController" method="post">
                <td>Avengers</td>
                <td>$17.95</td>
                <td><input type="submit" name="Submit" value="Ajouter"></td>
                <input type="hidden" name="id" value="1">
                <input type="hidden" name="desc" value="Avengers">
                <input type="hidden" name="price" value="17.95">
                <input type="hidden" name="command" value="add">
            </form>
        </tr>
    </table>
</body>
</html>

和我的控制器

package exoLivres;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import exoLivres.ShoppingCart;


public class ShopController extends HttpServlet {

    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        System.out.println("Contrôleur démarré");
        String command= request.getParameter("command");
        HttpSession session = request.getSession();
        ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");

        if(command.equals("add")){
            String id = request.getParameter("id");
            if (id!=null){
                System.out.println(id);
                String desc = request.getParameter("desc");
                Float price = new Float(request.getParameter("price"));
                cart.addItem(id, desc, price.floatValue(), 1);
                System.out.println(id + desc + price);
            }
        }
        response.sendRedirect("U:/workspace/myfirstProject/WebContent/MVC/Catalogue.jsp");
    }
    public String getServletInfo(){
        return "ShopController Information";
    }

}

我想问题来自我对Controller的引用,但我想不出正确的引用。任何帮助欢迎=)

EDIT 好的,所以这里是我的web.xmm [我也对上面的代码做了修改,并删除了我在方法结束时写的每个“e”(而不是方法)]              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”       版本= “3.0” &GT;

  <servlet>
    <servlet-name>MyfirstServlet</servlet-name>
    <servlet-class>myfirstProject.MyfirstServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyfirstServlet</servlet-name>
    <url-pattern>/first</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Books</servlet-name>
    <servlet-class>myfirstProject.BookServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Books</servlet-name>
    <url-pattern>/books</url-pattern>
</servlet-mapping>

    <servlet>
    <servlet-name>ShopController</servlet-name>
    <servlet-class>exoLivres.ShopController</servlet-class>
</servlet>

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



</web-app>

3 个答案:

答案 0 :(得分:0)

我认为问题在于您将操作设置为表单的方式。 行动= “U:/工作区/ myfirstProjet / SRC / ShopController” 我认为它应该是action =“Name_Of_CLass”而不是该类的路径。

答案 1 :(得分:0)

另请注意,sendRedirect接收的是url位置,而不是项目中jsp的路径。 (https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html#sendRedirect%28java.lang.String%29

所以在你的servlet(控制器)和你的jsp中,重命名这个&#34; U:/ workspace / myfirstProjet / build / classes / exoLivres / ShopController&#34;这样的事情:&#34; / myfirstProjet / &#34;。

你在哪里&#34; U:/workspace/myfirstProject/WebContent/MVC/Catalogue.jsp" 重命名为&#34; / myfirstProjet / &#34;。

答案 2 :(得分:0)

您必须在web.xml中使用控制器映射

您尚未在此

中指定ShopController控制器的路径
 <servlet>
    <servlet-name>MyfirstServlet</servlet-name>
    <servlet-class>myfirstProject.MyfirstServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyfirstServlet</servlet-name>
    <url-pattern>/first</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Books</servlet-name>
    <servlet-class>myfirstProject.BookServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Books</servlet-name>
    <url-pattern>/books</url-pattern>
</servlet-mapping>

应该是这样的

<servlet>
    <servlet-name>ShopController</servlet-name>
    <servlet-class>packagename.ShopController</servlet-class>
</servlet>

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

并改变你的jsp表单的动作如下..

 <form action="ShopController" method="post">
<!--no error, but nothing happening-->
                <td>XMen Origins</td>
                <td>$19.95</td>
                <td><input type="submit" name="Submit" value="Ajouter"></td>
                <input type="hidden" name="id" value="1">
                <input type="hidden" name="desc" value="XMen">
                <input type="hidden" name="price" value="19.95">
                <input type="hidden" name="command" value="add">
        </form>

为了防止不支持get方法,请更改此控制器

public class ShopController extends HttpServlet {

    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }


 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

processRequest(request,response)
}

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

processRequest(request,response)
}


 public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

 System.out.println("Contrôleur démarré");
        String command= request.getParameter("command");
        HttpSession session = request.getSession();
        ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");

        if(command.equals("add")){
            String id = request.getParameter("id");
            if (id!=null){
                System.out.println(id);
                String desc = request.getParameter("desc");
                Float price = new Float(request.getParameter("price"));
                cart.addItem(id, desc, price.floatValue(), 1);
                System.out.println(id + desc + price);
            }
        }
        response.sendRedirect("U:/workspace/myfirstProject/WebContent/MVC/Catalogue.jsp");

}

}