Статьи

Привет мир с весны 3 MVC

Своим введением в Spring я обязан этой статье, написанной Мартином Фаулером в далеком 2005 году. С тех пор я работал со многими фреймворками IoC, включая Guice , PicoContainer , NanoContainer и т. Д. В то время как в целом мне нравилось работать с IoC, я должен сказать, что Spring Уже более 5 лет я выбираю контейнер IoC для разработки приложений корпоративного уровня.

Последняя версия Spring, т.е. Spring 3, уже давно вышла. Последняя минорная версия 3.1.1 была выпущена менее недели назад , на момент написания этой статьи. Итак, как я обычно делаю с последними выпусками нескольких программ, таких как Spring, Hibernate, Maven и т. Д., Я переделал — возможно, в 1000-й раз — пример Hello World с Spring. Однако в этот раз я подумала, что поделюсь этим, надеясь, что новички в Spring найдут статью полезной. Учитывая предполагаемую аудиторию, я почувствовал, что статья о Spring MVC будет более полезной.

Прежде чем идти дальше, я должен упомянуть, что в сети нет недостатка в статьях на эту тему. Некоторые из них очень рекомендуются, например, этот . В моей статье, в отличие от других, которые я читал, я собираюсь использовать Eclipse только в качестве редактора и Maven для большинства операций, связанных со сборкой и управлением зависимостями. Я уверен, что другие написали бы так же. Если вы знаете какую-либо хорошую статью, пожалуйста, дайте мне знать, и я упомяну их здесь.

Без лишних слов давайте начнем с создания ванильного веб-приложения с использованием Maven.

Файл: C: \ partha \ codeRepo \ MavenCommands.bat

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
ECHO OFF  
   
REM ============================= 
REM Set the env. variables.  
REM ============================= 
SET PATH=%PATH%;C:\ProgramFiles\apache-maven-3.0.3\bin; 
SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0 
   
   
REM ============================= 
REM Create a vanilla web applicaiton.   
REM ============================= 
call mvn archetype:create ^ 
 -DarchetypeArtifactId=maven-archetype-webapp ^ 
 -DarchetypeGroupId=org.apache.maven.archetypes ^ 
 -DgroupId=org.academy ^ 
 -DartifactId=springwebapp001  
   
pause 

Это создаст веб-приложение springwebapp001. Вы можете развернуть это в любом контейнере сервлетов и иметь возможность нажать http: // yourmachinename: portnumber / springwebapp001 /. Он должен показать вам все, что доступно по адресу /springwebapp001/src/main/webapp/index.jsp.

Теперь мы установим зависимости Spring, которые позволят нам перехватывать http-хиты на веб-сайте. Я считаю эту статью очень информативной на этом этапе. Это дает вам список всех зависимостей Spring. Есть несколько вещей, на которые стоит обратить внимание. Если вы искали только Spring MVC, не сразу видно, что вы можете просто включить зависимость для Spring MVC, а не весь список. Что также упущено, так это то, что вам также нужен JSTL. Наконец, я думаю, что можно было бы также упомянуть, что Spring поставляется с предзагруженной регистрацией общего достояния, что, на мой взгляд, хорошо и действительно идет своим путем — уступив свое место Logback или Log4j. Итак, net net, моя версия раздела зависимостей в pom выглядит следующим образом.

Файл: \ springwebapp001 \ pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[...] 
   
<properties>                                                                  
 <project.build.sourceencoding>UTF-8</project.build.sourceencoding>        
   
 <slf4j.version>1.6.1</slf4j.version>                                      
 <logback.version>1.0.6</logback.version>                                  
 <org.springframework.version>3.1.2.RELEASE</org.springframework.version>  
 <javax.jstl.version>1.2</javax.jstl.version>                              
   
</properties>  
   
[...] 
   
        
<dependency>                                                                     
 <groupid>org.springframework</groupid>                                       
 <artifactid>spring-webmvc</artifactid>                                       
 <version>${org.springframework.version}</version>                            
 <exclusions>                                                                 
  <exclusion>                                                              
   <groupid>commons-logging</groupid>                                   
   <artifactid>commons-logging</artifactid>                             
  </exclusion>                                                             
 </exclusions>                                                                
</dependency>    
   
[...] 
   
                                  
<dependency>                                 
 <groupid>javax.servlet</groupid>         
 <artifactid>jstl</artifactid>            
 <version>${javax.jstl.version}</version
</dependency>    
   
[...] 
   
                              
<dependency>                                
 <groupid>org.slf4j</groupid>            
 <artifactid>slf4j-api</artifactid>      
 <version>${slf4j.version}</version>     
</dependency>                               
<dependency>                                
 <groupid>org.slf4j</groupid>            
 <artifactid>jcl-over-slf4j</artifactid
 <version>${slf4j.version}</version>     
 <scope>runtime</scope>                  
</dependency>                               
<dependency>                                
 <groupid>org.slf4j</groupid>            
 <artifactid>slf4j-log4j12</artifactid>  
 <version>${slf4j.version}</version>     
 <scope>runtime</scope>                  
</dependency

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

Файл: /src/main/webapp/WEB-INF/web.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
[...] 
<servlet>                                                  
    <servlet-name>spring</servlet-name>                    
    <servlet-class>                                        
        org.springframework.web.servlet.DispatcherServlet  
    </servlet-class>                                       
    <load-on-startup>1</load-on-startup>                   
</servlet>                                                 
<servlet-mapping>                                          
    <servlet-name>spring</servlet-name>                    
    <url-pattern>*.html</url-pattern>                      
</servlet-mapping>  
[...] 

Это означает, что наше приложение будет искать spring-servlet.xml, где нам нужно сообщить Spring, что ему нужно делать с перехватами, которые он перехватывает.

Файл: /src/main/webapp/WEB-INF/spring-servlet.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
   
 <context:component-scan base-package="org.academy.spring3.controllers"
   
 <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="viewResolver"
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"
  <property name="prefix" value="/WEB-INF/views/"
  <property name="suffix" value=".jsp"
 </property></property></property></bean
</context:component-scan></beans>

Здесь мы сказали Spring искать контроллеры в пакете org.academy.spring3.controllers. Давайте добавим один тогда.

Файл: /src/main/java/org/academy/spring3/controllers/HelloWorld.java

01
02
03
04
05
06
07
08
09
10
@Controller 
public class HelloWorld { 
  private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);  
    
 @RequestMapping("/helloworld"
 public ModelAndView hello(){ 
  logger.debug("In the controller.");  
  return new ModelAndView("HelloWorld", "message", "Hello world from Spring3.");  
 

В этом контроллере мы сказали Spring перехватывать любой вызов helloworld.html и передавать управление hello (). В этом методе мы создали модель. Модель содержит объект с именем «message», в котором есть строка «Hello world from Spring3». Эта модель передана представлению под названием «HelloWorld». Если вы посмотрите на spring-servlet.xml, вы увидите, что «HelloWorld» переводится в /src/main/webapp/WEB-INF/views/HelloWorld.jsp. Давайте добавим немного кода к этому.

Файл: /src/main/webapp/WEB-INF/views/HelloWorld.jsp

1
2
3
4
5
6
7
8
<html
<head
<title>Spring 3.0 MVC</title
</head
<body
${message} 
</body
</html

Этот код будет жаловаться на компиляцию, потому что мы не предоставили конфигурацию для входа в систему. Следующий файл должен сделать свое дело.

Файл: /src/main/resources/log4j.properties

1
2
3
4
5
6
7
# Set root logger level to DEBUG and its only appender to A1. 
log4j.rootLogger=DEBUG, A1 
   
# configure A1 to spit out data in console 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n    

Наконец, нам просто нужен удобный способ вызова helloworld.html. Давайте изменим index.jsp.

Файл: /src/main/webapp/index.jsp

1
2
3
4
5
6
7
<html
<html
<body
<h2>Spring 3</h2
<a href="http://www.blogger.com/helloworld.html"> Hello world.</a
</body
</html>

Вот и все. Скомпилируйте и разверните в любом контейнере сервлета. У вас есть пример Spring 3 MVC с открытым исходным кодом. Попробуй.

Перейдите к Обработка форм с помощью Spring 3 MVC .

Ссылка: Hello World с Spring 3 MVC от нашего партнера JCG Partho в блоге Tech for Enterprise .