IDEA搭建简单的SpringMVC项目
一、创建maven项目
1.配置pom.xml文件
<dependencies>
<dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<!--运行时不需要此依赖,因为tomca本身就有-->
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 加入编译插件,不加的话默认时jdk1.5-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<target>${maven.compiler.target}</target>
<source>${maven.compiler.source}</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
2.将项目添加成web,maven项目变成web项目
file->project structure->artifacts
二、配置tomcat
1.将项目部署到tomcat中,最好不用tomcat10,因为9到10 变动很大
2.在web下创建测试页面index.jsp
3.启动tomcat页面出现访问index.jsp成功
4.测试接口
@WebServlet("/hello")
public class IndexController extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().println("hello word");
}
}
三、搭建SpringMVC坏境
1、首先导入SpringMVC所需的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wyl</groupId>
<artifactId>springmvcdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<!-- javax.servlet-api -->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<!--运行时不需要此依赖,因为tomca本身就有-->
<scope>provided</scope>
</dependency>
<!--springmvc的依赖,会自动传递spring的其他依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 加入编译插件,不加的话默认时jdk1.5-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<target>${maven.compiler.target}</target>
<source>${maven.compiler.source}</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project
2、配置web.xml
<?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">
<!-- 配置一个ContextLoaderListener,他会在servlet容器启动时帮我们初始化spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定启动spring容器的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
<!--注册DispacterServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-context.xml</param-value>
</init-param>
<!--加载时先启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
一、配置
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
注意:注册DispacterServlet有两种方式:
方式一:
当你放在src下面的话,配置时:配置的作用是DispatcherServlet的一个初始化参数,即SpringMVC配置文件的位置和名称
方式二:
当你放在WEB-INF下的话可以不用配置,使用SpringMVC的默认配置,但是名称是有要求的,
命名要求:xxx-servlet.xml
我觉得你换名出错的原因应该是命名的问题,恰好名称有个servlet,哈哈
比如你现在是: springmvc
那么你放在WEB-INF下的话,你的那个xml文件名应该是springmvc-servlet.xml**
3、配置app-context.xml文件
小知识:在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问,必须通过请求转发。
app-context.xml (其实就是个spring和springmvc共享的配置文件) ,我们可以建立在/WEB-INF/目录下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!--处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/page/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
接着启动服务会报错, java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
在web.xml中配置没有找到这个类ContextLoaderListener
原因:没有将依赖添加到项目中
将会在WEB-INF下创建lib文件,主要存放我们web程序下需实现某个功能所需要的jar包。
4、编写Controller测试
注意:这个实现了Controller接口的类需要返回一个ModelAndView,这个对象封装了视图和模型;
package com.wyl.demo.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
*
* @Author wyl
* @Date: Created in 19:51 2022/6/7
*
*/
public class LoginController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("user","张三");
mv.setViewName("hello");//在page目录 下创建hello.jsp页面
return mv;
}
}
5、在接口使用注解
重要使用注解,就得去扫描包,让专业的类来解析
在app-context.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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd"
>
<!-- 自动扫包 -->
<context:component-scan base-package="com.wyl.demo.controller"/>
<!-- 让Spring MVC不处理静态资源,负责静态资源也会走我们的前端控制器、试图解析器 -->
<mvc:default-servlet-handler />
<!-- 让springmvc自带的注解生效 ,开启注解的驱动 -->
<mvc:annotation-driven />
<!--处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/page/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
@Controller
public class LoginController {
@RequestMapping("/hello")
public ModelAndView login() throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("user","hello 张三");
modelAndView.setViewName("hello");
return modelAndView;
}
}
四、了解SpringMVC原理
简单说一下SpringMVC的工作流程:
流程 :
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11,DispatcherServlet响应用户
pter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11,DispatcherServlet响应用户