SpringMVC终极一篇,springmvc就这?

一、优点

  • 轻量级,简单易学
  • 很高效
  • 兼容性强,功能强大
  • 功能强大,restful,数据验证,格式化
  • 用的人多!

二、执行原理

2.1、普通servlet时代

流程:servlet类处理前端请求,取得前端参数,有多少取多少,然后处理业务,最后转发或者重定向到前端某个页面,看着步骤很简单,但是很繁琐!
比如:一个小网站下来,你会发现有很多个servlet,web.xml里面会很臃肿!
根本不利于团队开发!最重要的还是前端传递参数问题,写过的小伙伴可能深有体会,十servlet获取前端参数,然后还要封装,不小心字段写错了又很难发现!

2.2、Springmvc中心控制器

springweb框架围绕DispatchServlet设计,将请求分发给不同的处理器,配合上注解,简直爽的飞起!DisptchServlet实际上也是一个Servlet,只是功能更强大罢了!
直接上流程图!

  • 当浏览器发起请求被DispatchServlet拦截,根据请求参数生成代理请求,找到对应的实际控制器,处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,经过视图渲染,返回结果给浏览器!
    具体解析:
    HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

Handler让具体的Controller执行。

Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

视图解析器将解析的逻辑视图名传给DispatcherServlet。

DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

最终视图呈现给用户。

三、实例、

文字太难懂,配合上代码就容易理解了!
来:先基础准备、创建一个简单的表,编写实体类,(相信这些不用演示)
然后,
1、 web.xml

    <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>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

2、编写springmvc配置文件

<!--    处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" id="beanNameUrlHandlerMapping"/>
<!--    处理适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--    试图解析器,统一的前缀后缀-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--        前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
<!--        后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    注入-->
    <bean id="/hello" class="com.song.controler.UserController"></bean>

3、controller、

public class UserController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("cc","hello");
        mv.setViewName("hello");
        return mv;
    }
}

很麻烦,看注解版如何简单:

注解版本

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <servlet>
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:aplicationcontext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 <filter>
     <filter-name>ecoding</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 </filter>
    <filter-mapping>
        <filter-name>ecoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

其中:/和/*有区别前者不会匹配到.jsp后缀请求,后者会,
不打算详细写了,列举一下会用到注解吧

@Controller//表示它下面的类是个是个控制类
@RestController//表示他是个返回体的控制类,赋值返回数据,例如json数据等,主要用于配合ajax等请求以及结合前端框架的数据
@Autowired//自动装配service层的bean,
@RequestMapping//请求路径
@ResponseBody//说明在他之下的方法是返回数据格式不是跳转页面,不经过试图解析器

差不多就这些
在这里插入图片描述

四、拦截器

java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
1、编写拦截器

public class UserInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute("user")!=null){
            return true;
        }else {
            request.getRequestDispatcher("jsp/login.html").forward(request,response);
        }
        return false;
    }

主要用来做登录拦截
spring-mvc.xml配置

<!--    拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean id="UserInterceptor" class="com.song.filter.UserInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
  • spring mvc大概就这些重要的东西,主要还是看ssm如何整合使用,掌握执行原理,会用拦截器就差不多了,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值