文档介绍:struts2
:先导入struts-,这是一个空的工程,把它作为模板进行开发
是不是用了struts就可以抛弃servlet? struts底层仍然是servlet,其实是用了一个Filter来进行分发()。
到底哪个请求分给给哪个类来处理,
<action name="hello" class="处理这个hello请求的类">
一、定义一个普通类,在其中定义一个public String execute()方法,在其中写上处理逻辑,这个方法会在对应的请求过来时自动回调。
二、除此之外还可以实现接口Action,但现在暂时没有必要
三、继承ActionSupport,但现在暂时没有必要
struts2中,XXXAction代表了C控制逻辑,,另外还有模型M
strut2完全可以不去理会HttpServletRequest和HttpServletResponse,让我们从这些繁杂的Servlet的api中解放出来。
如何取出请求中的参数呢?(("xxxx"))
Struts中只需要将Action类的属性定义为和请求参数同名即可(框架会自动读取请求参数,并自动注入到同名的属性中去),我们只需要在execute方法中将属性的值(也就是参数的值)取出来用就可以了。
如何在Action中往后面的jsp传值呢?(("xxx","xxxx"))
struts只需要把要传给后面的值,放在Action类的属性中,需要定义getter方法;然后在后面的jsp中用el表达式就可以取出来了
Action是MVC中的C,控制;Action中的那些接收参数的属性属于M,模型。
:
一、把要接受的参数属性直接写在Action中
方便,但是将C和M耦合起来了
二、专门定义一个模型类,把参数属性都定义在模型类中,然后在Action中定义一个这种模型类的属性。这样也能进行参数获取,
比如: 我们可以将name和age封装到一个User类中,在Action定义一个User属性user
在前端,我们就要这么写参数,=tom&=20
这第二种方式将M、V、C彻底分离,在需求变更的情况下往往只要对一个模块进行修改,避免污染原先正确的代码。
三、ModelDriven方式,需要让Action类实现ModelDriven接口,并实现getModel()方法;在前端就不需要加模型名字,仍然用name=xxx&age=xxx这种方式。这种方式不常用。
,也能处理post方式的。
后缀过滤,-pattern中配置要用struts2处理的路径,可以用
*.
*.do
,但其实可以一个Action处理多个url请求。方式就是在Action中定义多个方法,方法名随意,。
比如: <action name="test" class="...TestAction" method="test1">这样写就表示路径为test的url的请求会由TestAction的test1方法来处理
<action name="abc" class="...TestAction" method="test2">这样表示路径为abc的url的请求会由TestAction的test2方法来处理
DMI dynamic method invocation 动态方法调用
一个Action中定义多个方法,在配置文件中却只注册这个Action本身
<action name="xxx" class="....XXXAction">
在前端,使用url: xxx!方法名来调用对应的方法来处理请求
注意:这种方式比较危险,默认关闭,需要设置一个Constant去开启
<constant name="" value="true"></constant>
开启完就能使用动态方法调用了,比如,C