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之初体验的更多相关文章

  1. Struts2之一 初体验

    Struts2 框架是基于MV模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的. 01.需要在we ...

  2. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  6. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  9. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

随机推荐

  1. 使用em和rem替代px

    rem是指根元素的字体大小,默认情况下html的字体大小为:16px=1rem.而em是相对单位,是基于它的祖先元素计算的. 如果我们不指定html和body的字体大小,要得到12px的rem需要这样 ...

  2. Storm编程入门API系列之Storm的Topology多个Workers数目控制实现

    前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 继续编写 StormTopologyMoreWorker.java ...

  3. arcengine 将地图文件保存为图片(包括各种图片格式)

    1,最近做了个地图文件输出图片的功能,思想主要就是利用MapControl的ActiveView中的out方法: 2代码如下:欢迎交流指正 SaveFileDialog m_save = new Sa ...

  4. 定时任务-ScheduledExecutorService

    创建定时任务线程池的方式 ScheduledExecutorService executorService = Executors.newScheduledThreadPool(4);// 不推荐// ...

  5. leetcode128 Longest Consecutive Sequence

    思路: 维护一个unordered_map,key是每个连续区间的端点,value是该区间的长度. 实现: class Solution { public: int longestConsecutiv ...

  6. jQuery源码分析系列(转载来源Aaron.)

    声明:非本文原创文章,转载来源原文链接Aaron. 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAa ...

  7. 你知道现在的.net是什么样的吗,一张图告诉你

    Here are these concepts used in an example sentence, for context: Application Framework - “Are you u ...

  8. gvim -- 跳转命令,查找格式,正则

    1.跳转命令 ‘w'单词前进,'b'单词后退,'e'单词前进,‘ge’单词后退,存在单词词首词尾区别,'W''B''E''gE'将不以单词区分,以空格区分 ‘$’行尾,'^'非空白行首,'0'行首 ‘ ...

  9. Mysql 主备配置

    来自:http://blog.csdn.net/u013256816/article/details/52536283 1. 了解主备配置过程原理. http://blog.csdn.net/u013 ...

  10. org.springframework.beans.factory.BeanCreationException: Could not autowire

    由于我在项目中引用了如下代码,增加了 @Configurationpublic class Connection {    public @Bean HttpClientConfig httpClie ...