一、mvc设计模式,创建 Web 应用程序的模式
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就已包含在 Spring Framework 中。正式名称“ Spring Web MVC”来自其源模块的名称(spring-webmvc),但更通常称为“ Spring MVC”。
换句话说:Spring mvc是基于web层(请求处理和响应发送 b/s)的框架。
贴士:sturts1,struts2,spring mvc ,spring webFlux等等都属于web层框架
二、传统的b/s架构与spring mvc的架构有区别
mvc模式:m (model ) v(view–jsp,html) c (control–servlet)
1) 传统的b/s架构
客户端------请求-----控制器(servlet)----->封装数据model中
------->响应----------->jsp-----------------|
缺点: servlet生产周期长,大量servlet的产生。占据大量内存。
2)spring mvc 的b/s架构
优点:
- 只有1个servlet。
- 分工明确:
中央处理器(servlet):接受请求,分配任务,发送响应.
映射器:根据url,确定找谁(处理器),干什么(办什么业务),将其告诉老大。
适配器:根据映射器结果,找到对应的处理器,完成任务,并将结果返回给老大。
视图解析器:解析处理器返回的结果(model view)—返回哪个jsp,里面要显示什么数据渲染。
三、spring mvc开发的流程
第1步: mybatis spring mvc需要的包(spring+ spring-web包+spring-webmvc)
spring-web-5.0.14.RELEASE.jar
spring-webmvc-5.0.14.RELEASE.jar
第2步:web.xml配置中央处理器(spring 写好的一个servelt)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Springmvc01</display-name>
<!-- Tomcat容器来加载spring 和spring mvc配置-->
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 三、spring的编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--二、 spring mvc的配置==>中央处理器(1个老大与3个小弟) -->
<display-name>nd-springmvc01-base</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 参数 :告诉中央处理器 使用哪个映射器,哪个适配器,哪个视图解析器 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- / 中央处理器处理所有请求:包括jsp html 注意:不能写/*,否则报错 *.do 中央处理器处理url中以.do结果 比如:
http://127.0.0.1:8080/easybuy/index.do 被处理 http://127.0.0.1:8080/easybuy/index.jsp
不被处理 -->
<!-- <url-pattern>*.do</url-pattern> -->
<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>
第3步:配置spring-web.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.lq.web"/>
<!-- 1.映射器:HandlerMapping url==>handler -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 2.适配器: HandlerAdatper 调用 Handler==>Controller-->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!-- 3.视图解析器: -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 解析jstl标签 -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!-- 动态页面的前缀 -->
<property name="prefix" value="/WEB-INF/" />
<!-- 动态页面的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
第4步:定义处理器
@Controller
@requestMapping
package com.lq.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.lq.entity.Users;
import com.lq.service.IUsersService;
//http://localhost:8080/nd-springmvc01-base2/user/list
@Controller// 等价于@Component
@RequestMapping("/user")
public class UserController {
@Autowired
private IUsersService iUsersService;
@RequestMapping("/list")
public ModelAndView list() {
System.out.println("调用UserController的list方法");
//查询分页查询users的数据(Model)
List<Users> users = iUsersService.list();
//返回model(users)AndView(users.jsp)
ModelAndView mav=new ModelAndView();
mav.addObject("users",users);
mav.setViewName("users");
return mav; //"user.jsp"
}
@RequestMapping("/to_edit")
public String toEdit(Model model,Integer id) {
Users userDetail = iUsersService.getUser(id);
model.addAttribute("userDetail", userDetail);
return "edit_user";
}
@RequestMapping("/edit")
public void edit() {}
@RequestMapping("/login")
public String login() {
System.out.println("用户登录成功");
return null;
}
}
【补充】
@Component这个注解 在后期spring后期版本中进行细化 :
1) @Controller ----web层
2) @Service -----业务层
3) @Repository -----持久层 spring data jpa