1、拦截器与过滤器
过滤器(filter),过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过滤器进行过滤。如过滤编码,IP
拦截器(interceptor),拦截器是一种面向方面/切面编程(AOP Aspect-Oriented Programming),而面向切面就是将多个模块的的通用服务进行分离,如权限管理、日志服务,他们在多个模块中都会用到,就可以将其各自封装为一个可重用模块。
执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。
waf过滤器实现:
1 <filter> 2 主过滤器filter名称及实现类class 3 <filter-name>WebCastellum</filter-name> 4 <filter-class>org.webcastellum.WebCastellumFilter</filter-class> 5 </filter>
拦截器实现:
1 <interceptors> 2 <!-- sid,rmkey登录Session验证 --> 3 <interceptor class="richinfo.frame.ext.valid.SidRmKeyValidator"> 4 <includes> 5 <exclude> 6 calendar:syncAddCalendar|calendar:syncGetCalendar|calendar:syncUpdateCalendar| 7 calendar:syncDelCalendar|calendar:syncGetCalendars|calendar:syncDebrisCalendars| 8 calendar:smsUpdateInviteStatus 9 </exclude> 10 <include>calendar:*</include> 11 </includes> 12 </interceptor> 13 </interceptors>
2、传真服务的原理:
获取文件名,上传路径使用ftp上传
3、线程,加锁
4、structs防止表单重复提交
Struts 2已经内置了能够防止用户重复提交同一个HTML表单的功能。它的工作原理:让服务器生成一个唯一标记,并在服务器和表单里各保存一份这个标记的副本。此后,在用户提交表单的时候,表单里的标记将随着其他请求参数一起发送到服务器,服务器将对他收到的标记和它留存的标记进行比较。如果两者匹配,这次提交的表单被认为是有效的,服务器将对之做出必要的处理并重新设置一个新标记。随后,提交相同的表单就会失败,因为服务器上的标记已经重置。
1 <struts> 2 <package name="avoidPackage" extends="struts-default"> 3 <action name="avoid" class="struts2.action.AvoidAction"> 4 <interceptor-ref name="token"></interceptor-ref> 5 <interceptor-ref name="defaultStack"></interceptor-ref> 6 7 <result name="invalid.token">/error.jsp</result> 8 <result name="input">/input.jsp</result> 9 <result name="success">/output.jsp</result> 10 </action> 11 </package> 12 </struts>
jsp如下:
<s:token></s:token>
5、spring事务,ibatis事务
ibatis事务:
对于多条SQL 组合而成的一个JDBC 事务操作而言,必须使用
sqlMap.startTransaction、
this.sqlMapClient = SqlMapClientBeanFactory.createSqlMapClient();
ExtendedSqlMapClient client = (ExtendedSqlMapClient) sqlMapClient;
SqlMapExecutorDelegate delegate = client.getDelegate();
sessionMax = DBConfig.getInstance().getPropertyInt(
"ibatis.max.concurrent.session", 128);
requestMax = DBConfig.getInstance().getPropertyInt(
"ibatis.max.concurrent.request", 500);
delegate.setMaxSessions(sessionMax);// 增大并发量,默认才128,太小了
delegate.setMaxRequests(requestMax);// 增大并发量,默认才500,太小了
// 实例化代理对象
proxy = new IbatisSqlMapClientProxy(delegate);
sqlMap.commitTransaction()、
1 TransactionStateInfo.geTransactionStateInfo() 2 .setState(State.commit); 3 SqlMapSessionImpl session = proxy.getLocalSession(); 4 Connection conn = TransactionStateInfo.geTransactionStateInfo() 5 .getConnection(); 6 try 7 { 8 commit(session, conn); 9 log.info("commit transaction..."); 10 }
rollbackTransaction()
conn.rollback();
和sqlMap.endTransaction 操作以实现整体事务的原子性。
spring事务:
纯JDBC操作数据库的基本步骤:
1. 获取连接 Connection conn = DriverManager.getConnection()
2. 开启事务conn.setAutoCommit(true/false);
3. 执行CRUD
4. 提交事务/回滚事务 conn.commit() / conn.rollback();
5. 关闭连接 conn.close();
使用Spring的事务管理功能后,我们可以不再写步骤 2 和 3 的代码,而是由Spirng 自动完成。
6、HttpSession实现实时显示在线人数:
servlet创建一个HttpSession是对象,保存人数信息,使用setAttribute()和getAttribute()方法存储和检索对象。
7、oracle中varchar(2)的长度是多少?
最大存储长度为4000个字节,在plsql中,其最大存储长度可以达到32767个字节。
8、队列
把对象放在安全有序的集合中。其中arrayList是不安全但是有序的,LinkList是不安全无序的。vector是安全有序的
9、oracle的内置函数