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类型。。
Struts2之初体验的更多相关文章
- Struts2之一 初体验
Struts2 框架是基于MV模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的. 01.需要在we ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
随机推荐
- 2个sql 函数dbms_lob.substr 和 wm_concat
转自: http://blog.csdn.net/wenzhongyan/article/details/50315473 http://blog.csdn.net/ojerryzuo/article ...
- [已读]JavaScript模式
主要是介绍各种继承和设计模式.第一章是讲编程规范,然后里面讲到了使用new Function替代eval
- 181. 将整数A转换为B
181. 将整数A转换为B 如果要将整数A转换为B,需要改变多少个bit位? 注意事项 Both n and m are 32-bit integers. 您在真实的面试中是否遇到过这个题? Yes ...
- 图像处理库CImg
CImg 是一个用C++编写的开源数字图像处理库. 作者介绍 作者David Tschumperlé, 之前是法国La Rochelle大学的一名教授,现受雇于CNRS 图像组.据说作者从19 ...
- Ionic之button标签ng-click无反应解决
在使用Ionic中,使用按钮的ng-click事件,竟然点击没有反应,刚开始以为自己写得方法有问题才会不起作用,自己在点击之后就console.log()一个东西,但是console也是无法反应的.& ...
- #113. 【UER #2】手机的生产
链接:http://uoj.ac/problem/113 由于电信技术的发展,人人都可以通过手机互相联系. 有一位电信大佬最近想生产一大批手机,然而从生产线上一台一台地生产实在太慢了,于是他想出了一个 ...
- 【转】阐述Handler的实现原理
面试题:阐述Handler的实现原理 2016年07月18日 21:01:35 阅读数:7574 处理过程: 从handler中获取一个消息对象,把数据封装到消息对象中,通过handler的send… ...
- spark中产生shuffle的算子
Spark中产生shuffle的算子 作用 算子名 能否替换,由谁替换 去重 distinct() 不能 聚合 reduceByKey() groupByKey groupBy() groupByKe ...
- LR中订单流程脚本2
Action(){ //1.设置服务器的IP地址 //lr_save_string("192.168.1.12:8080", "ip"); lr_save_st ...
- codevs 2776 寻找代表元
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验 ...