Spring MVC Example

В качестве инструкции можно использовать руководство netBeans, дополнительно можно посмотреть это руководство . Так же можно посмотреть примеры spring-source и официальное рукодовство step-by-step для Spring 2 (устарело).

Напише приложение, состоящее из одного контроллера ContactsController и одной модели ServiceContacts, которые будут выводить "Hello имя пользователя!", заданное параметром name при попадании страницы в контроллер, или "Hello Anonymous" если name не задан.

Существует два способа настройки Spring: через файлы xml и через директивы (@Controller и др.). Мы воспользуемся первым способом, хоть он и считается устаревшим в Spring 3.

В файле web.xml описываем роутер для страницы contacts в класс ContactsController:

   contextConfigLocation /WEB-INF/applicationContext.xml  org.springframework.web.context.ContextLoaderListener dispatcher org.springframework.web.servlet.DispatcherServlet 2 <servlet-mapping> dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30       </session-timeout> </session-config> <welcome-file-list> <welcome-file>redirect.jsp</welcome-file> </welcome-file-list> </web-app>

В dispatcher-servlet.xml надо указать наш контроллер и на каких страницах он будет работать:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <prop key="index.htm">indexController <prop key="contacts.htm">contactsController

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController" p:viewName="index" /> <bean name="contactsController" class="jperm.ContactsController"/>

Cоздаем класс контроллера:

package jperm;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;

//@Controller  // Это если бы настраивали Spring через директивы, то означало бы что класс ContactsController является контроллером. public class ContactsController implements Controller { // @RequestMapping(value="/contacts")  // Если бы настраивали Spring через директивы, то означало бы что роутить на контроллер все что пришло на /contacts @Override public ModelAndView handleRequest(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception { //ModelAndView mav = new ModelAndView("contacts","ContactsService",null); ModelAndView mav = new ModelAndView("contacts"); ServiceContacts sc = new ServiceContacts(hsr.getParameter("user")); // Создаем модель и отправляем в нее имя mav.addObject("user",sc.getName); // Добавляем переменную ${user} в представление return mav; } }

В контроллере мы создали модель ServiceContacts, которая вернула нам "user". Переменную user мы отправляем в представление "contacts", расположенное в WEB-INF/jsp/contacts.jsp.

Содержимое модели ServiceContacts:

package jperm;

public class ServiceContacts { private String name; ServiceContacts(String name) { this.name = name; }   public String getName {                   // Это типа бизнес-логика if (this.name != null) return this.name; return "Anonymous"; } }

Содержимое представления contacts.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ page session="false"%> <!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> ContactController Hello ${user}! <a href="${pageContext.request.contextPath}/" title="Back">Back</a>