Struts2之初体验

Struts2
1.了解Struts2 请求调度框架
Struts2是一个MVC框架
Struts2类库:
Struts2-core Struts2核心
XWork-core xwork核心 Struts2的构建基础
javassist-GA 底层对字节码文件进行处理
commons-fileupload 文件上传

commons-io java io 扩展
commons-lang 数据类型的工具类
freemarker 标签引擎使用类库
ognl 表达式语言类库

2.入门案例
使用Struts2开发程序的基本步骤
1.1.加载Struts2类库
<!--获取ServletAPI-->
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.4.1</version>
</dependency>

<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.4.1</version>
</dependency>
1.2.配置web.xml文件
配置的是什么?
解析:过滤器 核心过滤器 StrutsPrepareAndExecuteFilter
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--Struts2 核心过滤器-->
<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>
<!--拦截所有的Action(请求)-->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

1.3.开发视图层页面
<s:form method="post" action="login">
请输入用户名: <s:textfield name="username"></s:textfield><br/>
请输入密码:<s:textfield name="password"></s:textfield><br/>
<s:submit value="登录"></s:submit>
</s:form>
1.4.自定义开发控制层Action类
import com.opensymphony.xwork2.Action;

public class UserAction implements Action {
//Action接口的5个静态常量:SUCCESS NONE INPUT LOGIN ERROR
//和 SpringMVC controller 进行对比
public String execute() throws Exception {
return SUCCESS;
}
}
1.5.配置Struts2.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--包的继承。有点像java中的类的继承-->
<package name="default" namespace="/" extends="struts-default">
<action name="userAction" class="cn.happy.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
1.6.部署 运行项目
将项目部署到服务器中,并运行项目(注:我用的是Tomcat)。

3.自动装配
Struts2 自动装配 AutoAware(PageUI----->控制器属性)
零散属性的自动装配:Action类中成员变量的名称和页面上表单元素name属性值保持一致。

领域模型的自动装配
配置一:
public class FirstAction implements Action{
private UserInfo userInfo;
}
userInfo.username;
userInfo.password;

配置二:ModelDriven
public class FirstAction implements Action,ModelDriven<UserInfo>{
private UserInfo userInfo=new UserInfo();
public UserInfo getModel(){
return userInfo;
}
}

4.ServletAPI 去获取常见对象Session,request
与Servlet API解耦的访问方式
方案一:对Servlet API进行封装,借助ActionContext
--->01.使用ActionContext类获取ServletAPI对象对应的Map对象
方式一:
public class FirstAction implements Action{
public String execute() throws Exception{
Map<String,Object> map=ActionContext.getContext().getSession();
map.put(k,v);
return "逻辑视图名";
}
}
方案二:向Action中注入ServletAPI对象对应的Map对象
--->02.Struts2向Action注入ServletAPI对象对应的Map对象
public class FirstAction implements Action,SessionAware{
private Map<String,Object> map;
public String execute() throws Exception{
map.put(k,v);
return "逻辑视图名";
}
public void setSession(Map<String,Object> map){
this.map=map;
}
}


与Servlet API耦合的访问方式
方式一:通过ActionContext的子类ServletActionContext实现
public class FirstAction implements Action{
public String execute() throws Exception{
HttpSession session=ServletActionContext.getRequest().getSession();
session.setAttribute(k,v);
return "逻辑视图名";
}
}
方式二:向Action实例注入Servlet API对象
public class FirstAction implements Action,ServletRequestAware{
private HttpServletRequest request;
public String execute() throws Exception{
HttpSession session=request.getSession();
session.setAttribute(k,v);
return "逻辑视图名";
}

public void setServletRequest(HttpServletRequest httpServletRequest){
this.request=httpServletRequest;
}
}

5.Action------->UI 数据共享
Map<String,Object> map;
map.put("uname","张三");
方式一:不加#
// ValueStack vs=ActionContext.getContext().getValueStack();
ValueStack vs=(ValueStack)ServletActionContext.getRequest.getAttribute(struts.valueStack);
vs.push(map);

<s:property value="uname"></property>
${uname}

方式二:得加#
<property value="#session.uname"></property>

解耦和耦合判定的依据,是否使用原生的ServletAPI类型。。。

猜你喜欢

转载自www.cnblogs.com/bdqnjs/p/9548795.html
今日推荐