1.命名空间只有一个级别。如果请求的URL是/bookservice/search/get.action,系统将先在/bookservice/search的命名空间下查找名为get的Action,如果在该命名空间内找到名为get的Action,则由该Action处理用户请求;如果在该命名空间下没有找到名为get的Action,系统将直接进入默认的命名空间中查找名为get的Action,而不会再/bookservice的命名空间下查找名为get的Action。
2.当用户配置Action类没有指定class属性时,系统自动使用ActionSupport类作为默认的Action处理类。
3.JSP中通过表达式访问ServletContext对象的属性:${applicationScope.counter}
JSP中通过表达式访问HttpSession对象的属性:${sessionScope.user}
JSP中通过表达式访问HttpServletRequest对象的属性:${requestScope.tip}
4.向response中添加cookie:
Cookie c = new Cookie("user",getUsername);
c.setMaxAge(60*60);
response.addCookie(c);
5.struts2中直接访问Servlet API:ServletActionContext类
static PageContext getPageContext();
static HttpServletRequest getRequest();
static HttpServletResponse getResponse();
static ServletContext getServletContext();
6.对于使用Struts2框架的应用而言,尽量不要让超级链接直接链接到某个试图资源,因为这种方式增加了额外的风险。推荐将所有请求都发送给Struts2框架,让该框架来处理用户请求,即使只是简单的超级链接。
对于只是简单的超级链接的请求,可以通过定义name为*的Action(该Action应该放在最后定义)实现。
7.系统默认Action定义:<default-action-ref name="XXX"/>
8.plaintext结果类型是用于显示视图资源源文件的结果类型。
<result type="plaintext">
<param name="location">/welcome.jsp</param>
<param name="charset">GBK</param>
</result>将显示welcome.jsp的源文件内容,并指定了页面编码为GBK
9.dispatcher结果类型与redirect结果类型的差别主要就是转发和重定向的差别:重定向会丢失所有的请求参数,请求属性——当然也丢了Action的处理结果。
10.配置<result>元素时,不仅可以使用{0}表达式形式来指定视图资源,还可以使用${属性名}的方式来指定视图资源。在后面这种配置方式下,${属性名}里的属性名就是对应Action实例里的属性。
使用OGNL表达式来指定结果资源:
<result type="redirect">edit.action?skillName=${currentSkill.name}</result>
11.web页面,装饰,布局,应用整合框架:sitemesh,Tiles
12.短路校验器的作用(客户端校验不支持短路):限制只输出一条校验失败信息,在field-validator上添加属性short-circuit="true"
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>${getText("name.requried")}</message>
</field-validator>
13.Action中属性为复合类型的struts2校验方法:使用Visitor校验器
Visitor校验器主要用于检测Action里的复合属性,例如一个Action里包含了User类型的属性。
假设某Action中有User user的属性:
则他对应的校验规则为:
...
<field name="user">
<field-validator type="visitor">
<param name="context">userContext</param>
<param name="appednPrefix">true</param>
<message>用户的:</message>
</field-validator>
</field>
...
再建立文件:User-userContext-validation.xml 内容与普通属性验证规则文件内容相同
14.struts2要求所有的Ajax标签指定href属性时,都应该指向一个有url标签生成的变量,而不是直接给出Action名
15.将一个方法以参数的形式传递给另外一个方法,然后在合适的时间后者在其中调用前者,这就是回调的概念。
16.接口在工厂模式下的应用。
在工厂模式下,用户不需要知道工厂内部实现细节,只需要一个xxxFactory.getInstance()即可获取需要的对象,而这个对象的类型就是某个接口类型,也就可以根据接口的定义调用对象中的方法,而不用关心其具体实现。一个典型的应用就是获取不同数据库类型的数据库操作对象,工厂内部可以根据不同情况返回不同的对象,但是这些对象都实现了相同的接口,返回的对象类型都是同一个接口类型。这样就实现了数据层和应用层的分离。
如:统一的数据操作接口:DataOpera定义了数据的读取和存入的函数;工厂类DataOperaFactory提供获取DataOpera类型对象的函数;AbstracteDataOpera抽象类实现了DataOpera接口并集合了相同的数据操作;MySqlDataOpera,SqlSvDataOpera,OracalDataOpera则是具体数据库的实现,继承了AbstracteDataOpera。