ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ssm框架复习巩固

2021-12-30 23:36:39  阅读:126  来源: 互联网

标签:web 拦截器 复习 框架 request param public ssm response


SSM框架复习第九天:SpringMVC类型转换服务 异常处理 拦截器 restfu编程l风格

1.类型转换服务

例如:前端传过来的日期格式是2021-12-30,正常是帮你转换不了的,需要你自己去写一个日期格式转换器才可以,它只可以帮你去转换2021/12/30这种格式,因为SpringMVC里面内置了很多类型转换器

1.1实现步骤

第一步:导入依赖

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <!--jackon相关的依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

2.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>


  <!--配置Springmvc   DispatcherServlet(Springmvc核心前端控制器)-->

  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--是让spring的前端控制器在创建的时候就加载springmvc.xml配置文件创建各种controller对象-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--可以让Servlet的服务器启动的时候创建-->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


  <!--配置解决中文乱码的过滤器 POST请求乱码-->
  <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>
</web-app>

3.在SpringMV配置文件中配置相关组件

<?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"
       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">

    <!--配置包扫描    创建所有得Controller对象  -->
    <context:component-scan base-package="com.bianyiit.web"></context:component-scan>


    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--指定逻辑视图  到   物理视图转换的前缀  -->
        <property name="prefix" value="/WEB-INF/views/"></property>

        <!--指定逻辑视图  到   物理视图转换的后缀  -->
        <property name="suffix" value=".jsp"></property>

    </bean>

    <!--指定springmvc不拦截js目录的资源-->
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>

    <!--要配置类型转换服务-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
               <bean class="com.bianyiit.resolver.String2DateConverter"></bean>
            </set>
        </property>
    </bean>

    <!--自动的加载SpringMVC另外两个组件 处理器映射器   处理器适配器 -->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

</beans>

4.写一个字符串换行指定日期格式的转换类,需要实现Converter接口

public class String2DateConverter implements Converter<String,Date> {

    @Override
    /**
     *   方法参数     需要被转换的源数据   2021-12-30
     *   方法返回值   转换之后的对象
     */
    public Date convert(String source) {

        System.out.println(source);

        Date date = null;
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            date = dateFormat.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

2.异常处理

在日常开发中难免会出现一些困难出现的异常情况,这时需要我们对这些可能出现的异常情况做一些相关处理,可以提升用户的体验。

2.1.实现步骤

1.导入依赖(同上)

2.在web.xml中配置相关信息(同上)

3.在springMVC配置文件中配置相关组件

<?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"
       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">

    <!--配置包扫描    创建所有得Controller对象  -->
    <context:component-scan base-package="com.bianyiit.web"></context:component-scan>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--指定逻辑视图  到   物理视图转换的前缀  -->
        <property name="prefix" value="/WEB-INF/views/"></property>
        <!--指定逻辑视图  到   物理视图转换的后缀  -->
        <property name="suffix" value=".jsp"></property>
    </bean>
     <!--注册异常处理组件-->
    <bean class="com.bianyiit.resolver.CustomExceptionResolver"></bean>
    <!--指定springmvc不拦截js目录的资源-->
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
    <!--自动的加载SpringMVC另外两个组件 处理器映射器   处理器适配器 -->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

4.定义相关异常类实现HandlerExceptionResolver接口

/**
 * 异常处理组件
 */
public class CustomExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
          //日志记录
        modelAndView.addObject("msg",ex.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

3.拦截器(Intecepter)

springMVC中有一个根JavaWeb中过滤器很相似的东西就是拦截器。

拦截器:拦截器是springMVC提供的一套类似于过滤器的机制   拦截器是SpringMVC框架提供的和Servlet规范没有关系 拦截器只能在SpringMVC的环境下运行 拦截器只能拦截SpringMVC的Controller(控制器)方法的请求html css js servlet   过滤器(Filter) Servlet规范的一部分 · 拦截器所有请求 html css js servlet 只要是web项目,都可以使用

3.1.实现步骤

1.导入依赖(同上)

2.web.xml配置(同上)

3.SpringMVC配置文件配置相关组件

<?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"
       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">

    <!--配置包扫描    创建所有得Controller对象  -->
    <context:component-scan base-package="com.bianyiit.web"></context:component-scan>


    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--指定逻辑视图  到   物理视图转换的前缀  -->
        <property name="prefix" value="/WEB-INF/views/"></property>

        <!--指定逻辑视图  到   物理视图转换的后缀  -->
        <property name="suffix" value=".jsp"></property>

    </bean>

    <!--springmvc拦截器配置-->
    <mvc:interceptors>
        <!--拦截器谁先配置谁先执行-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.bianyiit.intecepter.CustomIntecepter2"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.bianyiit.intecepter.CustomIntecepter1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

    <!--指定springmvc不拦截js目录的资源-->
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>


    <!--自动的加载SpringMVC另外两个组件 处理器映射器   处理器适配器 -->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

4.定义拦截器相关的类

public class CustomIntecepter1 implements HandlerInterceptor {
    /**
     * 请求到达目标资源之前先执行
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("CustomIntecepter1   preHandle....");


//        request.getRequestDispatcher("/WEB-INF/views/error.jsp").forward(request,response);

//        response.sendRedirect("/WEB-INF/views/error.jsp");
        /*
            如果返回true放行请求
            如果返回false 拦截请求(不放行请求)
         */
        return false;
    }

    /**
     * 目标资源执行完毕之后执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                    @Nullable ModelAndView modelAndView) throws Exception {

       System.out.println("CustomIntecepter1  postHandle .....");

//       modelAndView.setViewName("error");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                         @Nullable Exception ex) throws Exception {

        System.out.println("CustomIntecepter1   afterCompletion........");
    }
}

4.restful编程风格

restful风格可以URL唯一确定服务器中的一个资源

http请求的方式有七种

但是常用的有四种:get  post  put  delete

这四种请求方式分别对应一个操作:

get:查询数据操作

post:添加数据操作

put:修改数据操作

delete:删除数据操作

///user/id是多少,例如:1,2,3... 
@RequestMapping("/user/{id}")
    public String helloWorld4(@PathVariable("id") String id){
        System.out.println("查询第:" + id + "个用户");
        return "hello";
    }

今日学习感受:其实学习有时候是有一定套路的,有一套固定的学习套路,当然需要你学习一段时间后会慢慢发现其中的规律。写博客是让自己对当日学习的东西做一总结,并且对当日学的中学到的东西可以温习一遍并且可以巩固,对在学习中遇到的一些问题,可以自己先去尝试着去解决,这样可以加深自己的印象,促进自己的学习效率。最后一句话:学习是人类发展进程中最有力的技能!

标签:web,拦截器,复习,框架,request,param,public,ssm,response
来源: https://www.cnblogs.com/lz-km/p/15751001.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有