Spring-MVC

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Spring-MVC,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

单例模式。

    1.什么是单例? 系统运行期间有且仅有一个实例。

    2.为什么要有单例?系统中的一些对象只需要初始化一次即可,例如:KTV中的播放器或者初始化系统参数。

    3.单例模式的要求:

        *【1】一个类只有一个实例

                只提供私有的构造器。

private SingletonClass(){
    }

        【2】必须自己创建这个实例

                定义该类的静态私有对象。

private static SingletonClass single;

        【3】必须自己向系统提供这个实例。

                创建一个公共的静态方法,返回这个实例。

public static SingletonClass getSingleton(){
        if(single==null){
            initSingleton();
        }
        return single;
    }

4.饿汉模式:不管你用不用我都给你创建这个实例。(官方语言:在类加载的时候创建这个实例)。

            天然线程安全的,每个类中获取这个对象的耗时基本一样

    

    5.懒汉模式:在你调用的时候才创建这个实例。不是线程安全,第一次获取此对象会耗时较多。

    6.下面是饿汉模式,使用静态内部类实现延迟加载。

public class SingleTon {
     
     private SingleTon() {
          
     }
     
     private static SingleTon singleTon;
     
        // 静态内部类
     public static class SingletonHelper{
          private static final SingleTon INSTANCE = new  SingleTon();
     }
     
     public static SingleTon getSingleTon() {
          singleTon = SingletonHelper.INSTANCE;
          return singleTon;
     }
     
}

  

  线程安全:饿汉式天生就是线程安全的,懒汉式本身是非线程安全的。

    资源加载和性能:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

SpringMVC中静态资源(js,图片,css)的加载。

<mvc:resources location="/static/"  mapping="/staticabc/**"/>

SpringMVC中的转发和重定向(redirect)

SpringMVC中使用ServletAPI。

springMVC的异常处理:

    局部异常处理。只能作用于单个controller。

@ExceptionHandler(value=RuntimeException.class)
     public String error() {
          return "error";
     }

全局异常处理。作用于整个springMVC.

<!-- 全局异常处理 -->  
 <bean  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <property name="exceptionMappings">
          <props>
               <prop key="java.lang.RuntimeException">error</prop>
          </props>
     </property>         
 </bean>

在web项目启动中加载spring的上下文,中文乱码问题。在web.xml中配置:

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

  <filter>
    <filter-name>encodingFilter</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

解决视图到控制层的date类型的转换问题。

    @DateTimeFormat(pattern = "yyyy-MM-dd")  //String转换Date,视图到控制层
    @JSONField(format = "yyyy-MM-dd")  //自定义时间戳转换格式
    private Date birthday;

解决ajax请求的返回值问题。原理:直接将数据写入到响应体中。

@ResponseBody

解决视图层到控制层的中文乱码问题,加入过滤器解决。

<filter>
    <filter-name>encodingFilter</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

解决ajax请求返回值的乱码和统一设置日期类型转换的问题。控制层到视图层

<mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="features">
                    <list>
                       <!-- Date的日期转换器 -->
                      <value>WriteDateUseDateFormat</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>

拦截器

应用场景

1、日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。

2、权限检查:如登录检测,进入处理器检测是否登录,如果没有直接返回到登录页面。

3、性能监控:典型的是慢日志

public class SysInterceptor implements  HandlerInterceptor{
     /**
     * 预处理回调方法,实现处理器的预处理(如检查登陆),第三个参数为响应的处理器,自定义Controller
     * 返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
     */
     @Override
     public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler)
              throws Exception {
          // TODO Auto-generated method stub
          return false;
     }
     /**
     * 后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
   */
     @Override
     public void postHandle(HttpServletRequest request,  HttpServletResponse response, Object handler,
              ModelAndView modelAndView) throws Exception  {
          // TODO Auto-generated method stub
          
     }
     /**
     * 整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中
     */
     @Override
     public void afterCompletion(HttpServletRequest  request, HttpServletResponse response, Object handler,  Exception ex)
              throws Exception {
          // TODO Auto-generated method stub
          
     }
}
<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/hello/**"/>
            <mvc:exclude-mapping path="/hello/hello04"/><!--不在拦截范围内-->
            <bean class="com.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161200.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!