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. python学习之内部函数:

    python内置函数表:https://docs.python.org/3/library/functions.html 1 判断数据类型的函数:isinstance(变量, 待要判断的类型) 2判断 ...

  2. Django中多表的增删改查操作及聚合查询、F、Q查询

    一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...

  3. vue样式操作与事件绑定

    Vue笔记 1 Vue实例 (VM) var vm = new Vue({    el:'#app', //挂载元素        //数据    data: {        title:'值', ...

  4. hdoj薛猫猫杯程序设计网络赛1003 球球大作战

    思路: 二分,check函数不是很好写. 实现: 1. #include <bits/stdc++.h> using namespace std; typedef long long ll ...

  5. datagrid数据网格获取所有选中行的索引,插入某个列值为其他列的运算值

    获取所有选中行的索引,存入数组ary中: var data=$("#dg").datagrid("getSelections"); var ary=[]; fo ...

  6. 安装MySQLdb出现HAVE_WCSCOLL重定义问题的解决方法

    root@wodeyitian MySQL-python-1.2.3]# python setup.py install running install running bdist_egg runni ...

  7. 【Web应用-迁移】迁移 Web 应用到新的应用服务计划的相关限制和说明

    现象描述 当前 Web 应用所在的应用服务计划和目标应用服务计划属于同一个资源组,但是通过 Portal 点击 “更改应用服务计划”,依旧看不到目标应用服务计划. 问题分析 导致上述问题的原因是,用户 ...

  8. 面向 AWS 专家的 Azure 云服务介绍

    本文是面向 AWS 专家的 Azure 云服务介绍,参考本文可以帮助大家“按图索骥”在 Azure 的平台上找到能满足自己需求的服务. 公有云市场经过多年发展,已经涌现出几家大规模的提供商,如 Azu ...

  9. 数组、Math、JOSN总结

    json对象: 1.数组有length属性[尽量使用for循环] 2.而json没有length属性[可以使用for...in...循环] 3.for in 不能遍历页面中的节点对象. for ( v ...

  10. java导入Excel表格数据

    首先导入Excel数据需要几样东西 第一需要两个依赖包,这里直接是在pom注入依赖 <!--excel--> <dependency> <groupId>org.a ...