SpringMVC 也叫Spring web mvc。是Spring 框架的一部分,是在Spring3.0 后发布的。
基于 MVC 架构,功能分工明确。解耦合。
就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。
方便整合Strtus,MyBatis,Hiberate,JPA 等其他框架。
在Controller, Service, Dao 都可以使用注解。方便灵活。使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource 在控制器类中注入 Service,在Service 类中注入 Dao。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sp6WdY18-1658845738149)(../../../../Pictures/Spring/wps1-16588394965531.jpg)]](https://1000bd.com/contentImg/2022/07/30/112500034.jpeg)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYiOKYgy-1658845738151)(../../../../Pictures/Spring/wps2-16588394965532.jpg)]](https://1000bd.com/contentImg/2022/07/30/112500194.jpeg)
执行流程说明:
所谓 SpringMVC 的注解式开发是指:
在代码中通过对类与方法的注解,便可完成处理器在 springmvc 容器的注册。注解式开发是重点。
项目案例功能:用户提交一个请求,服务端处理器在接收到这个请求后,给出一条欢迎信息,在响应页面中显示该信息。
创建步骤:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3xvEjHv-1658845738151)(../../../../Pictures/Spring/wps3-16588394965533.jpg)]](https://1000bd.com/contentImg/2022/07/30/112500376.jpeg)
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDefYg8n-1658845738152)(../../../../Pictures/Spring/wps4.jpg)]](https://1000bd.com/contentImg/2022/07/30/112500885.jpeg)
因为web的请求都是由Servlet来进行处理的,而SpringMVC的核心处理器就是一个DispatcherServlet,它负责接收客户端的请求,并根据请求的路径分派给对应的action(控制器)进行处理,处理结束后依然由核心处理器DispatcherServlet进行响应返回。
中央调度器的全限定性类名在导入的 Jar 文件 spring-webmvc-5.2.5.RELEASE.jar 的第一个包org.springframework.web.servlet下可找到。
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>*.actionurl-pattern>
servlet-mapping>
classpath:springmvc.xml表示从类路径下加载SpringMVC的配置文件。
指定拦截以.action结尾的请求,交给核心处理器DispatcherServlet处理。
删除index.jsp页面,重新建index.jsp页面,因为自动生成的页面缺失指令设置。
开发页面,发出请求。
<a href="${pageContext.request.contextPath}/zar/hello.action">访问actiona>
在webapp目录上新添目录/admin。
在/admin目录下新建main.jsp页面。用来进行服务器处理完毕后数据的回显。
开发HelloSpringMvc.java–>控制器(相当于以前的servlet)。这是一个普通的类,不用继承和实现接口。类中的每个方法就是一个具体的action控制器。
@Controller
@RequestMapping("/zar")
public class HelloSpringMvc {
@RequestMapping("/hello")
public String one(){
return "main";
}
}
@Controller:表示当前类为处理器,交给Spring容器去创建对象。
@RequestMapping:表示路径映射。该注解可以加在类上相当于包名,还可以加在方法上相当于action的名称,都是来指定映射路径的。
<context:component-scan base-package="com.bjpowernode.controller">context:component-scan> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/">property>
<property name="suffix" value=".jsp">property>
bean>
SpringMVC框架为了避免对于请求资源路径与扩展名上的冗余,在视图解析器
InternalResouceViewResolver 中引入了请求的前辍与后辍。而action中只需给出要跳转页面的文件名即可,对于具体的文件路径与文件扩展名,视图解析器会自动完成拼接。
context:component-scan:用来进行包扫描,这里用于指定@Controller注解所在的包路径。