一个简单的Web网站搭建:


开发工具:eclipse

运行环境:jetty

依赖管理工具:maven


首先创建一个maven项目:

spring mvc 代码里面写事务 spring mvc例子_spring mvc 代码里面写事务

选择webapp。

spring mvc 代码里面写事务 spring mvc例子_spring_02

填写好之后finish即可。


打开pom文件。加入spring-mvc的依赖。我们使用spring mvc当然要加入相应的依赖了

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>4.3.2.RELEASE</version>
</dependency>

并加入jetty插件,这是一款轻量级的web容器,提供我们的运行环境

<plugin>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<version>9.3.7.v20160115</version>
</plugin>

pom文件就配置好了。


打开web.xml文件。

在这里我们需要配置前端控制器,也就是DispacherServlet。加入servlet标签。

<!-- 加载DispatcherServlet应用上下文 -->
<servlet>
	<servlet-name>webDispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 可选的初始化,指定你加载的上下文文件的位置,如果不写,则默认使用/WEB-INF/[servlet-name]-servlet.xml的文件
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:webDispatcherServlet-servlet.xml</param-value>
	</init-param>
	-->
	<!-- 设置servlet的优先级,正数数时越小优先级越高 -->
	<load-on-startup>1</load-on-startup>
</servlet>

这个前端控制器操作什么样的映射呢?所以我们要加入对应的映射关系。

<!-- url拦截到对应的前端控制器 -->
<servlet-mapping>
	<servlet-name>webDispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

根路径下的url全都会交给这个前端控制器去处理。


那么前端控制器处理什么东西呢?

在前面一章里面讲过,前端控制器需要和HandlerMapping,HandlerAdapter,ViewResolver打交道。所以我们需要在前端控制器加载的上下文的文件中,告诉他这些东西。

<!-- HandlerMapping -->
<bean
	class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

<!-- HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 

<!-- ViewResolver -->
<bean
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>

这里为了便于理解,所以将他们显示的写出来,在实际开发中,除了ViewResolver之外,其他两个都可以被一个xml标签所代替:

<annotaion-driven/>


但为了更加方便的说明,这里我们还是采用这种方法。

上面的配置中,关于viewResolver,prefix是前缀,表明路径,suffix是后缀,表明view的格式。


为了便于我们在业务逻辑开发中可以使用注解的形式,我们还需要在前端控制器配置文件中加入

<context:component-scan base-package="" />

在上篇的说明中,前端控制器只控制业务逻辑中的Controller部分,所以我们应当加入相应的include标签。

这样,我们的简单的配置就基本结束了。


最后就是编写我们的业务逻辑:

这里举一个简单的例子:

@Controller
@RequestMapping("/hello")
public class HelloWorldController {
	
	@RequestMapping("/helloworld")
	public String hello(Map<String, String> model) {
		model.put("message", "Hello World!");
		return "index";
	}
}

在业务逻辑中,我们只需要使用@RequestMapping注解,就可以轻松的将映射对应到某个方法当中。

这里的意思很容易明白:/hello目录下的访问会映射到这个类中进行执行。而/hello/helloworld的访问则会对应到hello()这个方法中执行。


在上一篇中讲过,Controller需要返回一个ModelAndView对象,这里的ModelAndView就是方法中的model对象,一般有两种形式1.Model类 2.Map类。

这两种类都可以使用,在传递的过程中,都会将这两个转换成ModelAndView类再交给ViewResolver进行处理。

那么他的返回值是什么意思呢?

它的返回值指的就是对应的view。我们前面对ViewResolver进行了配置对吧。prefix + 返回值 + suffix得到的就是需要渲染的文件的位置。

在返回值这里,我们可以使用redirect:{url路径}或者forward:{url路径}的方式进行重定向和跳转。

例如:redirect:/hello可以跳转到localhost:8080/hello。


这样,我们上一节讲的所有接口都在例子中得到了诠释。

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>${message}</body>
</html>

最后简单的使用jetty:run就可以运行了。

spring mvc 代码里面写事务 spring mvc例子_html_03

显示效果如下:

spring mvc 代码里面写事务 spring mvc例子_web_04


如果要获取url上的参数呢?如何进行获取?例如localhost:8080/hello/helloworld?name=123。

@RequestMapping("/helloworld")
public String hello(@RequestParam("name")String name, Map<String, String> model) {
	model.put("message", "Hello World! " + name);
	return "index";
}

只需要简单的使用@RequestParam注解就可以了。

Restful风格的参数也是支持的。

@RequestMapping("/helloworld/{name}")
public String hello(@PathVariable("name")String name, Map<String, String> model) {
	model.put("message", "Hello World! " + name);
	return "index";
}


我们只需要简单的配置,就可以把我们的注意力全部集中在业务逻辑的开发上,是不是非常的简单便捷呢?