\
1.1 SSH概述
ssh是web开发中常见的一种框架
s-struts
s-spring
h-hibernate
其中struts在框架中充当控制器,实现MVC,主要用来处理用户的请求,和跳转页面。使项目结构清晰,开发者只需要关注业务逻辑的实现即可。
spring在ssh充当粘合剂,粘合struts-sping-hibernate,主要用来进行事物的控制,hibernate-充当数据库持久层,主要用它来与数据库交互,提高开发效率,减轻程序员sql控制要求,而且hibernate通过反射机制,有灵活的映射性,还支持各种关系,一对一,一对多,多对多。
在进行ssh整合的时候,我们应该注意:
-
Action继承于ActionSupport;
-
引入struts-spring-plugin.jar包,从而完成struts和spring的整合;
-
在struts2的action中注入service,保证service的名字和配置文件中的一致,并生成get,set方法;
-
Dao层继承于hibernateDaoSupport;
-
在dao层的配置文件中注入sessionFactory。
1.2 分页步骤
①前台封装一个显示分页的组件
②查询总条数
③后台封装分页工具类,计算开始位置、结束位置、总页数
④后台写支持分页的sql语句
⑤前台包含分页组件,实现分页效果
注意:
查询总条数的where和查询列表信息的where条件要保证一致。
1.3 如何防止表单重复提交*******************
针对于重复提交的整体解决方案:
1.用redirect来解决重复提交的问题
2.点击一次之后,按钮失效
3.通过loading
4.自定义重复提交过滤器
1.4 通过Struts2来解决表单重复提交
解决struts2重复提交,可以结合s:token标签来解决重复提交问题。
1.在前端的jsp页面中加入s:token标签,在访问该页面时就会生成隐藏域,该隐藏域中包含一个随机生成的字符串,并把该字符串存入session中。
2.在struts2的配置文件中加入token拦截器后,当正常访问action的时候,会从session中取出该字符串,然后和页面隐藏域中提交字符串做对比,如果一致则正常执行并删除session中存储的字符串。
1.5 拦截器
什么是拦截器:
拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用
正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码。
在项目中,我们经常用来拦截通过非正常程序而进行的访问
Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。
其中intercept方法是拦截器的核心方法,所有安装的拦截器都会调用之个方法。在Struts2中已经在struts-default.xml中预定义了一些自带的拦截器,如timer、params等。如果在标签中继承struts-default,则当前package就会自动拥有struts-default.xml中的所有配置。代码如下:
...
拦截器是Struts2框架的核心,它主要完成解析请求参数、将请求参数赋值给Action属性、执行数据校验、文件上传等工作
在struts-default.xml中有一个默认的引用,在默认情况下(也就是中未引用拦截器时)会自动引用一些拦截器。struts2中默认的拦截器是defaultStack.
自定义拦截器需要特别注意的是不要忘记引入struts2默认的拦截器。为了实现某些操作,我们可以自定义拦截器,
自定义拦截器有三种方式定义。分别为实现Interceptor接口,继承抽象类AbstractInterceptor,继承MethodFilterInteceptor类。
拦截器在项目中的运用:
同时可以减轻代码冗余,提高重用率。
如果要求用户密码、权限等的验证,就可以用自定义的拦截器进行密码验证和权限限制。对符合的登入者才跳转到正确页面。