Контроллер Spring MVC работает, но не создает указанный URL-адрес ответа ,он создает url-адрес из строки сопоставления запроса

Я изучаю весенние веб-приложения на основе MVC. Поэтому я создал проект весной mvc и выбрал Eclipse IDE.Сервер Apache tomcat 8 и jre1.8 версия пакета весны 4.2.5. В моем проекте я создал логин, и это сработало хорошо после входа в систему, я перенаправил страницу на другой jsp под названием ‘branchinsert.jsp’, который помещен в другую папку (login.jsp и branchinsert.jsp из разных папок). В Бранчинсерте.JSP Spring MVC Controller работает, но не создает указанный URL-адрес ответа ,он создает url-адрес из строки отображения запроса, что означает, если я даю шаблон, как ниже упомянутый,

@RequestMapping(value="/branchsubmitinsert.travel", method=RequestMethod.POST)
public ModelAndView submitBranchInsert(@ModelAttribute BranchModel branchModel){

    ModelAndView modelAndView = new ModelAndView("/branch/branchinsert");

    return modelAndView;

}

отображение ошибки 404 для url / Имяпроекта / модулей / филиала / branchsubmitinsert.JSP-страница

На самом деле url, который я ожидал, является /branch/branchinsert.jsp (это то, что обычно происходит), но здесь создан /branch/branchsubmitinsert.JSP url. почему????

это мой код

сеть.XML

<web-app  
   
  xsi_schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" 
 version="3.0">
<display-name>CalicutTravels</display-name>
   <servlet>
     <servlet-name>spring-dispatcher</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
  </servlet>
<servlet-mapping>
  <servlet-name>spring-dispatcher</servlet-name>
   <url-pattern>/</url-pattern>
</servlet-mapping>
<listener><listener-class>
    org.springframework.web.context.ContextLoaderListener
</listener-class>

ApplicationContext.XML

<?xml version="1.0" encoding="UTF-8"?>

 <beans 
       
       
       
       
       
       xsi_schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

      <context:component-scan base-package="com.classes.controller">
          <context:exclude-filter type="annotation"  
                expression="org.springframework.stereotype.Controller"/>
      </context:component-scan>

  </beans>

пружина-диспетчер-сервлет.XML

 <?xml version="1.0" encoding="UTF-8"?>
    <beans 
       
       
       
       
       
       xsi_schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  <context:annotation-config />
  <context:component-scan base-package="com.classes.controller">
  </context:component-scan>
  <mvc:annotation-driven/>

   <mvc:resources mapping="/resources/**" location="/resources/" />

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/modules/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

    <!-- declare beans -->

      <bean id="userDaoImplementation" 
       class="com.classes.dao.login.UserDaoImplementation" />
      <bean id="userServiceImplementation"

      class="com.classes.service.login.UserServiceImplementation" />

   <!-- declare datasource bean "jdbc:postgresql://hostname:port
   /dbname","username", "password");-->
  <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="org.postgresql.Driver" />
   <property name="url" value="jdbc:postgresql://localhost:5432
   /db_enterpricer_travel" />
   <property name="username" value="vishnu" />
   <property name="password" value="root" />
  </bean>

  </beans>

branchinsert.поле формы jsp

 <form action='branchsubmitinsert.travel' id='brach_submit' method='post' >
            <fieldset class="well the-fieldset">
                <legend class="the-legend">  INSERT </legend>

                    <table>
                        <tr>
                            <th> Branch Name :</th>
                            <td> <input type="text" name='branchName' id='branchName' /></td>
                        </tr>
                        <tr>
                          <td colspan="2" align="right"><input type="button" class="btn btn-default" value='INSERT' onclick='return validateBranchInsert()'/></td>
                        </tr>
                    </table>


             </fieldset>
        </form>

Класс контроллера BranchController.Ява

 package com.classes.controller.branch;

 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.portlet.ModelAndView;

 import com.classes.service.branch.BranchModel;


 /**
 * @author vishnu
 *
 */

 @Controller
 @RequestMapping("/branch")
 public class BranchController {

 @RequestMapping(value="/branchinsert.travel", method=RequestMethod.GET)
 public ModelAndView getBranchInsert(){

    ModelAndView modelAndView = new ModelAndView("/branch/branchinsert");
    return modelAndView;

 }

 @RequestMapping(value="/branchupdate.travel", method=RequestMethod.GET)
 public ModelAndView getBranchUpdate(){

    ModelAndView modelAndView = new ModelAndView("/branch/branchupdate");
    return modelAndView;

 }

 @RequestMapping(value="/branchshow.travel", method=RequestMethod.GET)
 public ModelAndView getBranchShow(){

    ModelAndView modelAndView = new ModelAndView("/branch/branchshow");
    return modelAndView;

 }

 @RequestMapping(value="/branchdelete.travel", method=RequestMethod.GET)
 public ModelAndView getBranchDelete(){

    ModelAndView modelAndView = new ModelAndView("/branch/branchdelete");
    return modelAndView;

 }

@RequestMapping(value="/branchsubmitinsert.travel",
method=RequestMethod.POST)
public ModelAndView submitBranchInsert(@ModelAttribute BranchModel 
branchModel){

    ModelAndView modelAndView = new ModelAndView("/branch/branchinsert");
    modelAndView.addObject("branch",branchModel);
    return modelAndView;

}

}

2 ответа

  1. Поскольку вы упомянули папку modules в префиксе viewResolver, она работает так..

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/modules/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    

    Это означает, что return "branch/branchInsert"найдет jsp in /modules/branch/branchInsert.jsp.

    Если вы используете только строку для возврата, это просто путь из jsp, куда вы отправляете requset.Так viewResolverчто для этого добавим префикс папки.

    Но если вы используете ModelAndViewviewResolver добавит префикс и суффикс.

  2. Я изменил возвращаемый тип метода submitBranchInsert в виде строки следующим образом

     @RequestMapping(value="/branchsubmitinsert.travel", method=RequestMethod.POST)
    public String submitBranchInsert(ModelMap model,@ModelAttribute BranchModel branchModel){
    
        //ModelAndView modelAndView = new ModelAndView("/branch/branchinsert");
        //modelAndView.addObject("branch",branchModel);
        //return modelAndView;
        model.addAttribute("branch", branchModel);
        return "/branch/branchinsert";
    
    }
    

    теперь его хорошо, но почему я не могу использовать ModelAndView здесь вместо модели в строке ,
    может быть, мой звук тупой для экспертов весной MVC.
    Я просто хочу знать, когда следует использовать ModelAndView вместо Model in String?
    Я не хочу задавать этот вопрос отдельно, поэтому я спрашиваю это с моим ответом.
    кто-нибудь может мне помочь?