Мне нужно добавить несколько контроллеров в мой проект 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;
}
}
Я не уверен, что понимаю. Если у меня несколько контроллеров, как мне получить один контроллер для вызова запроса на другом контроллере? Кроме того, если есть несколько контроллеров, как я могу указать контроллер запуска и запрос на запуск? –
Например, если ваше контекстное имя вашего приложения является «Holdorf», поэтому, используя шаблон URL «/», весенний диспетчер будет получать запросы только в том случае, если вы набрали «http (s): // domain_name/Holdorf /», но если вы набрали « http (s): // domain_name/Holdorf/XXX "диспетчер весны не возьмется за контроль. Поэтому вы должны использовать «/ *» для пересылки всех запросов через весенний диспетчер. Теперь у вас может быть столько контроллеров, которые вам нужны, с разными конкретными сопоставлениями. Но вы не можете иметь два разных контроллера с одинаковыми сопоставлениями –
OK. Я начинаю понимать, но не весь путь. У меня есть только один/* url-pattern>, как в web.xml, просто у вас есть @requestmapping (value = "/") в контроллере Holdorf, который будет вызываться автоматически при запуске. Затем после этого я вызываю остальные контроллеры, называемые такими «http (s): // domain_name/Holdorf2/getperson, и если два контроллера находятся в папке пакета, то имя домена будет таким же? –