Action的几种开发模式
1、写一个类继承ActionSupport,可以使用这个类的一些功能 2、写一个类实现Action接口,重写execute方法,不能使用ActionSupport中定义的方法 3、既不继承也不实现,直接在该类中编写一个方法处理我们的逻辑,什么功能也不能实现
struts的通配符
<action name="user_*_*" class="" method={1}"> <result name="{1}">/{2}.jsp</result> </action>struts的路径匹配
namespace=”/”默认的命名空间 namespace=”/a”自定义的命名空间 localhost:8080/项目名/a 访问路径 匹配原则 如果是localhost:8080/项目名/a/b/c这样的路径,那么它的查找方法如下 */a/b/c */a/b */a
struts的常量使用 找到default.properties文件 修改里面的常量
<!--这个就是表示的上传文件的大小的最大值--> <constant name="struts.multipart.maxSize" value="123456789"></constant> <!--设置的是struts的编码--> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!--设置的是struts默认的访问后缀 value="action的时候表示的是后缀必须是action 否则访问不到" value="action,do":表示后缀只能是action或者do不能是其他的 value="action,do,":表示后缀可以是action或者do或者没有后缀 --> <constant name="struts.action.extension" value="action,do,"></constant> <!--允许动态方法的调用 动态方法就是在actionName的基础上直接加上!再加上方法名 这样直接去指定执行某一个方法 就叫做动态方法 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!--xml改变之后自动的加载文件--> <constant name="struts.configuration.xml.reload" value="true"></constant>struts的默认配置 全局结果集(原则局部优先)
<global-results> <result name="success">/index.jsp</result> </global-results>由于struts-default有默认action配置
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />action可省略类和方法 struts的数据处理 1、通过Servlet的API去完成数据放置到域对象中 (问题产生struts与servlet耦合问题)
HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); //向域对象里面添加数据 request.setAttribute("request_","这里是request对象的数据"); session.setAttribute("session_","这里是session对象的数据"); application.setAttribute("application_","这里是application对象的数据");2通过ActionContext去获取域对象
ActionContext context = ActionContext.getContext(); //通过实例获取域对象 Map<String, Object> session = context.getSession(); Map<String, Object> application = context.getApplication(); Map<String, Object> request = context.getContextMap(); //向域对象里面添加数据 session.put("session_", "Session的数据"); request.put("request_", "resuest的数据"); application.put("application_", "application的数据");3、通过实现RequestAware 或者 SessionAware 或者 ApplicationAware来实现将数据放到域对象中去 *并且设置三个字段的set方法*struts自动帮我们注入域对象中去 这个方法可以作为基类
public class CustomAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware { private Map<String, Object> application; private Map<String, Object> session; Map<String, Object> request; }struts的数据自动封装
1、创建javabean对象 2、创建一个类继承ActionSupport 在这个类中写 方法一、set方法注入
注意以前的版本的注入方式: 采用构造方法的方式(eclipse中)
private User user=new User();当前版本的注入方式(MyEclipse):
private User use public void setUser(User user) { this.user = user; } public User getUser() { return user; }日期类型的转换器 写一个类继承StrutsTypeCover 重新方法
convertFromString:将字符串转换成其他的类型 convertToString:将其他的类型转换成字符串
编写配置文件
1、 配置文件名称必须是 ActionName-conversion.properties 格式 java.util.Date=action全路径 2、配置文件的内容:转换器的属性 JavaBean对象.属性 3、配置文件必须位于Action同目录下