struts2 入门1:基本使用_struts基本配置

14 篇文章 0 订阅
1.struts 是Apache提供的一个开源的Java Web开发框架,使用的是MVC开发模式.


2.struts1.x和struts2.x

             strusts有struts1.x与struts2.x两个版本,但二者是两个截然不同的版本,即


             struts2.x并不是基于struts1.x的.struts2.x起源于WebWork.


3.struts2的简单应用:
a.请求数据自动封装
b.文件的上传和下载
c.数据校验
d.国际化/jsp取值
...


4.简单使用
|-- interface Action (若实现接口,需要重写execute()方法)
|-- Class ActionContext   Action上下文 (推荐)
|-- class ServletActionContext       获取原始的ServletApi
|-- class ActionSupport  实现类Action接口,并增添了数据验证等功能
  一般Action类可以继承此类


String execute();//实现Action接口的类必须写的方法,action默认执行该方法.
//无参,返回值为String,方法名为execute
 
a.引入8个基本的jar包
struts2-core-2.3.4.1.jar        struts核心jar包
xwork-core-2.3.4.1.jar          xwork 核心jar包
ognl-3.0.5.jar struts对Ognl表达式语言支持jar
commons-fileupload-1.2.2.jar    文件上传相关jar包
commons-io-2.0.1.jar 文件上传相关jar包
freemarker-2.3.19.jar 标签库模板jar文件


commons-lang3-3.1.jar struts对java.lang包扩展
javassist-3.11.0.GA.jar struts对字节码处理的jar

b.web.xml配置struts2核心过滤器
<!-- struts核心过滤器 -->
<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>/*</url-pattern>
</filter-mapping>


c.写Action类
public class HelloAction{//没继承Action接口
//字段名对应jsp中表单的元素的name属性值
private String userName;//一定要提供set方法
public void setUserName(String userName) {
this.userName = userName;
}
// 封装密码
private String pwd;
public void setPwd(String pwd) {
this.pwd = pwd;
}
//类的字段与jsp里的表单的元素的name属性名要一致
//<input type="text" name="userName"/>
// 处理登陆请求
public String execute() {
try {
// .. service... dao...
System.out.println("struts2处理请求:" +userName + pwd);
} catch (Exception e) {
return "error";
}
return "success";
}
}

//若是自动封装对象
/*
private User user;
public User getUser(){
return this.user;
}
public void setUser(User user) {
this.user = user;
}
//对应的jsp表单
//<input type="text" name="user.userName"/>
*/


d.配置struts.xml
<struts>
<package name="user_" namespace="/" abstract="false" extends="struts-default">
<!-- 配置访问路径,与处理action类的映射关系 -->
<action name="login" class="cn.struts.action.HelloAction">
<result name="success" type="dispatcher">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

e.启动服务器...



5.关于struts.xml基本配置
<struts>:根节点
<package>: (根节点的子节点)定义一个包! 管理路径!
name  包的名称,可以随便写,但要唯一!
作用,是被其他包继承的作用!
extends  
当前包继承的包,对于struts的包,必须继承struts-default包!
struts-default.xml 中有包: <package name="struts-default" abstract="true">
当前继承的就是上面这个父包!
abstract  
当前包,是否为抽象包; 如果是抽象包,里面不能有action配置!
namespace 
表示名称空间,作为路径的组成部分
访问路径 = 名称空间  + ActionName
默认为“/”

作用: 管理路径的,避免路径重复!


<action>:(package的子节点)  表示“请求路径”与处理请求的Action类,映射关系!
name   访问路径的名称(访问的资源)
class  当前访问,对应哪个Action处理!

method 当前访问类的处理方法; 默认是execute()处理请求


<result>:(action的子节点)
name   Action处理方法返回的标记!
type   返回的结果类型: 转发/重定向
dispatcher  转发
redirect    重定向



7.简单执行流程:
1). 服务器启动:
# tomcat启动加载自身的web.xml, 所有项目的web.xml;
# web.xml  配置了核心过滤器
* 创建实例:StrutsPrepareAndExecuteFilter
* 执行 init(filterConfig);  执行初始化方法
加载三个xml配置文件:
struts-default.xml
struts-plugin.xml
struts.xml

2).用户访问:
* 执行核心过滤器的StrutsPrepareAndExecuteFilter .doFilter()方法
* 执行创建Action对象!
* 执行defaultStack默认的18个拦截器(按顺序)
* execute() 方法
* 根据返回值跳转


注意: 先创建Action对象、再执行拦截器(通过过滤器调用)、 在执行Action处理请求的方法!



8.struts2数据处理(实现Action接口)
|-- interface Action
|-- Class ActionContext   Action上下文 (推荐)
|-- class ServletActionContext       获取原始的ServletApi
|-- class ActionSupport  实现类Action接口,并增添了数据验证等功能


String execute();//实现Action接口的类必须写的方法,action默认执行该方法.
//无参,返回值为String,方法名为execute
 

===通过ServletActionContext类(要引入Servlet相关的一些包,导致高耦合),保存数据到域
//1.  通过ServletActionContext类,保存数据到域!

public String execute() throws Exception {
// 获取request对象
HttpServletRequest request = ServletActionContext.getRequest();
// 获取session
HttpSession session = request.getSession();
// 获取ServletContext
ServletContext sc = ServletActionContext.getServletContext();
// 保存数据到各个域
request.setAttribute("request_data", "request_data");
session.setAttribute("session_data", "session_data");
sc.setAttribute("servletContext_data", "ServletContext_data");
return SUCCESS;
}

===ActionContext 类:(可解耦)
Struts把表示request、session、application的域对象,封装为一个个map,我们就可以像操作map一样操作域对象!

// 2. ActionContext对象                                      
public String struts_data() {
// a. 获取ActionContext对象
ActionContext ac = ActionContext.getContext();
// a1. 获取表示request对象的map
//Map<String,Object> request = (Map<String, Object>) ac.get("request");
Map<String, Object> request = ac.getContextMap();
// a2. 获取表示session对象的map
//Map<String,Object> session = (Map<String, Object>) ac.get("session");
Map<String, Object> session = ac.getSession();
// a3. 获取表示application对象的map
//Map<String,Object> application = (Map<String, Object>) ac.get("application");
Map<String, Object> application = ac.getApplication();
// 保存数据到各个域
request.put("request_data", "request_data11");
session.put("session_data", "session_data22");
application.put("servletContext_data", "ServletContext_data33");
return SUCCESS;

}


*个人笔记,如有错误或不足,请指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值