项目搭建:
在idea中先创建一个Maven项目
然后在pom.xml文件中导包,导入springmvc所需依赖如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
如果工程中要建立多个module,可以删除project中的src包,因为代码不用写在这个里面,所以直接删掉工程中的src包就行。
接下来在已创建好的project中新建一个module:
同样是使用Maven创建,注意parent选择原project名:
创建好module后,首先添加web项目,用鼠标右键点击module名,点击Add Framework Supprt:
随后勾选Web Application,点击OK:
此时web项目成功加入module中:
有些人的idea在工程中添加module时可能会出现module中main包下的java和resources以及test包下的java包是黑色的问题,此时是无法创建.class文件的,我们要鼠标右键点击这些包,选择Mark Directory as,选择它们对应的root,设置成功后就可以正常使用了。
随后点击File,选择Project Structure
点击Artifacts,在中间选择创建好的module,再在点开右边的WEB-INF文件,如果该文件下没有lib文件,可能tomcat运行时就无法将maven项目中的包成功导出,我们需要在WEB-INF下创建一个lib文件夹,添加项目中所有的library资源至这个文件夹中。
执行完上述操作后,就可以先配置web.xml文件了,简单的SpringMVC项目的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置DispatcherServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet要绑定Spring的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动级别:1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- SpringMVC中 / /*
/:只匹配所有的请求,不会去匹配jsp页面
/*:匹配所有的请求,包括jsp页面-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
如果出现输出乱码的情况,可以将Spring自带的过滤器配置加到web.xml文件中,设置如下:
<!-- 配置SpringMVC的乱码过滤-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
随后设置springmvc的配置文件,在main包的resources包中新建一个springmvc-servlet.xml的spring.xml文件,创建后如果使用的是idea,应该此时在web.xml文件中ctrl+鼠标左键点击springmvc-servlet.xml是能自动转到的,否则就是路径不对或者产生了其他问题。
springmvc的注解模式的配置如下:
<?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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="controller"/>
<!-- 让Spring MVC不处理静态资源 .css .js .html .mp3 .mp4-->
<mvc:default-servlet-handler />
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
配置文件配置好之后,可以看出此时springmvc已经可以自动扫描controller包中文件的注解了,我们这时在main包下创建controller类,在类中创建一个HelloController.class文件:
注解开发模式下,HelloControl类中的代码如下:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")
public class HelloController {
//localhost:8080/web路径/hello/h1
@RequestMapping("/h1")
public String hello(Model model){
//封装数据
model.addAttribute("msg", "HelloSpringMVC");
return "hello";//会被视图解析器处理
}
}
以上类中方法将HelloSpringMVC通过请求转发传入到了hello.jsp中,这时我们需要在WEB-INF文件夹下创建一个jsp文件夹,再在jsp文件夹中创建名为hello.jsp的文件,在body中写一个el表达式:${msg}。
最后配置tomcat就行了,点击编译的那个锤子右边的选项框,选择Edit Configurations,如下图所示:
随后点击弹出界面中的加号,添加本地的tomcat:
点击OK后,右下角一般会出现一个爆红的Fix,点击这个Fix选择自己想要部署的web项目就可以了,注意这时URL中的路径就是你项目的初始路径,最后点击apply,配置成功。
按以上操作执行完后,就可以运行tomcat了,成功运行后会弹出网页,我们在原URL中加上hello/h1,即可实现页面请求转发,网页中出现HelloSpringMVC:
成功运行则表示SpringMVC项目搭建成功。