一、Struts的开发步骤:(手动)
1、 创建web工程,创建web.xml配置文件进行配置
2、 创建action实现类,推荐使用继承ActionSupport类的方法,该类中的execute是默认的实现方法,也可以自定义其他方法,在访问时进行动态调用。
3、 在struts.xml配置文件中对action进行配置,主要的配置项如下:
在该配置文件中的属性基本是以键值对的形式存在的
(1) package
name属性:其他包引用该包时的key
namespace属性:会影响对该包下的action的方法路径,通常设为”/”
extends属性:即该包继承的包名,一般继承”struts-default”
(2) action
该配置要放在package中,是要访问的action的信息配置
Name属性:这是action的名字,可以随便起,但是要在url中要通过该名字进行访问,所以以简单为主。
Class属性:这是实现action实现类的存放路径,一般为工程中的包名.类名。
Method属性:这是设置访问action时要调用其实现类中的方法,默认都调用execute方法。
(3) result
该配置放在action中,表示的是action实现类的return路径。
Name属性:这是action实现类中return返回页面的key,返回页面的值在result标签内部,即jsp页面的路径。
4、 创建视图页面,一般为jsp页面。
注意:在jsp页面中定义表单要提交到某个action时,表单属性的设置:
(1) action属性:这是表单要访问的action名字,当要访问的action调用其实现类中的默认方法时,action的值为“action名.action”,其中action名就是在struts配置文件中action中name属性的值;如果要访问的action调用的不是其实现类中的默认方法,则需要根据动态调用方法的通配符设置添加适当的方法名称。
(2) method属性:这个默认为post,因为如果是get的话,会将提交的内容,如用户名和密码显示在浏览器的url中。
5、 访问相应的action或jsp页面进行测试。
二、接受用户输入的三种方式
1、 通过action属性接受:如同获取提交用户名和密码并在客户端输出
(1) 创建提交数据页面(如登陆界面login.jsp)
(2) 创建action的实现类继承ActionSpport父类
(3) 在该实现类中创建提交数据对应的属性即相应的get和set方法,同时创建访问action时的接受方法,在该方法中通过this.getUsenamer()获取。
2、 通过领域对象接受
(1) 将接受的属性用一个类封装起来。提供所有属性的get,set方法以及无参构造函数。
(2) 创建action实现类继承ActionSpport父类,该类中添加被封装的对象,并提供该对象的set和get方法。
(3) 在提交的表单元素中使用对象名.属性名设置name的值。
(4) 在访问的action方法中获取该对象,就可以获取到该对象的属性值,即用户提交的数据。
注意:在这种方法中可以使用hibernate事项将接受到的数据添加到数据库中。
方法:将前面封装的对象通过hibernate的配置文件映射到数据库中,在action的实现类中创建一个添加接受到信息的方法,该方法的目的是通过hibernate向数据库中添加获取的数据,然后在访问action时调用的方法中调用该方法,通过传参数的方法实现添加数据。
3、 通过模型驱动接受
(1) 同样将接受的属性用一个类封装起来。提供get和set方法以及无参构造函数。
(2) 创建action类,实现ModelDriven接口(泛型),并重写里面的getModel()方法。
(3) 在该类中实例化刚才封装的对象,在重写的方法getModel()中返回该对象。
(4) 其他的操作跟通过领域接受的操作一样,只是在提交的页面表单元素使用属性设置name的值
三、struts访问servlet API的方法:
1、 通过第一种解耦的方式:
(1) 获取上下文对象ActionContext
(2) 通过上下文对象ActionContext对象获取httpservletrequest、httpsession、servletcontext(httpapplication)对象的封装集合map
(3) 用三种对象的get方法就可以获得相应的请求。
2、 通过第二种解耦的方式:
(1) 实现ApplicationAware、RequestAware、SessionAware接口,并重写未实现的set方法。
(2) 可直接获取封装对象的Map集合
(3) 在重写的方法中调用相应的Map集合。
3、 通过第一种耦合的方式:
(1)使用ServletActionContext类的静态方法getRequest()方法获取httpservletrequest对象
(2)使用获取的request对象获取httpsession对象
(3)使用ServletActionContext类的静态方法getServletContext()方法获取servletcontext对象,即application对象。
然后它们的使用方法就和servlet中的三种对象的使用方法是完全一样的,即实现了耦合。
还有第二种和第三种耦合方式,因为一般情况下推荐使用解耦的方式,所以就不多介绍另外两种耦合方式,一旦使用到耦合方式,则第一种已经足够了。