目录
项目搭建
用IntelliJ IDEA继承Maven搭建项目架构。在搭建项目之前,首先就要把项目所需要的jar包加载进来。在pom.xml文件中:
<!--Maven "Bill Of Materials" Dependency-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.20.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring依赖库-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>
</dependencies>
Spring类加载监听器
Spring项目启动,需要类加载器和配置文件。
- 首先第一步,在web.xml文件当中把监听器加载进去。
<!--
ContextLoaderListener是Spring的监听器,它的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。
因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:../spring/applicationContext.xml</param-value>
<!--<param-value>/WEB-INF/spring/applicationContext.xml</param-value>-->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
- 然后在webapp目录底下创建spring目录文件夹,然后创建Spring的配置文件即applicationContext.xml。首先在创建之前要用Maven把Spring依赖的jar包导入到项目中来。
上面配置文件中有:
<param-value>classpath*:../spring/applicationContext.xml</param-value>
所以首先在WEB-INF目录下创建spring目录然后再创建applicationContext.xml文件。创建好之后Spring的任务完成。
Spring MVC框架
Spring MVC是Spring提供的MVC框架。核心配置文件是**[dispatcher]-servlet.xml文件。DispatcherServlet是Spring MVC框架的核心Servlet**,类似于调度器。
原理:
配置Spring MVC
- 在web.xml文件中添加调度器DispatcherServlet的配置。注意:这里的配置文件要放在上面spring监听器的下面。
<!-- DispatcherServlet definition goes here-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:../spring/dispatcher-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>
- 在spring目录里创建dispatcher-servlet.xml文件。
上面配置的目录就在spring目录下面,所以要这么创建。
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:../spring/dispatcher-servlet.xml</param-value>
配置完成之后,开始运行项目,测试配置是否正确。
Spring MVC控制器
Spring MVC控制器是页面和数据之间的交互调度者,所以项目首先从控制器开始。
注解
Spring MVC可以通过注解的方式进行,也可以用java代码进行。在类上面加**@Controller注解,就表示该类是一个控制器类。@RequestMapping**可以加在函数上也可以加在类上,表示url地址的映射路径。
- 创建控制器。ModelMap对象会把message信息放在请求域当中,返回的jsp页面就会从请求域当中拿到message的值,即Hello Spring MVC Framework!《时间简史,从黑洞到大爆炸》。
@Controller
@RequestMapping(value = "/demo")
public class UserController{
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!《时间简史,从黑洞到大爆炸》");
return "hello";
}
}
- 创建view页面,在web.xml页面下创建jsp目录然后创建hello.jsp页面
<%@ page isELIgnored="false"%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h3>这是视图模型中的值:${message}</h3>
</body>
</html>
- 配置视图
在dispatcher-servlet.xml文件中添加如下配置。
<!-- 自动注册组件 -->
<mvc:annotation-driven/>
<!-- 通过扫描将带有@Controller注解的类交由spring容器管理并维护 -->
<context:component-scan base-package="com.shopping.system.controller" />
<!--
配置视图解析器 如果不配置ViewResolver,Spring MVC默认使用org.springframework.web.servlet.view.InternalResourceViewResolver作为
ViewResolver,而且prefix和suffix都为空
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
然后运行demo,浏览器打开对应URL地址查看。
错误1:Spring标签的值不显示
jsp页面值所以没有值出现,是因为jar包里面有jstl或者jsp的jar包,在返回的页面会出现下面这样的显示
这是视图模型中的值:${message}
解决方案:在jsp页面加上最上面下面的内容
<%@ page isELIgnored="false"%>
错误2:页面中文出现乱码现象
解决方案:在jsp页面的<%@page contentType=“text/html;charset=UTF-8”%>后面加上pageEncoding="UTF-8"就能解决乱码问题
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
Spring MVC访问静态资源
由于web.xml文件当中对DispatcherServlet 的配置,导致JSP文件访问静态资源比如图片会出错,导致图片不能正常显示。
解决方案:
在dispatcher-servlet.xml文件中添加如下代码:image文件是创建在WEB-INF目录下面,如果创建在其他地方,location属性设置要改变。
<!-- 自动注册组件 -->
<mvc:annotation-driven/>
<mvc:resources mapping="/image/**" location="/WEB-INF/image/" />