2015-11-10 5 views
0

Мне нужно добавить несколько контроллеров в мой проект Spring MVC, который имеет только один прямо сейчас. В моем текущем проекте есть только один SpringDispatcher в web.xml и он отображает / на '/' контроллеров. @RequestMapping (value = "/") пусковой контроллер. Поскольку все находится в одном web.xml, и нет других файлов xml, которые выполняют любое сопоставление диспетчеров, не следует ли мне просто добавлять новый файл / с другим шаблоном контроллера в web.xml? Ниже приведены web.xml и один рабочий контроллер.Как добавить несколько Spring MVC-контроллеров в мой проект maven

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
<display-name>SpringMvcJdbcTemplate</display-name> 
<context-param> 
    <param-name>contextClass</param-name> 
    <param-value> 
     org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
    </param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>SpringDispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextClass</param-name> 
     <param-value> 
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>net.codejava.spring</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SpringDispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 
</web-app> 

HomeController.java

package net.codejava.spring.controller; 

import java.io.IOException; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 

import net.codejava.spring.dao.ContactDAO; 
import net.codejava.spring.dao.ContactDAODS; 
import net.codejava.spring.model.Contact; 

import org.springframework.beans.factory.annotation.Autowired; 
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.servlet.ModelAndView; 

/** 
* This controller routes accesses to the application to the appropriate 
* hanlder methods. 
* @author www.codejava.net 
* 
*/ 
@Controller 
public class HomeController { 

@Autowired 
private ContactDAO contactDAO; 

@Autowired 
private ContactDAODS contactDAODS; 

@RequestMapping(value = "/") 
public ModelAndView login() { 

    Contact contact = new Contact(); 
    ModelAndView model = new ModelAndView("login"); 
    model.addObject("contact", contact); 

    return model; 
} 

@RequestMapping(value = "/loginContact", method = RequestMethod.POST) 
public ModelAndView loginContact(@ModelAttribute Contact loginContact) { 

    ModelAndView model; 

    Contact contact = contactDAO.login(loginContact); 

    if(contact != null) 
    { 
     model = new ModelAndView("menu"); 

     return model; 

    } 
    else 
    { 
     Map<String, String> message = new HashMap<String, String>(); 
     message.put("message", "Login password error"); 
     //Message message = new Message(); 
     //message.MessageText = "Login Error"; 
     model = new ModelAndView("loginError"); 
     model.addObject("message", message); 
     return model; 

    } 
} 

@RequestMapping(value = "/menuContact", method = RequestMethod.GET) 
public ModelAndView menu(ModelAndView model){ 
    model.setViewName("menu"); 

    return model; 
} 

@RequestMapping(value = "/listContact", method = RequestMethod.GET) 
public ModelAndView listContact(ModelAndView model) throws IOException{ 
    List<Contact> listContact = contactDAO.list(); 
    model.addObject("listContact", listContact); 
    model.setViewName("home"); 

    return model; 
} 

@RequestMapping(value = "/newContact", method = RequestMethod.GET) 
public ModelAndView newContact(ModelAndView model) { 
    Contact newContact = new Contact(); 
    model.addObject("contact", newContact); 
    model.setViewName("ContactForm"); 
    return model; 
} 

@RequestMapping(value = "/saveContact", method = RequestMethod.POST) 
public ModelAndView saveContact(@ModelAttribute Contact contact) { 
    contactDAO.saveOrUpdate(contact);  
    return new ModelAndView("redirect:/"); 
} 

@RequestMapping(value = "/deleteContact", method = RequestMethod.GET) 
public ModelAndView deleteContact(HttpServletRequest request) { 
    int contactId = Integer.parseInt(request.getParameter("id")); 
    contactDAO.delete(contactId); 
    return new ModelAndView("redirect:/"); 
} 

@RequestMapping(value = "/editContact", method = RequestMethod.GET) 
public ModelAndView editContact(HttpServletRequest request) { 
    int contactId = Integer.parseInt(request.getParameter("id")); 
    Contact contact = contactDAO.get(contactId); 
    ModelAndView model = new ModelAndView("ContactForm"); 
    model.addObject("contact", contact); 

    return model; 
} 
@RequestMapping(value="/showContact") 
public ModelAndView getContact(ModelAndView model) throws IOException{ 

    Contact contact = contactDAODS.get((Integer)25); 
    model.addObject("contact", contact); 
    model.setViewName("ContactSP"); 

    return model; 
} 
} 

ответ

0

Прежде всего, это отображение должно работать только для корня приложения. Если вы хотите любой путь под корнем приложения, используйте /*

Теперь, в вашем случае диспетчер весны будет вызываться только в том случае, если вы откроете браузер, чтобы указать на корень веб-приложения без указания пути, который, как я могу догадаться, не то, что вы хотите. Таким образом, используйте/* для пересылки всех запросов диспетчеру весны и использования любого сопоставления запросов в ваших контроллерах.

+0

Я не уверен, что понимаю. Если у меня несколько контроллеров, как мне получить один контроллер для вызова запроса на другом контроллере? Кроме того, если есть несколько контроллеров, как я могу указать контроллер запуска и запрос на запуск? –

+0

Например, если ваше контекстное имя вашего приложения является «Holdorf», поэтому, используя шаблон URL «/», весенний диспетчер будет получать запросы только в том случае, если вы набрали «http (s): // domain_name/Holdorf /», но если вы набрали « http (s): // domain_name/Holdorf/XXX "диспетчер весны не возьмется за контроль. Поэтому вы должны использовать «/ *» для пересылки всех запросов через весенний диспетчер. Теперь у вас может быть столько контроллеров, которые вам нужны, с разными конкретными сопоставлениями. Но вы не можете иметь два разных контроллера с одинаковыми сопоставлениями –

+0

OK. Я начинаю понимать, но не весь путь. У меня есть только один /*, как в web.xml, просто у вас есть @requestmapping (value = "/") в контроллере Holdorf, который будет вызываться автоматически при запуске. Затем после этого я вызываю остальные контроллеры, называемые такими «http (s): // domain_name/Holdorf2/getperson, и если два контроллера находятся в папке пакета, то имя домена будет таким же? –

Смежные вопросы