java小易——SpringMVC

SpringMVC

DispatcherServlet包含了spring的启动过程

WEB-INF中的web.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

<!--  &lt;!&ndash;防止加载事务出错&ndash;&gt;-->
<!--  <context-param>-->
<!--    <param-name>contextConfigLocation</param-name>-->
<!--    <param-value>classpath:applicationContext.xml</param-value>-->
<!--  </context-param>-->
<!--  -->
<!--  <listener>-->
<!--    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>-->
<!--  </listener>-->


  <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:applicationContext.xml</param-value>

    </init-param>
    <!--项目启动时,就启动servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>


  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--/*代表所有的请求都过springmvc
    /*.do代表只.do过DispatcherServlet
    -->
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

applicationContext.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"
       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">

    <context:component-scan base-package="com.yau.test"></context:component-scan>

    <bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">

        <property name="url" value="jdbc:mysql://localhost:3306/db_zbmanager?serverTimezone=UTC"></property>
        <property name="username" value="root"></property>
        <property name="password" value="2643258587"></property>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    </bean>

    <bean id = "mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yau.test.mapper"></property>
    </bean>

</beans>

@Controller 将这个类交给Spring容器加载
@RequestMapping("/User") 请求映射地址

get请求与post请求区别:一个参数在请求地址上,post在请求头上,所以post更加的安全,对于敏感的数据,必须用post请求

视图解析器ViewResolver处理内容的过程:

在这里插入图片描述

1、客户端向web服务器(如tomcat)发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径(通过web.xml中的servlet-mapping配置),web容器就将请求交给DispatcherServlet处理。

2、DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符(URI)。然后调用相应方法得到的HandlerMapping对象,再根据URI,调用这个对象的相应方法获得Handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)

3、DispatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。

4、在拦截器方法中,提取请求中的数据模型,填充Handler入参,所以所有准备工作都已做好,开始执行Handler(我们写的controller代码并不是能被直接执行,需要有刚才那些操作,才能转变为Handler被执行)。

5、Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet。

6、这个ModleAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图(通俗理解为将视图名称补全,如加上路径前缀,加上.jsp后缀,能指向实际的视图)。

7、DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图。将得到的最终视图通过http响应返回客户端。

@ResponseBody的作用将java对象转为json格式的数据。

没有进行配置前,只能传字符串,不能解析对象

@ResponseBody
public String login(User user) {
    User result = service.login(user);
    return result.getId() +"";

}

返回对象给前端,解析对象的方法

,加入三个包:com.alibaba.fastjson、com.fasterxml.jackson.core.jackson-core、com.fasterxml.jackson.core.jackson-databind
二、applicationContext.xml中
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <!--注解驱动,则可使用@ResponseBody-->
    <mvc:annotation-driven></mvc:annotation-driven>
防止静态页面被映射的方法:

①:在web.xml中

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--/*代表所有的请求都过springmvc
    *.代表只.do过DispatcherServlet,来过滤请求
    -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

②:applicationContext.xml中

 <!--若将静态资源都放入static文件夹中,防止给接口映射-->
    <mvc:resources mapping="/static/**" location="/static/"></mvc:resources>

向前端发送数据:

①直接发送
@ResponseBody
public String login(User user) {
    User result = service.login(user);
    return result.getId() +"";

}
②重定向过程,登录成功则定向到html:
@RequestMapping("/login.do")
    public String login(User user) {
        User result = service.login(user);
        if (result != null){
            return "redirect:/static/index.html";
        }else {
            return "redirect:/static/error.html";
        }
    }
③转发

返回什么都不加为String

返回、带数据为ModelAndView

    @RequestMapping("/login.do")
    public ModelAndView login(User user) {
        User result = service.login(user);
        ModelAndView mav = new ModelAndView();
        mav.addObject("result",result);
        mav.setViewName("success");
        return mav;

    }
协助返回数据的东西叫视图解析器:

一个为资源解析InternalResourceViewResolver

一个为UrlBasedViewResolver解析,解析一个链接,手动单个试图解析配置:

    <bean id="viewResovler" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <!--前置-->
        <property name="prefix" value="/jsp/"></property>
        <!--后置-->
        <property name="suffix" value=".jsp"></property>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    </bean>

提供一个方便的标签:

    <mvc:view-resolvers>
        <mvc:jsp prefix="/jsp/" suffix=".jsp" view-class="org.springframework.web.servlet.view.JstlView" ></mvc:jsp>
    </mvc:view-resolvers>

一般为UrlBased解析,解析一个链接,访问链接

在WEB-INF中的jsp不可以直接访问,只能通过转发来访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值