SpringMVC

搭建SpringMVC框架-HelloWord

一、目录结构
①通过maven创建web项目。
②补全web框架的目录结构

二、配置xml文件
	编写pom.xml文件,添加SpringMVC框架需要的依赖、servlet依赖、thymeleaf依赖、日志依赖,maven工具导入相关jar包。
	tips:https://mvnrepository.com/  查找相关jar包的依赖代码,推荐使用最新或使用最多的jar包。
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring5</artifactId>
      <version>3.0.12.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
三、配置SpringMVC的DispatcherServlet前端控制器
	首先在tomcat例子中找到安装版本的web.xml文件,复制到当前项目中。然后配置前端控制器、代码过滤器。
  <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>
  
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc_config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
	四、编写配置文件
	编写spring配置文件springmvc_config.xml,实现自动导入与thymeleaf试图解析器配置。
<!--base-package是存储前端控制器(@Controller)的基目录-->
    <context:component-scan base-package="com.fang.mvc"></context:component-scan>

    <!--配置视图解析器:把handler方法返回值解析为实际的物理视图-->
    <bean id="ViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
五、配置.html
WEB-INF文件夹下新建一个tenolates文件夹,用以存放.html文件,创建index.html作为主页面。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
Hello SpringMVC<br>

</body>
</html>
六、编写源文件
使用@Controller注解与@RequsetMapping注解
@Controller

public class TestScope {
    
    @RequestMapping("/")
    public String index(){
        return "index";              //这里使用thymeleaf的命名规范,前缀为目录路径,后缀为.html
    }
}
七、配置tomcat服务器
下载并在idea中配置tomcat,运行实例。

SpringMVC常用注解

@Controller
@RequestMapping
@RequestParam
@PathVariable
@RequestParam
@CookieValue
@Autowired
@Resource
@Repository
@Mapper
@ResponseBody()
@RequestBody(RequestEntity)

SpringMVC的视图

	springmvc的视图就是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户。分为转发视图(InternalResourceView)与重定向视图(RedirectView).
	当工程中引入jstl的依赖,转发视图会自动转换为jstlView。
	若使用Thymeleaf的视图技术,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView。
	一、SpringMVC访问静态资源的过程(删除过程中用到)
	在xml配置文件中添加<mvc:default-servlet-handler/> 开放静态资源的访问。tomcat下的web.xml和项目中的web.xml在作用域上属于从属关系,当两者冲突时,采用就近原则,沿用工程的web.xml。当请求静态资源时,tomcat中web.xml的DefultServlet与项目中的DispatcherServlet冲突,以后者为准,但是后者没有配置静态资源访问,所以之有开放静态资源访问是才可以。
	获取表单元素->将触发点击事件的超链接的herf属性赋值给表单的action->提交表单->取消超链接的默认行为。
	webapp文件夹下创建static文件夹存放js文件。最后maven->Lifecycle->package重新打包,编译运行。
	配置文件配置<mvc:annotation-driven/>。功能为请求在DispatcherServlet处理不了时,调用DefaultServlet进行处理。

HttpMessageConverter

报文信息转换器,将请求报文转换为java对象,或将java对象转换为相应报文。
@Controller
/**
 * @RestController注解
 * 该注解为SpringMVC提供的符合注解,首先该注解包括@Controller注解,然后该注解修饰的类为其中的每一个方法提供一个@ReponseBody注解
 */
public class TestMessageConverter {

    @RequestMapping("/")
    public String testindex(){
        return "index";
    }

    /**
     * test @RequestBody  获取请求体
     * @param str
     * @return
     */
    @RequestMapping(value = "/testrequestbody",method = RequestMethod.POST)
    public String testRequestBody(@RequestBody String str){
        System.out.println("RequestBody:"+str);
        return "index";
    }

    /**
     * test RequestEntity(完整的请求报文转换为java对象)
     * @param requestEntity
     * @return
     */
    @RequestMapping(value = "/testrequestentity")
    public String testRequestEntity(RequestEntity<String> requestEntity){
        System.out.println("请求头:"+requestEntity.getHeaders());
        System.out.println("请求体:"+requestEntity.getBody());
        return "index";
    }

    /**
     * test ResponseBody
     * 如果返回值是对象。需要导入jackson依赖,转换为json格式的字符串,因为http无法直接解析java对象
     *
     * 1、导入依赖
     * 2、打开mvc注解
     * 3、在处理器方法上使用@ResponseBody标识
     * 4、java对象直接作为控制器方法的返回值,就会自动转换为Json格式的字符串
     *
     * @return   需显示的内容
     */
    @RequestMapping("/testresponsebody")
    @ResponseBody         //方法的返回值,就是显示的数据
    public String testResponseBody(){
        return "index";
    }

SpringMVC的执行流程

一、MVC常用组件
· DispatcherServlet:前端控制器,不需要工程师开发由框架提供
   作用:统一处理请求和相应,整个流程控制的中心,由它调用其他组件处理用户的请求。
  · HandlerMapping :处理器映射器,不需要工程师提供由框架提供
    作用:根据请求的Url、method等信息查找Handler,即控制器方法
   · Handler :处理器,由工程师开发
    作用:在DispatcherServlet控制下,handler处理具体的用户请求
   · HandlerAdapter : 处理器适配器  ,不与要工程师开发,由框架提供
    作用: 通过HandlerAdapter对handler进行执行
     ViewResolver : 视图解析器 不需要工程师开发,由框架提供
     作用:进行视图解析得到相应的视图,例如:Thymeleafview、InternalResourceView、RedirectView
     View:视图 不需要工程师开发,由框架提供
     作用:将模型数据通过页面展示给用户。
     
二、DispatcherServlet的执行过程
Servlet的生命周期:完整的servlet生命周期流程:

1.加载web.xml文件。
2.通过构造函数创建servlet对象。
3.通过init方法初始化servlet。
4.通过service,或者doGet、doPost提供服务。
5.在重启或关闭时自动对servlet进行销毁。

	DispatcherServlet的执行过程:

1、用户向服务器发送请求,请求被SpringMVC前端控制器DispatcherServlet捕获。
2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URL),判断请求URL对应的映射(handlerMapping)。
a)不存在
i:再判断是否配置了mvc:defaul-servlet-handler
ii:如果没配置:则控制台报没找到映射,报404错误。
iii:如果有配置,则访问目标资源(一般为静态资源),找不到客户端也会报404错误。
b)存在则执行下列流程
3、根据该URL,调用HandlerMapping获得该handler配置的所有相关对象(handler和拦截器),最后一handlerExecutionChain执行链对象的形式返回。
4、为前端控制器获得的handler,选择一个合适的HandlerAdapter。
5、handlerAdapter成功获得,则执行拦截器的preHandler方法(正向)。
6、提取request中的Model,填充handler方法传参,执行handler方法。Spring会帮你做一些额外的工作。
a)HttpMessageConveter:将消息(Json,xml等数据)转换为一个对象,将对象转换为指定的响应信息。
b)数据转换:对请求消息进行数据转换,String转换为Integer,Double等。
c)数据格式化:对请求消息进行数据格式化,将字符串转换成格式化数字和格式化日期等。
d)数据验证:验证数据有效性(长度、格式),验证结果存储到BuildingResult或error中。
7、Handler执行完之后,向DispatcherServlet返回一个modelAndView。
8、此视将开始执行拦截器的postHandler方法(逆向)
9、根据返回的ModleAndView(此时会判断是否存在异常,如果存在异常,调用HandlerExceptionResolver进行异常处理),选择有个合适的ViewResolver,进行视图解析,根据Model和View来渲染视图。
10、视图渲染完毕,将执行拦截器的afterCompletion方法(逆向)。
11、将渲染结果返回给客户端。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值