struts2是通过增强(advice),来执行方法的;
个人猜测是:通过struts.xml,配置出增强的,容器加载的时候,他自动如Ioc一般,自动创建类,以及将表单
数据注入到action实现类的方法里,然后再利用反射自动运行execute方法;
当然在execute方法之前会织入一些框架的拦截器;
1.struts.xml格式:
介绍struts的各种属性的配置:
constant:<constant name="" value="" />
他是等于在struts.properties中配置struts2的那些核心属性;
include:<include file="struts-XXX.xml" />
包含,包含其他的struts-XXX.xml文件配置;
struts2能够在配置文件书写EL表达式,他可以使得配置文件更加灵活,例如:
解读<result >属性type:
dispatcher 转发
参数: location 具体的jsp界面;
redirect 重定向
chain action链
只是简单的写一些常用的type,其他的病不是很常用到,至少在下并没有使用到;
解读: <constant>
属性 name :
struts.i18n.encoding 编码 value-"GBK"
struts.i18n.reload 每次是否重新加载国际化资源文件 value-true/false
struts.configuration.xml.reload 每次修改struts.xml,服务器重新加载; value-true/false
struts.serve.static.browserCache 设置是否缓存静态页面; value-true/false
struts.devMode 是否是开发模式,可以得到更到调试信息 value-true/false;
2.execute方法配置:
调用ActionContext的方法:
ActionContext.getContext(); 返回一个ActionContext对象;
ActionContext.getContext().getSession() 返回一个Session对象的Map;
ActionContext.getContext().getApplication() 返回一个servlet的Application对象;
ActionContext.getContext().getParameters() 相当于httpParameters对象的getParameterMap();
调用ServletActionContext的方法:
ServletActionContext.getRequest() 返回一个request对象;
ServletActionContext.getRequest() 返回一个respose对象;
ServletActionContext.getServletContext() 返回一个ServletContext对象;
普通bean上添加execute方法;
底层是将bean的所有属性封装到ValueStack的对象中,然后将ValueStack封装在request中;
数据印证:
bean继承ActionSupport类,并重写他的validate方法以及在配置文件中添加input属性;
xml:
bean:
3.web.xml的配置:
4.标签:
5.struts2类中似于struts1的写法,将POJO完全的变成ActionForm,然后Action独立,继承ModelDriven方法;
POJO类的写法,咱就省略了,写了也没啥意思,还占地方,没办法的事情;action的写法
个人猜测是:通过struts.xml,配置出增强的,容器加载的时候,他自动如Ioc一般,自动创建类,以及将表单
数据注入到action实现类的方法里,然后再利用反射自动运行execute方法;
当然在execute方法之前会织入一些框架的拦截器;
1.struts.xml格式:
- <struts>
- <package name="struts2" extends="struts-default" namespace="/book">
- //一种格式,name是随意起的,namespace是命名空间^_^,嘿嘿,命名空间;
- <default-action-ref name="lost" />
- //如果没有找到对应的此name的值;
- <action name="login" class="com.wang.action.LoginAction" method="add">
- //name,对应表单递交action; class是表明action的实现类 ,method是相当于配置动态Action的方法;
- <result name="success">/success.jsp</result>
- //通过action类返回的是字符串,与name匹配,调转到某个页面;
- </action>
- <action name="lost">
- <result>/lost.jsp</result>
- </action>
- </package>
- </struts>
constant:<constant name="" value="" />
他是等于在struts.properties中配置struts2的那些核心属性;
include:<include file="struts-XXX.xml" />
包含,包含其他的struts-XXX.xml文件配置;
struts2能够在配置文件书写EL表达式,他可以使得配置文件更加灵活,例如:
- <struts>
- <package name="struts" extends="struts-default">
- <action name="login" class="action.Action">
- <result name="succee">/${name}.jsp</result>
- //可以由jsp界面控制转向页面;
- </action>
- </package>
- </struts>
dispatcher 转发
参数: location 具体的jsp界面;
redirect 重定向
chain action链
只是简单的写一些常用的type,其他的病不是很常用到,至少在下并没有使用到;
解读: <constant>
属性 name :
struts.i18n.encoding 编码 value-"GBK"
struts.i18n.reload 每次是否重新加载国际化资源文件 value-true/false
struts.configuration.xml.reload 每次修改struts.xml,服务器重新加载; value-true/false
struts.serve.static.browserCache 设置是否缓存静态页面; value-true/false
struts.devMode 是否是开发模式,可以得到更到调试信息 value-true/false;
2.execute方法配置:
调用ActionContext的方法:
ActionContext.getContext(); 返回一个ActionContext对象;
ActionContext.getContext().getSession() 返回一个Session对象的Map;
ActionContext.getContext().getApplication() 返回一个servlet的Application对象;
ActionContext.getContext().getParameters() 相当于httpParameters对象的getParameterMap();
调用ServletActionContext的方法:
ServletActionContext.getRequest() 返回一个request对象;
ServletActionContext.getRequest() 返回一个respose对象;
ServletActionContext.getServletContext() 返回一个ServletContext对象;
普通bean上添加execute方法;
- public String execute() throws Exception {
- System.out.print(this.getName());
- Map voPut= ActionContext.getContext().getSession();
- //ActionContext,方法是储存到web对象中方法
- voPut.put("user", this);
- return "success";
- }
- <%
- ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
- String name = (String[])vs.findValue("name");
- %>
数据印证:
bean继承ActionSupport类,并重写他的validate方法以及在配置文件中添加input属性;
xml:
- <result name="input">/index.jsp</result>
bean:
- public void validate() {
- if(name==null||name.equals("")) {
- this.addFieldError("name", "用户名不能为空");
- //添加页面的错误信息(textfield的名字,错误信息),
- }
- }
- <!-- 定义Struts2的FilterDispathcer的Filter -->
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
- <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
4.标签:
- <%@taglib prefix="s" uri="/struts-tags"%>
5.struts2类中似于struts1的写法,将POJO完全的变成ActionForm,然后Action独立,继承ModelDriven方法;
POJO类的写法,咱就省略了,写了也没啥意思,还占地方,没办法的事情;action的写法
- public class Actions implements ModelDriven<User> {
- //ModelDriven接口是提供POJO与Action的连接
- private User user = new User();
- //必须初始化;
- public String execute() {
- System.out.print(user.getName());
- return "succee";
- }
- public User getModel() {
- return user;
- }
- }