通过Maven创建项目
- 选择Group Id = org.apache.maven.archetypes, Aritifact Id = maven-archetype-webapp
- 其他配置按要求输入即可
- 针对Maven创建项目进程慢的问题处理方法:解决办法之一
- 修改Build Path,去除前期运行环境错误
- 配置加载依赖包,编辑pom.xml
注意这里的version都是引用变量,故需要在文件前面声明好spring.version
之前因为导入包不好导致好多问题,比如加载不了dispatcher
<properties>
<spring.version>4.3.11.RELEASE</spring.version>
</properties>
<!-- springmvc dependencies -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
创建Controller
在src/main/java/路径下创建一个controller包,在这个包中创建Controller
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
//注解标明当前class是一个Controller,并根据映射将不同的url将http请求映射到对应的处理方法中
@Controller
@RequestMapping("/") //无参数注解 对所有的请求拦截映射
public class HelloWorldController {
@RequestMapping(method = RequestMethod.GET)
//ModelMap是Map实现它提供一种 从request或者session中设置 或者获取属性的方式
public String sayHello(ModelMap model) {
model.addAttribute("greeting", "Hello World from Spring 4 MVC");
//返回值十分重要,配合前缀后缀指定视图文件名
return "helloworld";
}
//带参数注解,value属性指定拦截的url
@RequestMapping(value="/helloagain", method = RequestMethod.GET)
public String sayHelloAgain(ModelMap model) {
model.addAttribute("greeting", "Hello World Again, from Spring 4 MVC");
return "helloworld";
}
创建View
在WEB-INF路径下创建一个views文件夹用于存放视图文件,文件名为helloworld.jsp
helloworld是与controller中的返回值对应的,这样从控制层就可以路由到对应的视图资源
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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">
<title>Hello World Test</title>
</head>
<body>
<!--输出Ctroller模型中的属性值-->
Greeting : ${greeting}
</body>
</html>
配置springMVC
编辑web.xml:标准的JavaEE Servlet配置,声明DisPatcherServlet和路径映射
经过这个xml文件的配置,所有的/路径都会被名为dispatcher的DispatcherServlet处理init-param.这个参数,使得可以在项目的任何位置存放配置文件也可以随意命名,而且甚至都可以配置多个配置文件。如果没有这个参数就不得不以[dispatcher ]-servlet.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>Spring4MVCHelloWorldDemo Web应用程序</ display-name>
<servlet>
<servlet-name>dispatcher</servlet-name >
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name> contextConfigLocation </param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</ web-app >
除此以外,还可能会配置一些使用的bean。每一个Dispatcher都有自己的上下文对象WebApplicationContext,而且有继承了来着(Root)WebApplicationContext中的所有bean。特殊情况,当只需要一个Dispatcher时,只配置一个rootContext亦可。
- 写好web.xml后,需要在相同路径下创建一个 [DispatcherName]-servlet.xml 文件用于Dispatcher初始化,其中定义所有springmvc的组件(比如beans)
<beans xmlns = “http://www.springframework.org/schema/beans”
xmlns:context = “http://www.springframework.org/schema/context”
xmlns:mvc = “http://www.springframework.org/schema/mvc”
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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd“>
<!-- base-package指明在当前路径下搜索controller-->
<!-- mvc声明view resolver,用于controller相应正确视图资源-->
<context:component-scan base-package="controller"/>
<mvc:annotation-driven />
<bean class = “org.springframework.web.servlet.view.InternalResourceViewResolver”>
<!--声明前缀-->
<property name=“prefix”>
<value>/WEB-INF/views/</value>
</property>
<!--声明后缀-->
<property name=“suffix”>
<value>.jsp</value>
</property>
</bean>
</beans>
完成配置发布到Tomcat
创建过程中问题
Maven导入jar包有问题,报错信息为Spring-beans包过大无法解压
解决办法:根据eclipse的problems面板报错信息锁定问题发生位置,查看build path中的路径没有错误,于是在Maven本地仓库中删除出错包再重新下载,Update Project问题解决
表面上一切正常并不一定没有问题,时常查看日志或者console输出可以及时发现问题。 比如Tomcat启动起来,仍要查看console是否有报错。
注意使用的jar包版本与程序中的类和方法是否匹配。可能会因为两者之间的差异而报错。
注意XXX-servlet.xml中命名空间十分重要,决定了标签是否可用。
Controller的返回值一定要与预计的view层文件相对应,否则将会无法正确路由。