1. struts有几种action
有3种action,一种是普通的action,一种是dispach Action 一种是lookup dispach Action
Look up dispach action主要用于一个表单多个提交按钮的情况
ForwardActon: 该类用来整合Struts 和其他业务逻辑组件,通常只对请求作有效
性检查。
• IncludeAction: 用于引入其他的资源和页面。
• MappingDispatchAction: DispatchAction 的子类,一个action 可映射出多个Action
地址。
• SwitchAction: 用于从一个模块转换至另一个模块,如果应用分成多个模块时,
就可以使用SwitchAction 完成模块之间的切换。多个initparam 配置多个配置文件,每个配置文件是以模块,如config/otherModel otherModel为一个新的模块,访问时需要加上/otherModel/xxx.do
<forward name="success" contextRelative="true"
path="/newModule/index.do" redirect="true"/>
contextRelative=true的意思是path是相对于应用上下文的路径,contextRelative=false则是指path是相对于模块上下文的路径。
Actionform,配置DynaActionForm时property中的type必需是全路径的,使用dynaactionform的好处是不用创建很多的form
ValidateActionForm 只有访问特定action的时候才进行验证
ValidateForm只要用到指定form就进行验证。Struts源码中2种form将form各个字段名字作为key,将path作为key,可见将form各个字段名字作为key是指定一个form,用path作为key是指定一个action的
Struts普通form的验证,在action中可以配置是否验证,validate=true,默认为true
Struts验证框架验证时,form必须直接或间接继承validateForm,配置validator.xml,validator-rules.xml,并在struts-config.xml中引入验证框架
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validation.xml,/WEB-INF/validator-rules.xml"/>
</plug-in>
验证框架产生的错误消息都是从资源文件中读取的,页面上显示错误消息的方法为<html:errors/>
validatorActionForm跟validatorForm不同的地方时:validatorActionForm在validator.xml中form的名字是action标签的path的名字,也就是说跟action的path相同,用validatorForm时valitor.xml中form的name与action标签的name也就是form的名字保持一致。
Dynaactionform对应的可验证的form为DynavalidatorForm
Js验证需要在页面中添加<html:javascript forName=”formName” />,(这里的form那么是validator.xml中定义的那么一致)然后再需要验证的form标签中添加onsubmit事件,事件处理函数名称为:validate$formName() ;(这里的$formname是跟strutsconfig中定义的formname一致)。
客户端的验证对日期好像是有问题的:解决方案,date验证需要一个pattern参数就ok
<var>
<var-name>datePatternStrict</var-name>
<var-value>yyyy-MM-dd</var-value>
</var>
自定义规则也非常简单,在validator-rules.xml中添加规则,然后参照fielCheck编写自己的验证规则的代码就可以了。在需要js验证的情况,要在validator-rules.xml中配置自己的js函数具体如下:
<validator ……>
<javascript>
<![cdata[
Function functionname(form){}
]]>
</javascript>
</validator>
2. Jsp页面的2种跳转方式
控制转发:
重定向:
1 RequestDispatcher.forward() 属于控制转发,为相对路径
2 response.sendRedirect() 重定向,url为绝对路径
3 <jsp:forward page="" />
4 修改HTTP header的Location属性来重定向 request.setHeader(“location”,url)
5 pageContext.forward()
6 jsp中可以使用out.close或return终止后续代码的执行,return不会产生异常。流关闭后后面的内容将没办法写入流,所以out.close会报以个异常stream closed
7 对于cookie 有效期,1表示永久有效,负数表示不设有效时间,浏览器关闭cookie即失效,0表示失效。
8 Jsp多行注释 <%-- --%> 注释不能嵌套在其他的 <% %>之间。单行注释有 //,/* */,/** */
9 Jsp可以设置为一个servlet 只要将web.xml中的servlet标签下的classname 换成jsp-file就行,然后就可以实现jsp文件的url映射了
10 Load-on-startup 设置servlet启动的先后顺序,用于以个servlet的启动依赖其他servlet的情况。当值设置为负数或不设置的时候将在用到此servlet的时候初始化,当值大于0时在应用程序部署时加载和启动此servlet,按数值从小到大的顺序依次启动
11 实现Httpsessionbindinglistener可以实现对自身对象在session中状态的监控。放入session或从session中删除时会触发httpsessionbindingevent。Httpsessionbindinglistener有bindvale跟unbindvalue2个方法分别在绑定对象到session与从session删除对象时触发调用
12 Httpsessionactivationlistener可以使代码支持分布式环境及负载均衡fail-over(通路冗余)等,
13 对于javabean组件来说,有2个概念需要理解清楚。1是属性,get、set后面接的名字是javabean的属性,2是实例变量也就是javabean的类的变量,这2个概念不是一一对应关系。一个javabean可以在有很多属性的情况而没有内部变量。如:
Public Class TestBean{
Public setName(String name){
}
Public getName(){
Return “joke”;
}
}
对于这样一个javabean,虽然不好看,但它的确是一个有name属性的javabean,它没有内部变量。
所以,属性是实例变量更高层次的抽象。
14 Javabean有4种属性:简单属性,索引属性,约束属性,绑定属性,jsp主要用到简单属性与索引属性
15 JSP动作包括:
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
16 <jsp:useBean id=”id” class=”” type=”” scope=””/>
17 <jsp:setProperty name=”javabeanId ” property=”propertyName | *” value=”” param=”” /> param 跟value只能存在一个,param表示http请求的参数的名字,property=*表示http请求参数名字与属性名相同的‘对应赋值’
18 自定义标签的tag library descritor (tld)文件如果是打包成jar文件的话必须放在META-INF目录或其子目录下,如果是直接发布的则必须放在WEB-INF目录或其子目录下
19 引用标签库的方式有3种,一是在web.xml中设置taglib元素;二是将页面引入taglib的地址设置为tld文件的路径;三是在tld文件中设置uri元素,页面可以通过引用uri引用到tld文件
20 标签处理器的实例是会被缓存的,如果标签处理类定义了类属性,那么多次运行自定义标签的结果可能是不一样的
21 简单标签(simple tag)的bodycontent不能是jsp。实现简单标签只要继承simpletagsupport然后实现dotag方法即可
22 自定义标签还可以设置属性为动态的,只要在tld文件中设置<dynamic-attributes>true</dynamic-attributes>然后标签处理函数实现dynamicattributes接口,实现该接口必须要实现以个叫setdynamicattribute的方法
3. hibernate
load 与 get的区别,load会假设要加载的对象一定存在,它会首先查找缓存,如果没找到则创建代理,当用到的时候再去访问数据库,如果数据库中也不存在,则抛出objectnotfound异常。Get不会创建代理,它先查缓存,没有则查数据库,如果依然没有则返回null。
Hibernate同时支持hql,sql,qbc3种方式查询数据
Opensessionview模式,是创建一个filter在filter中关闭session,而在程序中不做session关闭操作
Casecade 级联操作,可选值为save-update,none,inverse翻转外键关系的维护,一般将一对多一边的字段设置inverse=true,由多对一的一边维护外键关系更合理,性能更好。
dynamic-insert="false" dynamic-update="false"
只修改有改变的列,提高性能的一种好的方式
4. spring配置文件详解
5. struts 配置文件详解
action不是线程安全的,因为有共享变量
6. 自定义标签。
1. 创建标签的处理类(Tag Handler Class)
2.创建标签库描述文件(Tag Library Descrptor File), 描述文件可以引用一个官方的dtd约束文件,具体引用方法可参照struts框架中自定义标签tld文档头
3.在web.xml文件中配置<tag>元素 <jsp:config></jsp:config>
4.在JSP文件中引人标签库
rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否可以使用JSP表达式.
Bodycontent有3个可选值jsp,empty,tagdependent
7. mysql
delimiter 设置分隔符,用以代替;,在定义存储过程的过程中,会需要用到分号作为语句的分割,所以将执行sql的分割符替换成别的,比如// 比如 |都是可以的
创建存储过程 create procedure procedurename(in param)
Begin
…..
End//
定义好了之后用call命令调用
修改用 alter procedure procedurename
删除用 drop procedure procedurename
创建索引: create index on tablename(colname(length)) 如果列是字符类型的可以指定按前面length
个字符建立索引
添加索引alter table structs add index e_count_1 (e_count DESC);
删除索引alter table structs drop index e_count_1
drop index e_count_2 on structs;
索引还可以指定type,具体支持情况如下表
存储引擎 | 允许的索引类型 |
MyISAM | BTREE |
InnoDB | BTREE |
MEMORY/HEAP | HASH, BTREE |
8. linux下的命令
pwd 查看当前系统路径
开机自动启动
在/etc/rc.d/rc.local中增加启动apache的命令,例如:/usr/local/httpd/bin/apachectl start
9. url重写技术,是seo优化的一种重要方式,在不支持cookie的浏览器中还是保持会话的有效方式(其实是需要将所有请求的url通过服务器端去设置一个jsessionId的参数)这真是以件十分繁重的劳动,再加上很少有用户禁用cookie,所以各大网站都没有使用url重写技术来保持会话
10. http协议相关:
以post提交表单时,表单数据是放在request body(请求实体)中传输的
以get提交时,表单数据会改变请求的url,然后把参数附加在请求url上
Post提交表单只保证在地址栏看不到参数,数据本省并没有加密,通过ssl实现https协议可以实现加密的连接
11. Jdk的概念 java development kit( java 开发套件),包括javac,java,javah,jar,javap,jconsole等等,它的版本包括j2se,j2me,j2ee
12. jre的概念Java Runtime Environment,Java运行环境。包括jvm标准实现及标准类库