.首先讲了struts2的来源,struts是由struts1和webwork整合后叫做struts2.
2.struts1 存在的缺陷:
①支持的表现层单一
②与servlet API严重耦合,难于测试
③代码严重依赖于struts API,属于侵入式设计。
3.在添加了struts配置后,web.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>*.action</url-pattern>
</filter-mapping>
4.在struts中配置和servlet的原理是一样的。知识写法不一样而已。
配置的方式如下:
<struts>
<include file="struts-default"></include>
<package name="system" extends="struts-default">
<action name="loginaction" class="com.nwsuaf.javaweb.action.LoginAction">
//在没有
//action name 对应提交的action的名字,class对应提交后要处理的业务逻辑。
// result 标签用来判断上面业务逻辑返回的值,并进行匹配跳转到相应的地址。
<result name="index">/index.jsp</result>
<result name="login">/login.html</result>
</action>
</package>
</struts>
5.注意在视图页面中写访问路径时要写绝对路径。
6.在struts中接受数据的方法。
①在action类中定义与表单中数据项一样的属性。并在该action中为每个属性生成set方法,然后再这个action中就可以获得表单中提交过来的属性了。
②当表单中属性很多的时候,我们一般使用一个类来接受数据,将数据直接存放在类对象中,使用方法为:
Ⅰ.存放数据的类中的属性和表单中属性一致。并生成get和set方法。在action类中定义一个数据类的对象,注意一定要是public的,并且要new。不然获取不到完整的数据.
Ⅱ.和第一种一样定义一个private的对象,然后写上set方法和get方法(没有get方法只能获取到一条数据)
Ⅲ.注意:在html中也就是说提交数据的页面中,定义的name要使用“类名.属性”的方式来写,不然在action中获取不到数据。
7.struts中接收数据的方式为Ognl的方式。
下面就以一个例子来说明一下:
LoginAction action = new LoginAction(); //生成一个对象,
OgnlContext context = new OgnlContext(); //得到Ognl的上下文对象
context.setRoot(action); //设置Ognl的根结点。
Ognl.setValue("user.username", context.getRoot(), "wangxin");
//设置属性值,第一个参数为:user.username意思为在根节点下面有一个类对象user,其中属性为username,也就是说设置这个属性的值。
//第二个参数是哪一个根节点。第三个参数为设置的属性值。
Object value = Ognl.getValue("user.username", context.getRoot());
// 意思为:在根节点下面得到user.username的属性值。
System.out.println(value);
8.在开发总数据很多的时候我们这样来接收数据,如下所示:
LoginAction action = new LoginAction(); //声明一个对象,
OgnlContext context = new OgnlContext(); //得到Ognl的根节点,
context.setRoot(action); //设置根节点
HttpServletRequest request=null; //声明一个HttpServletRequest对象,
Enumeration parameterNames = request.getParameterNames(); //获取这个提交的所有的数据项。
while (parameterNames.hasMoreElements()) { //进行循环遍历
String name = (String)parameterNames.nextElement(); //取得提交数据的属性名。
String value = request.getParameter(name); //根据属性名来获得属性的值。
Ognl.setValue(name, context.getRoot(), value); //将属性和属性值设置到根节点中去。
}
Object value = Ognl.getValue("user.username", context.getRoot()); //获得属性值。
System.out.println(value);