文档章节

Spring提高

Romanceling
 Romanceling
发布于 2016/06/01 22:30
字数 697
阅读 97
收藏 4

Spring的分层;表单中文参数值的乱码问题;异常处理;拦截器

----------------------------------------------------------------------------------------------------------------------

Spring的分层
一.为什么要分层?
 - 为了方便系统的维护,方便系统的性能调优,方便测试,方便分工协作.

二.如何分层?
 - 表示层:数据的展现和用户操作界面.
 - 业务层:业务逻辑的处理.
 - 持久层:数据访问逻辑.

 - 表示层调用业务层,业务层调用持久层.
 - 下一层为上一层提供某种服务.上一层通过接口调用下一层提供的服务.


-----------------------------------------------------------------------------------------------------------------------
表单中文参数值的乱码问题
step1. 确保表单按照post方式提交。
step2. 配置spring提供的CharacterEncodingFilter过滤器。
step3. 确保页面编码与过滤器配置的编码一致。

  <filter>
      <filter-name>encoding</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>encoding</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
------------------------------------------------------------------------------------------------------------------------
异常处理:
一.通过在Spring的xml配置文件中定义处理:
    <!-- 配置异常处理器 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.NumberFormatException">error</prop>
                <prop key="java.lang.StringIndexOutOfBoundsException">error</prop>
            </props>
        </property>
    </bean>

二.注解实现异常处理:
@Controller
public class HelloController {
    @ExceptionHandler
    /**
     * 这是一个异常处理方法.
     * @ExceptionHandler
     * 方法的返回值是视图
     * ex:处理方法抛出的异常
     */
    public String exceute(Exception ex,HttpServletRequest request){
        System.out.println("HelloController的execute方法...");
        if(ex instanceof NumberFormatException){
            request.setAttribute("msg", "请输入正确的数字!");
            return "error3";
        }else if(ex instanceof StringIndexOutOfBoundsException){
            request.setAttribute("msg", "数组下标越界!");
            return "error3";
        }
        return "error4";
    }
}
----------------------------------------------------------------------------------------------------------------------
拦截器:(身份验证)

一.如何写一个拦截器:
step1. 写一个java类,实现HandlerInterceptor接口。
step2. 将拦截处理逻辑写在以下几个方法里面:
    - preHandle方法:前端控制器先调用preHandler方法,然后再调用处理器的方法。
      如果该方法返回值为true,表示继续向后调用,否则,处理结束。
    - postHandle方法:处理器的方法已经执行完毕,正准备返回ModelAndView对象给前端控制器时
      执行。所以,可以在该方法里面,修改ModelAndView。(比如,修改处理结果或者视图名)
    - afterCompletion方法:整个处理流程当中最后执行的方法。
step3. 配置拦截器


app.xml中的配置:
    <!-- 配置拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/toLogin.do"/>
            <mvc:exclude-mapping path="/login.do"/>
            <bean class="com.tarena.oss.interceptors.SessionInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

程序:public class SessionInterceptor implements HandlerInterceptor{

    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {        
    }

    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {    
    }

    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object arg2) throws Exception {
        System.out.println("SessionInterceptor的preHandle方法...");
        //session验证
        HttpSession session = req.getSession();
        Object obj = session.getAttribute("admin");
        if(obj==null){
            //没有登录,跳转到登录页面(重定向)
            res.sendRedirect("/springcase-nectoss/toLogin.do");
            //中断处理流程
            return false;
        }
        //已经登录成功,继续向后调用
        return true;
    }
}

© 著作权归作者所有

上一篇: SpringJDBC与MyBatis
下一篇: SpringMVC
Romanceling
粉丝 14
博文 166
码字总数 91809
作品 0
无锡
程序员
私信 提问
加载中

评论(0)

高效开发 Dubbo?用 Spring Boot 可得劲!

不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感。 为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦。 如果您只有...

中间件小哥
2019/01/10
0
0
Spring 框架的优点及缺点

首先Spring 是一个框架,使用Spring并不代表代码质量的提高,就像盖房子选择用上海的地皮还是北京的地皮一样,房子质量与土地所在的城市无关,与房子的具体设计方案和选料有关。 使用Spring ...

苏叶晚晚
2013/08/15
945
4
Spring Boot系列——5分钟构建一个应用

5分钟构建一个应用?没错!一点没有夸张,甚至不用5分钟就可以快速搭建并启动一个应用。 环境配置 1、JDK版本:Java8 2、IDE版本:Intellij IDEA 2018.1 3、系统:MAC OS 构建步骤 1、创建项...

Jackie_Zheng
2018/08/19
0
0
Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了

阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版。Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud...

中间件小哥
2019/08/29
0
0
关于hibernate,spring,lucene的几道题,答对几道算是对他们有基本了解了?

1, hibernate有哪三种检索方式?适用于那种场合? 2,持久化的三种状态及相互的转换? 3,映射继承的方式? 4,hibernate.cfg.xml中配置的方言是用来干什么的? 5,请阐述Session的作用和特...

军区文工团
2012/06/09
688
2

没有更多内容

加载失败,请刷新页面

加载更多

Flume概述及组成

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并...

长臂猿猴
26分钟前
64
0
将较小的显示器切换到较大的显示器时,有没有办法重新绘制tmux窗口?

假设您使用Terminal.app通过ssh连接到远程服务器。 当您使用较大的分辨率监视器“tmux attach”时,您之前启动了tmux,它会在控制台周围绘制点。 它不适合新的窗口大小。 有没有办法重绘和清...

技术盛宴
34分钟前
34
0
在两个日期之间查找对象MongoDB

我一直在围绕在mongodb中存储推文,每个对象看起来像这样: {"_id" : ObjectId("4c02c58de500fe1be1000005"),"contributors" : null,"text" : "Hello world","user" : { "following......

javail
49分钟前
59
0
《aelf经济和治理白皮书》重磅发布:为DAPP提供治理高效、价值驱动的生态环境

2020年2月17日,aelf正式发布《aelf经济和治理白皮书》,这是aelf继项目白皮书后,在aelf网络经济模型和治理模式方面的权威论述。 《aelf经济和治理白皮书》描述了aelf生态中各个角色及利益的...

AELF开发者社区
今天
53
0
战疫 | 高德工程师如何在3天上线“医护专车”

新冠状病毒肺炎疫情突袭,无数医护人员放弃与家人团聚,明知凶险,仍然奋战在一线。但因为武汉公交、地铁、网约车停运,医护人员上下班很难。白衣天使疾呼打车难。 (截图摘自《财经国家周刊...

amap_tech
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部