一、开发步骤:
1、确定包的命名和使用规则
com.sxt.dao 连接数据的底层类 以及接口类(主要是对数据库中的表有哪些操作)
com.sxt.dao.impl 接口dao接口类的实现类 (编写具体的方法,对数据中的表进行操作)
com.sxt.service 业务类的接口类(主要书写一些业务的方法,但是没有具体的实现)
com.sxt.service.impl 业务类接口的实现类(主要对接口的方法进行具体的实现)
com.sxt.util 工具类(编写一些常用的工具方法)
com.sxt.test 测试类(测试程序是否存在错误)
com.sxt.action 核心控制器类
2、配置xml文件
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、编写代码
3.0、编写实体类
3.1、编写数据库底层类 、以及接口类
3.2、数据库接口实现类
3.3、业务接口类以及业务接口类实现类
3.4、编写action控制器类
3.5、编写jsp界面
4、配置struts文件(重点)
解决问题:怎样从一个action跳转到另外一个action
<result name="success" type="redirectAction"(result中配置属性 type 值为 redirectAction--跳转到另一个action)>list(action属性name 的值)</result>
5、页面对数据的处理(重点)
解决问题:怎样养表单中的数据封装成一个对象
<input type="password" name="user.userpass"(使用user.userpass 直接把值赋到实体类中的userpass上) value="${user.userpass}"/>
(user代表action中的属性,只不过是一个对象) 如下:
private Userinfo(实体类) user;
private List<Userinfo> list;
二、知识点:
1、包含多个配置文件:
在struts.xml文件下使用标签<include file="配置文件路径"></include>
主要目的地避免struts.xml文件的配置过多,出现臃肿,难于维护;分模块配置不同的业务,便于维护。
2、使用动态方法调用指定的方法:
当同一个action类中包含多个方法时候,在struts配置了多个action时,可以使用动态方法调用,减少action的配置。
调用格式 (action属性name的值)!方法名.action 如下
<a href="list!UserList.action"> 显示用户列表(方法动态调用)</a>
注意:此方法不建议使用
3、使用通配调用指定的action方法
当同一个action类中包含多个方法时候,在struts配置了多个action时,可以使用动态方法调用,减少action的配置。
调用格式 :
<a href="user-UserList.action"> 显示用户列表(使用通配符)</a><br/>
<action name="user-*" class="com.sxt.action.UserinfoAction" method="{1}">
说明:action中name的值为 user-* ,method的值为{1} 指明匹配所有以 user- 开头的名字
user-addList.action、user-addUpdate.action、user-addDelete.action 都能匹配
之后method的值就为匹配的值,二匹配的值又是action中的方法名,从而实现方法的指定调用。
method的值可以为{1}、{1,2}、{1,3}、{3} 表明匹那个通配符和几个通配符
4、结果视图:
全局结果视图的配置:(理解成全局变量)
<global-results>
<!-- 使得所有的结果都能用 -->
<result name="success" type="redirectAction">list</result>
</global-results>
5、<result name="" type=""/>相关配置 type的值如下:
常用:
dispatcher:页面之间的请求转发
redirect:页面之间的重定向
redirectAction:action之间的重定向
chain:action之间的请求转发
freemarker:页面静态化
xslt:生成excel
stream:上传下载
6、struts.xml常量配置:
指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法
<constant name="struts.i18n.encoding" value="UTF-8"/>
该属性指定需要Struts 2处理的请求后缀,如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
<constant name="struts.action.extension" value="do"/>
设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
<constant name="struts.serve.static.browserCache" value="false"/>
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开
<constant name="struts.configuration.xml.reload" value="true"/>
开发模式下使用,这样可以打印出更详细的错误信息
<constant name="struts.devMode" value="true" />
默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />
与spring集成时,指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
7、struts 中 action:
7.1、编写一个普通类
7.2、实现Action接口
7.3、继承ActionSupper类
8、获取Servlet API:
8.1、直接通过方法 ServletActionContext获取相应的对象
ServletActionContext.getRequest()、ServletActionContext.getResponse()、、、
8.2、实现接口 ServletRequestAware、ServletResponseAware、SessionAware 获得
定义成员变量,就不需要每次使用创建
private HttpServletRequest request;
private HttpServletResponse response;
private Map<String,Object> session;<特殊> session对象虽然类型是Map集合 ,只需要当成session来用,存数据用session.put();