先来介绍一下SpringMVC的使用步骤,接下来我们就按照这个步骤来写一个小demo。
使用步骤:
①创建Dynamic Web Project
②添加jar包
③在web.xml中配置dispatcherServlet
④添加Spring MVC配置文件
⑤编写请求处理器(根据url来找到用哪个方法来处理请求?)
⑥编写视图(找到了方法,那这个方法到底是怎么处理请求的啊?)
一、创建Dynamic Web Project
【注意】这里有个小建议哦,建议Eclipse是Java EE版本的,就是在安装的时候选择EE版本,我之前用了SE版本,项目中会有许多未知错误,也不知道是哪里出了问题,为了省心还是换成了EE版本,也就是下图中左上角那个样子的图标。
打开Eclipse,选择File->New->Dynamic Web Project:
注意下面!记得选择Apache Tomcat,这里我选择的是8.5。Tomcat的安装配置网上很多(或者我过段时间补充一下Tomcat的安装配置教程~)
选择下一步,记得勾选下面Generate web.xml……
创建完成,应该是这个样子的:
二、添加jar包
所有用到的jar包都在这里了,大家可以在这里搜索下载!
把所有的jar包复制到WEB-INF文件夹下的lib文件夹中,然后全选所有jar包,右击选择Build Path->Configure Build Path.
然后它们就都到这里去了:
二、在web.xml中配置dispatcherServlet
将你的WEB-INF文件夹下的web.xml文件中的内容替换为下面的内容(已经配置好了):
web.xml文件代码(注意servlet-name那个地方,后面会有用!):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>springmvc</display-name>
<!-- 配置 DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name><!-- 可以修改 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 不要修改 -->
<!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 -->
<!--
实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.
默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml
-->
<!--
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
四、添加Spring MVC配置文件
在WEB-INF文件夹下新建一个xml文件(或者是你可以创建一个文本文件,把后缀改成xml,拖到这个文件夹下),文件名命名为:dispatcherServlet-servlet.xml,这个配置文件的命名和web.xml中的servlet-name的值是对应的!
看到“可以修改”的注释那里,我这里配置的servlet-name是dispatcherServlet,那我创建的配置文件名就要叫dispatcherServlet-servlet.xml,也就是:这里定义的文件名格式。
再总结一下:web.xml文件中<servlet-name>value</servlet-name>里面的value就是<servlet-name>-servlet.xml中的servlet-name,这两个地方必须一致!!!
完成之后的配置文件:
都在WEB-INF文件夹下!
dispatcherServlet-servlet.xml文件代码(注意配置自定扫描包和视图解析器那里,后面会用到!!):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 配置自定扫描的包 -->
<context:component-scan base-package="cn.techaction"></context:component-scan>
<!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
五、编写请求处理器
在创建一个包,包名cn.techaction,这个包名和dispatcherServlet-servlet.xml文件中的配置自动扫描包的base-package值是对应的!!
在dispatcherServlet-servlet.xml文件中:
配置自动扫描的包和你创建的包的名字要一致!!
在src文件夹下,创建名为cn.techaction.controller的包(悄咪咪的说,只要在src文件夹下创建即可,不必非要在cn.techaction包中创建,因为它会自动到cn.techaction包中,我也不知道为啥),然后创建一个类,如下图:
写一个方法:
package cn.techaction.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
//@RequestMapping("/test")
public class HelloSpringMVC {
@RequestMapping("/hello")
public String helo() {
return "hello";
}
}
注解解释:
@Controller:负责注册一个bean到spring上下文中,用于定义控制器类。所以这里的HelloSpringMVC就是一个控制器类,它根据url来决定用哪个方法来处理请求、确定到底返回哪一个视图。
@RequestMapping:用于映射请求,为控制器指定可以处理哪些url请求。
当我们在地址栏输入:http://localhost:8080/TestSpringMVC/hello(TestSpringMVC是项目名)就会映射到我们写的这个hello()方法,这个方法来处理请求。方法和url就是这么映射的,你可以理解成,这个url就是要告诉后台:“我这个请求要让TestSpringMVC项目中的hello方法来处理!”
六、编写视图
上面我们说到,现在我们已经知道了要用哪个方法来处理请求了,那么这个方法要怎么处理这个请求呢?
我们看到dispatcherServlet-servlet.xml文件的这个地方:
hello方法的返回值是hello,它将被解析为对应的视图(也就是对应的jsp文件)。由配置文件我们可以知道视图解析器会将返回值的前缀设置成:/WEB-INF/views/,后缀设置成:.jsp。比如,hello方法的返回值是hello,那么对应的视图就是:/WEB-INF/views/(前缀)+hello(返回值)+.jsp(后缀),即/WEB-INF/views/hello.jsp,也就是/WEB-INF/views文件夹下的hello.jsp文件,这就是hello方法的处理结果,它返回了hello值以此来找到对应的视图文件。
聪明的你这个时候就应该知道了,为了与我们的配置文件对应起来,我们要在WEB-INF文件夹下,新建一个名为views的文件夹,然后新建一个名为hello的jsp文件:
这个jsp文件就是hello方法对应的视图文件了!
我们在hello.jsp文件中写点儿东西:
记得把编码改成utf-8。
保存之后,我们在刚才写的那个Java类的HelloSpringMVC.java文件中,右击运行,选择Run on server。
运行结果如下:
SpringMVC的基本使用就完成了!