吾生也有涯,而知也无涯。这篇文章主要讲述(lks)SpringMvc底层+基础+自动装配相关的知识,希望能为你提供帮助。
Springmvc
- Springmvc的运行概念
- Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了@Controller和@RequestMapping的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了@Controller注解机制、@PathVariable注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。
- 配置web.xml文件
< 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">
< !-- 注册SpringMvc的DispatcherServlet-->
< 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:springmvc-servlet.xml< /param-value>
< /init-param>
< !--启动级别-1-->
< 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>
- 配置完web.xml后我们的classpath后的会报错,
- 因为没有配置classpath的xml文件,所以配置springmvc-servlet.xml文件
< 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 class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
< !-- 添加 视图解析器-->
< !--视图解析器:DispatcherServlet给他的ModelAndView-->
< bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
< !--前缀-->
< property name="prefix" value="https://www.songbingjia.com/WEB-INF/jsp/"/>
< !--后缀-->
< property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
< /bean>
< /beans>
- 第一步用户发送请求
- 前端控制器 代码戴web.xml中,
- 此时请求都会在才段代码
- 委托请求给处理器----controller
- 返回视图和模型
- 模型装数据,视图跳转对象
具体解决第二个问题流程:File--Prodect Structer -- Artiface -- 选择到你的项目--然后添加Lib包(idea)
- 简要分析执行流程
- 在url上,是请求了位于服务器localhost8080上的Srpingmvc站点的hello服务器
- HandlerMapping为处理映射。DispatcherServlet的调用
- 解析到对应的Handler后,开始由HandlerAdapter适配器处理。
- HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
- 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
- ViewResolver会根据逻辑View查找实际的View。
- DispaterServlet把返回的Model传给View。
- 通过View返回给请求者(浏览器)
- 升入学习SpringMVC配置
- 配置请求分发控制器(Spring自己配置好的)
< servlet-name> springmvc< /servlet-name>
< servlet-class> org.springframework.web.servlet.DispatcherServlet
< /servlet-class>
- 注册他的请求
< servlet-name> springmvc< /servlet-name>
< url-pattern> /< /url-pattern>
< /servlet-mapping>
- 注意“/”和“/*”的区别
- 在Springmvc中
- / 只匹配所有的请求,不会去匹配jsp页面(一般都使用这个)
- /* 还会配置一个jsp,如果加了jsp会进行无线套娃
- 配置Spring的配置文件
< param-name> contextConfigLocation< /param-name>
< param-value> classpath:sprintmvc-servlet.xml< /param-value>
< /init-param>
- 通过contextconfiglocation绑定一个类
- classpath:当前配置文件(绑定)
- 设置服务器启动时,这个同事也启动
- 通过Spring配置controller类
< 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 class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
< !-- 添加 视图解析器-->
< !--视图解析器:DispatcherServlet给他的ModelAndView-->
< bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
< !-- 以上是springmvc必须配置的东西-->
< !-- -->
< !--前缀-->
< property name="prefix" value="https://www.songbingjia.com/WEB-INF/jsp/"/>
< !--后缀-->
< property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
< /bean>
< !--Handler-->
< bean id="/hello" class="com.lyd.controller.HelloController"/>
< /beans>
- 写入java类,继承controller接口,然后重写方法。
- 然后调用//ModelAndView 模型和视图
- 通过ModelAndView调用获取(addObect)和(setViewName)
- addObect:是一个键值对,name 和 传入的参数
- setViewName 是表示跳转的jsp界面(注意看xml中是否添加了后缀)
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:这里我们先导入Controller接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在ModelAndView中。Model
//模型存数据(返回时携带的数据)
mv.addObject("msg","HelloSpringMVC!");
//封装要跳转的视图,放在ModelAndView中
//视图调整到hello这个页面(在xml中配置了前缀和后缀
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
- 把java文件配置到xml中
< bean id="/hello" class="com.lyd.controller.HelloController"/>
- 写一个jsp文件
< head>
< title> LYD< /title>
< /head>
< style>
div h1{
color: aquamarine;
text-align: center;
}
< /style>
< body>
< div>
< h1> ${msg}< /h1>
< /div>
< /body>
< /html>
- 运行结果
- 最后包目录
- 自动装配
- 首先配置web.xml文件(不会改变)
< 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">
< !-- 注册SpringMvc的DispatcherServlet-->
< servlet>
< servlet-name> springmvc< /servlet-name>
< servlet-class> org.springframework.web.servlet.DispatcherServlet< /servlet-class>
< !--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
< init-param>
< param-name> contextConfigLocation< /param-name>
< param-value> classpath:sprintmvc-servlet.xml< /param-value>
< /init-param>
< !--启动级别-1-->
< 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>
- 然后配置springmvc-servlet.xml文件在resouces文件下
- 用context和mvc进行配置,context对包进行自动导入
- mvc让其可以自动配置springmvc的东西
- < !-- 默认的资源过滤-->
- < mvc:default-servlet-handler/>
- < !--完成注解生效和自动注入 -->
- < mvc:annotation-driven/>
< 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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
< !--自动扫描包 -->
< context:component-scan base-package="com.lyd.controller"/>
< !-- 默认的资源过滤-->
< mvc:default-servlet-handler/>
< !--完成注解生效和自动注入 -->
< mvc:annotation-driven/>
< !-- 添加 处理映射器-->
< bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
< !--添加 处理器适配器 -->
< bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
< !-- 添加 视图解析器-->
< !--视图解析器:DispatcherServlet给他的ModelAndView-->
< bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
< !--前缀-->
< property name="prefix" value="https://www.songbingjia.com/WEB-INF/jsp/"/>
< !--后缀-->
< property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
< /bean>
< /beans>
- 开始编写java类
- 此时注意就不用继承Controller的接口可以直接注释解决
- Model 作为传入的参数,可以直接获得信息内容
- 此时也可以不用setViemName方法,并且不用在后面注释 < bean id="/hello" class="com.lyd.controller.HelloController"/>
- 直接使用@RequestMapping("/hello")注释搞定
public class HelloController {
//请求url:项目的映射地址,项目名字为:/HelloController/hello 类的名字+mapping的名字
@RequestMapping("/hello")
//model可以直接取出并且渲染
public String hello(Model model){
//封装数据,像项目中添加msg与值,可以在jsp中取出并且渲染
model.addAttribute("msg","HelloSpringMvc");
return "hello"; //被视图解析器解析
}
}
- 注意导入lib包(具体放法见上面问题二的解决方法)
- 运行结果展示
【(lks)SpringMvc底层+基础+自动装配】
推荐阅读
- Flutter 专题17 图解 ListView下拉刷新与上拉加载#yyds干货盘点#
- 能让你更早下班的Python垃圾回收机制
- Divi Builder问题(后端不显示)
- 在首页上的不同区域显示前6个帖子WordPress()
- 显示不带html标签的产品变动价格
- 在WordPress中将帖子的类别名称显示为短代码的一部分
- 显示每个类别中的帖子数
- 在WordPress页面中以表格格式显示数据库中的数据
- 在主题上显示高级自定义字段