Spring MVC你好世界示例

注意
本教程基于Spring 2.5.6,已经过时了。 尝试考虑新教程:

  1. Gradle + Spring 4 MVC Hello World
  2. Maven + Spring 3 MVC Hello World

在本教程中,我们将向您展示Spring MVC Hello World Web应用程序。

使用的技术:

  1. Spring2.5.6
  2. JDK 1.6
  3. Eclipse 3.6
  4. Maven 3

1. MVC基础

在Spring MVC Web应用程序中,它包含3个标准MVC(模型,视图,控制器)组件:

  1. 模型–由服务层(业务逻辑)或持久层(数据库操作)处理的域对象。
  2. 视图–显示数据,通常是使用Java标准标记库(JSTL)编写的JSP页面。
  3. 控制器– URL映射并与服务层进行交互以进行业务处理并返回模型。

下图演示了Spring MVC Web应用程序如何处理Web请求。

图1.1 –图像是从Spring MVC参考复制而来的,并稍加修改。

spring mvc concepts

图1.2 – 图片是从本书复制而来的: Spring食谱

spring-mvc-concepts-2

注意
在Spring MVC中,核心调度程序组件是DispatcherServlet ,它充当前端控制器(设计模式)。 每个Web请求都必须通过此DispatcherServlet ,并且DispatcherServlet会将Web请求DispatcherServlet到合适的处理程序。

2.目录结构

标准的Maven项目目录结构。

spring2-mvc-hello-world

3. Maven

声明spring-webmvc依赖项,Maven将帮助您自动管理传递性依赖项(下载spring-webmvc所需的其他依赖spring-webmvc ,例如spring-contextspring-beans )。

如果您将JSP页面与JSTL技术一起使用,则还应包括jstl依赖项。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
	http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mkyong.common</groupId>
	<artifactId>spring2-mvc-xml-hello-world</artifactId>
	<packaging>war</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>Spring 2 MVC</name>
	
	<properties>
		<jdk.version>1.6</jdk.version>
		<spring.version>2.5.6</spring.version>
		<jstl.version>1.2</jstl.version>
		<servletapi.version>2.5</servletapi.version>
		
	</properties>
	
	<dependencies>

		<!-- Spring MVC framework -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- JSTL -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>${jstl.version}</version>
		</dependency>

		<!-- for compile only, your container should have this -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>${servletapi.version}</version>
			<scope>provided</scope>
		</dependency>
		
	</dependencies>

	<build>
		
	  <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.3</version>
			<configuration>
				<source>${jdk.version}</source>
				<target>${jdk.version}</target>
			</configuration>
		</plugin>

                <!-- embedded jetty, good for testing -->
		<plugin>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-maven-plugin</artifactId>
			<version>9.2.11.v20150529</version>
			<configuration>
				<scanIntervalSeconds>10</scanIntervalSeconds>
				<webApp>
					<contextPath>/spring2</contextPath>
				</webApp>
			</configuration>
		</plugin>

                <!-- configure Eclipse workspace -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-eclipse-plugin</artifactId>
			<version>2.9</version>
			<configuration>
				<downloadSources>true</downloadSources>
				<downloadJavadocs>true</downloadJavadocs>
				<wtpversion>2.0</wtpversion>
				<wtpContextName>spring2</wtpContextName>
			</configuration>
		</plugin>
			
	  </plugins>
		
	</build>

</project>

4.弹簧控制器

Spring附带了许多Controller,通常,您只需要扩展AbstractController并重写handleRequestInternal()方法即可。

HelloWorldController.java
package com.mkyong.common.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class HelloWorldController extends AbstractController{

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response) throws Exception {

		ModelAndView model = new ModelAndView("HelloWorldPage");
		model.addObject("msg", "hello world");
		
		return model;
	}
}

4.1 ModelAndView(“ HelloWorldPage”) –为了确定哪个视图应返回给用户,在此示例中,将返回HelloWorldPage.jsp

4.2 model.addObject(“ msg”,“ hello world”) –在名为“ msg”的模型中添加“ hello world”字符串,稍后可以使用EL ${msg}显示“ hello world”字符串。

5.视图(JSP页面)

在这种情况下,“视图”是一个JSP页面,您可以通过表达式语言(EL)$ {msg}显示存储在模型“ msg”中的值“ hello world”。

HelloWorldPage.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
	<h1>Spring MVC Hello World Example</h1>

	<h2>${msg}</h2>
</body>
</html>

注意
如果按原样显示$ {msg},而不是“ msg”模型中的值,则可能是由于旧的JSP 1.2描述符(默认情况下禁用表达式语言)引起的,请参见此处的解决方案

6. Spring XML配置

6.1声明了Spring Controller和viewResolver。

mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean name="/welcome.htm" 
		class="com.mkyong.common.controller.HelloWorldController" />
		
    <bean id="viewResolver"
    	class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

1. 控制器 –声明一个bean名称/welcome.htm并将其映射到HelloWorldController 。 这意味着,如果请求带有/welcome.htm模式的URL,则HelloWorldController控制器将处理该请求。

2. viewResolver –定义Spring如何查找视图模板。 在这种情况下,控制器HelloWorldController将返回一个名为HelloWorldPage的视图,该viewResolver将使用以下机制查找文件: 前缀+视图名称+后缀 ,即/WEB-INF/pages/HelloWorldPage.jsp

注意
实际上,默认情况下,不需要在web.xml定义BeanNameUrlHandlerMapping ,如果找不到处理程序映射,DispatcherServlet将自动创建BeanNameUrlHandlerMapping 。 有关详细信息,请参见本文BeanNameUrlHandlerMapping示例

6.2在web.xml ,声明了DispatcherServlet servlet充当前端控制器,以处理所有以htm扩展名结尾的整个Web请求。

web.xml
<web-app id="WebApp_ID" 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>Spring Web MVC Application</display-name>
  
  <servlet>
  	<servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
             org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
 	<servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

</web-app>
注意
mvc-dispatcher用于定义要加载Spring XML配置的文件。 默认情况下,它将通过将servlet名称mvc-dispatcher-servlet.xml来查找Spring XML配置文件。

在此示例中,Spring将寻找该文件– mvc-dispatcher-servlet.xml

7.演示

7.1使用Maven运行该项目:

$ mvn jetty:run

7.2要在Eclipse IDE中运行该项目,请使用以下Maven命令创建Eclipse项目设置:

$ mvn eclipse:eclipse

手动导入项目并从服务器插件开始。

网址: http:// localhost:8080 / spring2 / welcome.htm

spring2-mvc-demo

怎么运行的?

  1. 请求http:// localhost:8080 / spring2 / welcome.htm。
  2. URL以“ .htm”扩展名结尾,因此它将重定向到“ DispatcherServlet”,并将请求发送到默认的BeanNameUrlHandlerMapping。
  3. BeanNameUrlHandlerMapping将HelloWorldController返回到DispatcherServlet。
  4. DispatcherServlet将请求转发到HelloWorldController。
  5. HelloWorldController对其进行处理,并返回视图名称为“ HelloWorldPage”的ModelAndView对象。
  6. DispatcherServlet收到了ModelAndView并调用viewResolver对其进行处理。
  7. viewResolver将/WEB-INF/pages/HelloWorldPage.jsp返回到DispatcherServlet。
  8. DispatcherServlet将“ HelloWorldPage.jsp”返回给用户。

下载源代码

下载它– spring2-mvc-xml-hello-world.zip (14 KB)

参考文献

  1. Spring MVC文档

翻译自: https://mkyong.com/spring-mvc/spring-mvc-hello-world-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值