美文网首页
SSM Spring MVC

SSM Spring MVC

作者: 极速魔法 | 来源:发表于2020-09-15 21:38 被阅读0次

    SpringMVC

    SpringMVC 实现了MVC,轻量级web框架
    封装了Servlet共有的行为(参数封装,视图转发)

    /web.xml/

    <!-- DispatchServlet配置 -->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
    <servletclass>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
     <init-param>
       <param-name>contextConfigLocation</param-name>   <param-value>classpath:spring-mvc.xml</param-value>
     </init-param> 
    <!-- 应用程序启动加载配置文件 ,值是正整数-->
    <load-on-startup>2</load-on-startup>
    </servlet>
    
    <servlet-mapping>
      <servlet-name>DispatcherServlet</servlet-name>
        <!--/匹配所有访问路径,不会匹配*.jsp,/*匹配所有,包括*.jsp -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    java web执行流程

    tomcat服务器

    1. 接收请求,解析请求资源地址
    2. 创建request对象
    3. 创建response对象
    4. 调用目标资源,DispatchServlet调度分发给对应的controller
    5. 获得response中内容,组装http响应返回给客户端

    SpringMVC执行流程

    流程图解
    • 前端控制器(DispatchServlet)
    • 处理器映射器(HandlerMapping)
    • 处理器适配器(HandlerAdaptor)
    • 处理器(Handler)
    • 视图解析器(ViewResolver)
    • 视 图页面 jsp

    spring mvc三大组件�

    处理器映射器(HandlerMapping)
    处理器适配器(HandlerAdaptor)
    视图解析器(ViewResolver)

    <!--处理器映射器-处理器适配器功能增强;支持json读写 -->
    <mvc:annotation-driven />
    
    <!-- 视图解析器 -->`
    <bean id="viewResolver class="xxx.InternalResourceViewResolver">
    <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/pages/"></property>
      <property name="suffix" value=".jsp"></property>
    </bean>
    

    RequestMapping 注解

    // xxx/quick?accountName=tom
    @RequestMapping(path=“/quick”,method=RequestMethod.GET,params={“accountName”})
    public String findByName(String accountName) 
    

    获取参数

    基本类型参数
    get参数和controller中的参数名一致

    对象参数
    表单的name值和 java bean 属性一致

    集合类型参数
    集合参数包装到一个POJO中

    自定义转换器

    public class DateConverter implements Converter<String,Date> {
        @Override
        public Date convert(String s) {...}
    }
    

    /spring-mvc.xml/

    <!--处理器映射器和适配器增强-->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotationdriven>
    
    <!-- 自定义转换器 -->
    <bean id="conversionService" class="xxx.COnversionServiceFactoryBean">
        <property name="converters">
        <set>
            <bean class="com.lagou.DateConverter"/>
        </set>
    </bean>
    
    /*
    * @RequestParam,解决表单和控制器参数不一致
    * url:xxx/?pageNo=2
    */
    @RequestMapping("/findByPage")
    public String findByPage(�@RequestParam(name="pageNo",defaultValue="1",required=false) Integer pageNum)
    
    // 获取请求头 cookie信息赋值给 变量 cookie
    public String requestHead(@RequestHeader("cookie") String cookie)
    
    // 获取cokie中key= JSESSIONID的值 给变量 jessionId
    public String cookieValue(@CookieValue("JSESSIONID") String jessionId)
    

    响应

    • 页面跳转
      • 返回字符串逻辑视图
      • void原始Servlet API,WEB-INF:安全目录,不允许外部请求直接访问目录资源,只可以进行服务器内部转发
    // 请求转发,不走视图解析器,foraward 后面跟全路径,
    return “forward:/WEB-INFO/pages/success.jsp”;
    // 跳转到控制器方法
    return “forward:/product/products”;
    
    // 重定向,不走视图解析器
    return "redirect:/index.jsp";
    
    // 页面取model的值 ${username}
    public String forward(Model model) {
        //底层使用request.setAttribute()
        model.addAttribute("user","tom");
    }
    
    • ModelAndView
    // 方式一
    public ModelAndView returnModelView() {
        ModelAndView modelAndView = new ModelAndView();
        //设置模型数据
        modelAndView.addObject("username", " lagou"); 
        //设置视图名称 
        modelAndView.setViewName("success"); 
        return modelAndView;
    }
    
    // 方式二
    public ModelAndView returnModelView(ModelAndView modelAndView){...}
    
    • 返回数据
      1. 直接返回字符串,response.getWriter().write(xxx)
      2. 对象或集合转json返回

    @SessionAttributes

    多个请求之家共享数据,作用于

    // request域中 model中存入key 为 username时,同步到session中
    @SessionAttributes("username")
    

    静态资源访问

    /spring-mvc.xml/

    <!--放行全部静态资源-->
    <mbc:defalut-servlet-handler/>
    

    Spring MVC进阶

    json

    // @RequestBody,提交数据为json形式时,通过 HttpMessageConverter接口转换为对应的POJO对象。
    @RequestMaping("/ajaxRequest")
    @RequestBody //响应转为json
    public void ajaxRequest(@RequestBody List<User> users) {
        return users;
    }
    

    RESTful风格

    @RequestMapping(value="/user{id}",method=RequestMethod.GET)
    @ResponseBody // 直接响应,不会页面跳转
    public String findById(@PathVariable Integer id) { 
    // @PathVariable获取占位符的值,占位符和参数名相同
        return ”findById“;
    }
    
    @RestController // 组合@Controller和@ResponseBody
    @GetMapping("/user/{id}") // @RequestMapping(value="/user{id}",method=RequestMethod.GET)
    

    文件上传

    • 表单项 type=”file“
    • 提交方式 method=“POST”
    • enctype=“multipart/form-data ”
    <!--文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    
    <!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
    
    <property name="maxUploadSize" value="5242880"></property>
    
    <!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
    
    <property name="maxInMemorySize" value="40960"></property> </bean>
    
    // 单文件MultipartFile,多文件MultipartFile[]遍历数组依次保存
    public String fileUpload(String username,MultipartFile filePic) {
        // 上传的文件名
      String original=filePic.getOriginalFilename();
        filePic.transferTo(new File("/upload"+original));
    }
    
    

    Spring MVC异常处理

    接口 HandleExceptionResolver(异常处理器)

    /web.xml/

    <!--处理500异常--> 
    <error-page>
        <error-code>500</error-code>
    
    <location>/500.jsp</location> </error-page> <!--处理404异常--> <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location> 
    </error-page>
    

    拦截器(interceptor)

    拦截器 过滤器区别

    • 过滤器Servlet规范一部分,拦截器 springmvc框架
    • 拦截器拦截访问的控制器方法,不拦截 .jsp html css js;过滤器配置 /* 拦截所有
    public class MyInterceptor implements HandleInterceptor {
    // 目标方法执行之前,return true 放行
        public boolean preHandler()
    
    // 目标方法执行之后,视图对象返回之前,获得Controller处理后的ModelAndView
        public void postHandler()
    
    // 流程都执行完(视图完成了跳转后)
        public void afterCompletion()
    }
    

    /spring-mvc.xml/

    <!--配置拦截器-->
     <mvc:interceptors>
    
        <mvc:interceptor> <!--对哪些资源执行拦截操作-->
            <mvc:mapping path="/**"/>
            <bean class="com.lagou.interceptor.MyInterceptor1"/>
        </mvc:interceptor>
    
    </mvc:interceptors>
    

    Spring整合mybatis

    <!--注解组件扫描--> <context:component-scan base-package="com.lagou.service"/>
    
    <!--spring整合mybatis-->
    
    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    
    <property name="driverClassName" value="${jdbc.driver}"/>
    
    <property name="url" value="${jdbc.url}"/>
    
    <property name="username" value="${jdbc.username}"/>
    
    <property name="password" value="${jdbc.password}"/>
    
    </bean>
    
    <!--SqlSessionFactory创建交给spring的IOC容器-->
    
    <bean id="sqlSessionFactory"
    
    class="org.mybatis.spring.SqlSessionFactoryBean">
    
    <!--数据库环境配置-->
    
    <property name="dataSource" ref="dataSource"/>
    
    <!--类型别名配置-->
    
    <property name="typeAliasesPackage" value="com.lagou.domain"/>
    
    <!--如果要引入mybatis主配置文件,可以通过如下配置-->
    
    <!--<property name="configLocation"
    
    value="classpath:SqlMapConfig.xml"/>-->
    
    </bean>
    
    <!--映射接口扫描配置,由spring创建代理对象,交给IOC容器-->
    <!-- 对应SqlMapConfig.xml
    <mappers>
        <package name="com.lagou.dao"/>
    </mappers> 
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    
    <property name="basePackage" value="com.lagou.dao"/>
    
    </bean>
    

    spring整合 spring mvc

    <!--spring 与 web容器整合--> 
    <listener>
      <listener-class>
      org.springframework.web.context.ContextLoaderListener
      </listener-class> 
    </listener> 
    
    <context-param>
    
        <param-name>contextConfigLocation</param-name>
    
        <param-value>classpath:applicationContext.xml</param-value> 
    </context-param>
    

    字段和属性名不一致?配置resultMap

    相关文章

      网友评论

          本文标题:SSM Spring MVC

          本文链接:https://www.haomeiwen.com/subject/ftrqyktx.html