Struts2 回顾总结
1.第一个Struts2入门案例
1.找jar包
Struts2-core
xwork-core
ognl
javasist
freemarker
commons-lang
commons-io
commons-fileupload
2.在web.xml文件中植入配置,配置了核心过滤器(XXXXFilter)
核心控制器
核心过滤器的名称:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
Ctrl+Shift+T
3.在src下创建一个struts.xml文件
<package name="default" namespace="/" extends="struts-default">
<action name="xxAction逻辑名称:URL请求书写的名称" class="类的物理地址">
<result name="success">/index.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
4.在action包中创建一个Action类
实现了特定接口的一个类 Action接口
public class LoginAction implements Action{
public String execute(){
return "success";
}
}
5.写一个index.jsp页面
2.实现登录:认证自动装配
初级的自动装配
page:name Action: name保持一致
中级的自动配置
page:user.namee Action :user对象
高级的自动配置
page:name Action:user(多实现了一个接口:ModelDriven)
前提条件:要手动new出user
3.保存用户信息:ServletAPI如何使用?在Action中如何获取到session对象
解耦
方式一:ActionContext.getContext().getSession()
方式二:IOC注入
实现了接口:SessionAware: 核心方法 setSession(Map<String,Object> map)
Map<String,Object> map;
形成get和set方法
Action的execute方法中,使用map.put()
耦合
方式一:ServletActionContext.getRequest().getSession();
方式二:IOC 注入
实现一个接口:ServletRequestAware setServletRequest(HttpServletRequest request)
Action 中公开一个变量:HttpServletRequest request; get和set方法
Action中的execute方法中就可以 HttpSession=request.getSession();
1.Struts2和MVC
解析:MVC是一种模式,设计思想
Struts2是这种模式的一种实现
Spring MVC
2.WebWork和Struts2关系
解析:Struts1 官方提供的框架
WebWork
3.Struts2标签
1.导入指令
<%@ taglib uri="/struts-tags" prefix="s"%>
2.使用
<s:form>
</s:form>
4.自动装配autoaware
1.login.jsp
name="username"
2.Action中的成员变量名称和登录界面中name属性值一致
5.一个异常
Stacktraces (栈跟踪)
java.lang.NullPointerException 空指针异常
cn.happy.action.LoginAction.execute(LoginAction.java:12)
6.username password ------->user
jsp页面
<input name="user.username"/>
<input name="user.password"/>
解析:ModelDriven (模型驱动)
public abstract interface com.opensymphony.xwork2.ModelDriven {
public abstract java.lang.Object getModel();
}
小tip:
1.让Action实现一个ModelDriven<UserInfo>
2.user对象手动实例化
3.UserInfo getModel(){
return user;
}
8.Servlet API
解析:API(Application Programming Interface) 应用程序编程接口
就是和Servlet相关的一组接口和类
Servlet API 文档
接口和类以及方法的说明,描述
xxx.chm
9.我想在登录成功后,拿到Session,给Session保存用户名。
1.如何在Action中获取到session对象
2.将用户名放入session作用域
10.获取session的两种方案
方式一:耦合
HttpSession session2 = ServletActionContext.getRequest().getSession();
方式二:解耦
Map<String, Object> session = ActionContext.getContext().getSession();
通过注入方案:IOC
Struts2 回顾总结的更多相关文章
- 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】
一.SSH整合之后事务问题和总结 1.引入问题:DAO层测试 假设将User对象设置为懒加载模式,在dao层使用load方法. 注意,注释不要放开. 使用如下的代码块进行测试: 会报错:no sess ...
- ref:Struts2 命令执行系列回顾
ref:http://www.zerokeeper.com/vul-analysis/struts2-command-execution-series-review.html Struts2 命令执行 ...
- Struts2的整体回顾(Action, 拦截器, 值栈, OGNL表示式, ModelDriven)
ValueStack里有map(request, session, attr, parameters)和对象栈. Map调用的方法: ActionContext.getContext().put(k, ...
- 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】
昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...
- struts2学习笔记--线程安全问题小结
在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...
- Struts2 源码分析——配置管理之ContainerProvider接口
本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的Contai ...
- Struts2 源码分析——调结者(Dispatcher)之执行action
章节简言 上一章笔者写关于Dispatcher类如何处理接受来的request请求.当然读者们也知道他并非正真的执行action操作.他只是在执行action操作之前的准备工作.那么谁才是正真的执行a ...
- [转] Struts2入门示例教程
原文地址:http://blog.csdn.net/wwwgeyang777/article/details/19078545/ 回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记 ...
- Struts2 简介
回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记录下创建过程,方便查阅. 1.下载Struts2的jar包 下载地址:http://archive.apache.org/dist ...
随机推荐
- 【bzoj1913】 Apio2010—signaling 信号覆盖
http://www.lydsy.com/JudgeOnline/problem.php?id=1913 (题目链接) 题意 给出一个平面上n个点,求任选3个点画一个圆所包含的点的期望值. Solut ...
- SQL查询语句 常用示例
SQL语言的应用 1. 找出姓李的读者姓名和所在单位. 2. 列出图书库中所有藏书的书名及出版单位. 3. 查找高等教育出版社的 所有图书及单价,结果按单价降序排序. 4. ...
- js 日期时间排序 数组
不多说直接show代码 var timeArr=[ {'id':'A01','date':'2016-04-20 23:22:11'}, {'id':'A02','date':'2016-04-21 ...
- HDU1086You can Solve a Geometry Problem too(判断线段相交)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- Day2-python基础2
本次学习内容 1.for循环 2.continue and break 3.while循环 4.运算符 5.数据类型 数字 字符串 列表 1.for循环 猜年龄的游戏完善下,只有三次机会 for i ...
- Install Docker on Ubuntu
Install Docker on Ubuntu Estimated reading time: 17 minutes Docker is supported on these Ubuntu oper ...
- onscroll事件,onresize事件
js获取页面元素高度.宽度 网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: do ...
- asp rs开启关闭问题
使用rs.close关闭后,可以直接用rs.open来打开数据表:如果用了set rs = nothing 从内存中清除rs对象,再次加载rs对象就需要使用set rs=server.createob ...
- C++项目中的extern "C" {}
from:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html C++项目中的extern "C" {} 20 ...
- wdcp安装memcached解决办法
1.下载libevent-1.4.14b-stable.tar.gz和memcached-1.4.15.tar.gz这两个文件,上传到服务器,并给它一个可用的下载地址, 如http://地址/memc ...