Struts2
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧!
1、拷贝Struts2所属文件 1.1struts.xml 1.2lib jar包 1.3web.xml添加复制 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 2、HelloWorld 2.1struts.xml <package name="default" namespace="/" extends="struts-default"> <action name="hello"> <result> /Hello.jsp </result> </action> </package> 2.2创建Hello.jsp <title>HelloStruts2</title> <body> Hello Struts2 <br> </body> 3、开发模式struts.xml <constant name="struts.devMode" value="true" /> constant常量 value设置为true 4、Struts流程 浏览器-Web容器-Struts过滤器-Action-jsp-返回 好处:请求与结果分开 5、package 解决命名冲突问题 6、namespace namespace决定了action的访问路径,默认:“”,可以接收所有路径的action。 7、class <action name="" class=""> class:action对应的处理类 public class name extends ActionSupport { @Override public String execute() { return "success"; } } extends ActionSupport需要继承ActionSupport execute()执行execute()方法 8、路径问题 struts2中的路径问题是根据action的路径而不是jsp路径来确定,不要用相对路径 <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <base href="<%=basePath%>" /> 9、动态调用DMI 一个action配置多个方法 9.1.通过配置文件struts.xml中action的method属性指定调用方法,如: <action method="调用方法名">; 9.2在URL中动态指定调用方法,使用感叹号“!”将action名和调用方法名分割开,如: http://localhost:8080/Struts2_DMI/user!add 10、通配符 10.1约定优于配置 10.2优先级精确大于通配,通配先后顺序匹配 <package name="user" extends="struts-default" namespace="/"> <action name="user_*" class="com.test.action.UserAction" method="{1}"> <result>/user_{1}.jsp</result> </action> </package> public class UserAction extends ActionSupport { public String add() { return SUCCESS; } public String delete() { return SUCCESS; } public String update() { return SUCCESS; } public String select() { return SUCCESS; } } <a href="user_add.action">添加页面</a><br> <a href="user_delete.action">删除页面</a><br> <a href="user_update.action">修改页面</a><br> <a href="user_select.action">查找页面</a><br> 11、Struts配置文件 struts2-core->org.apache.struts2->default.properties Struts默认编码uft-8 12、简单验证addField addFieldError("","");添加错误信息 <s:fielderror fieldName="" theme=""/>取得错误信息 theme主题可写可不写 fieldErrors 验证属性的值 actionErrors action错误 引入标签<%@taglib url="/struts-tags" prefix="s" %> <s:debug></s:debug>debug <s:property value=""/>取value stackt和stack context属性的值 13、访问web元素IOC控制反转方式 14、包含模块 <include file="">include包含相当于把文件复制 15、DefaultAction 默认Action主要处理访问页面不存在时。 16、result结果类型 16.1dispatcher默认结果类型,用来呈现JSP页面 服务器端跳转 16.2redirect将用户重定向到一个已配置好的URL 客户端跳转 16.3chain 将action和另外一个action链接起来 forword 16.4redirectAction 将用户重定向到一个已定义好的action 17、result跳转另一个包时 <result type="chain"> <param name="actionName"></param> <param name="namespace">/</param> </result> 18、全局的<result> <global-results> <result name="error">/Error.jsp</result> <result name="invalid.token">/Error.jsp</result> <result name="login" type="redirectAction">Logon!input</result> </global-results> 跨包引用extends 19、动态结果集 <!-- 表示往值栈里面取值 在该类中r是action的属性 而r是传入的数值所以是动态结果集 --> <result>${r}</result> public String execute() throws Exception { //根据传入数据动态决定跳转的jsp if(type == 1) r="/user_success.jsp"; else if (type == 2) r="/user_error.jsp"; return "success"; } 20、带参结果集 <result type="redirect">/user_success.jsp?t=${type}</result> <s:property value="#parameters.t"/>(可以获取到值) 21、struts OGNL对象图导航语言可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。 21.1访问值栈中的action的普通属性<s:property value="username"/> 21.2访问值栈中action的普通方法<s:property value="m()" /> 21.3访问值栈中对象的普通属性(get set方法)<s:property value="user.age"/>只有传,才能构造 21.4访问值栈中对象的普通方法<s:property value="password.length()"/> 21.5访问静态方法<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>前面@类名后面@静态方法名 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>常量设置真静态方法才能访问到 21.6访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>前面@类名后面@静态属性名 21.7访问Math类的静态方法:<s:property value="@@max(2,3)" /> 21.8访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/> 21.9访问List:<s:property value="users"/> 21.10访问List中某个元素:<s:property value="users[1]"/> 21.11访问List中元素某个属性的集合:<s:property value="users.{age}"/> 21.12访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/> 21.13访问Set:<s:property value="dogs"/> 21.14访问Set中某个元素:<s:property value="dogs[1]"/>没有顺序,取不到值 21.15访问Map:<s:property value="dogMap"/> 21.16访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/> 21.17访问Map中所有的key:<s:property value="dogMap.keys"/> 21.18访问Map中所有的value:<s:property value="dogMap.values"/> 21.19访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> 21.20投影(过滤):<s:property value="users.{?#this.age==1}[0]"/>this循环当中的每个对象 21.21投影:<s:property value="users.{^#this.age>1}.{age}"/> 21.22投影:<s:property value="users.{$#this.age>1}.{age}"/> 21.23投影:<s:property value="users.{$#this.age>1}.{age} == null"/> 21.24[]:<s:property value="[0].username"/>从第0个位置开始 22、标签 22.1通用标签 property获取数据值,并将数据值直接输出到页面中 set用于定义一个变量,通过此标签可以为所定义的变量赋值,还可以设置变量的作用域(application、request、session) bean用于创建并实例化一个javabean对象,并可以通过param标签对其赋值 include用于包含一个JSP页面或Servlet,只有一个属性value,必选属性。可以通过param传递参数 param主要对参数赋值,也可以当作其他标签的子标签。 debug 22.2 控制标签 ifelseifelse流程控制标签 iterator迭代数据的标签 subset从集合截取一段标签 22.3UI标签 theme主题 把所有主题定义为simple;fielderror特殊处理;自己控制其他标签的展现 23、BBS准备(设计约定、编码规定) 23.1库名:项目名 23.2表名 前缀:t_或_ 表名:驼峰标识和model一致 23.3字段名 字段名与属性名保持一致(尽量不要起名和数据库命名冲突)userId 23.4包名 建议用层来划分包com.163.model、action、service 23.5Action Action以Action结尾 23.6Dao Dao以Dao结尾 23.7*-*.jsp 23.8/ 23.9/admin 23.10package *action *adminAction 24、项目开发顺序 24.1建立界面原型 24.2建立struts.xml namespace package action result 修改界面原型 测试 24.3建立数据库 24.4建立model 24.5建立service(juit测试) 24.6开发 25、声明式异常处理 25.1在Action中进行导演映射 25.2在package中进行全局异常映射 25.3使用继承共用异常映射 25.4Struts中异常处理由拦截器实现 26、I18N 26.1原理 ResourceBundle和Locale的概念 资源文件 26.2Struts的资源文件 Action-Package-App级 一般只用App 27、Struts拦截器 拦截器动态地作用于Action和Result之间。 28、日期转换 <s:data name="d" format="yyyy/MM/dd HH:mm:ss"/>format格式化日期的样式