struts2 第二天
3.自动装配
零散属性:Action类中两个成员变量的名称和页面上表单元素name属性值保持一致。
规则:约定优于配置。
领域模型:两种配置
public class FirstAction implements Action{
private UserInfo userinfo;
}
配置一:
userinfo.username
userinfo.password
配置二:ModelDriven
public class FirstAction implements ModelDriven<UserInfo>,Action{
private UserInfo userinfo=new UserInfo();
public UserInfo getModel(){
return userinfo;
}
}
3.ServletAPI 操作 session request, application
解耦
方式一:
public FirstAction implements Action{
public String execute() throws Exception{
Map<String,Object> map= ActionContext.getContext().getSession();
map.put(k,v);
return "逻辑视图名";
}
}
方式二:
public FirstAction implements SessionAware,Action{
Map<String,Object> map ;
public String execute() throws Exception{
map.put(k,v);
return "逻辑视图名";
}
public void setSessionAware(Map<String,Object> map){
this.map=map;
}
}
耦合
方式一:
public FirstAction implements Action{
public String execute() throws Exception{
HttpSession session=ServletActionContext.getRequest().getSession();
session.setAttribute(k,v);
return "逻辑视图名";
}
}
方式二:
public class FirstAction implements Action,ServletRequestAware {
HttpServletRequest request;
public String execute() throws Exception {
HttpSession session = request.getSession();
return null;
}
public void setServletRequest(HttpServletRequest httpServletRequest) {
request=httpServletRequest;
}
}
4.Action------->UI 数据共享
Map<String,Object> map;
map.put("uname","张三");
ValueStack vs=ActionContext.getContext().getValueStack();
ValueStack vs=(ValueStack)ServletActionContext.getRequest.getAttributes("struts.valueStack");
vs.push(map);
方式一:不加#
<s:property value="uname">
¥{uname}
方式二:得加#
<s:property value="#session.uname">
1.Struts2执行 基本架构
GPR原则:登录
给用户看一眼 get
用户填写登录信息,点击登录 post
页面跳转欢迎界面 redirect
*可以将核心过滤器看成是Action类的中央调度器。
2.Struts.xml 节点详细讲解
namspace作用:隔离不同的命名空间下的逻辑同名的Action
几个文件的执行顺序
1.default.property
2.struts-default.xml
3.struts-plugin.xml
4.struts.xml
5.struts.property
6.web.xml
3.常量配置
<!--修改Struts.xml,不用重启容器-->
<constant name="struts.devMode" value="true" />
4.动态方法调用(DMI Dynamic Mehtod Invocation) RMI Remote Method Invocation 远程方法调用
当一个Action中有多个业务方法的时候,我们要向让客户端请求能匹配到对应的方法,我们现在的做法
定义多个Action节点,我们又想到了,如果Action节点很多,维护起来很不方便。
1.开启动态方法调用
2.配置
通过!访问方法 actionName!list actionName!del(Action类中的真实方法) 可能会注入
缺点:
5.通配符 *_* 万象归终 四两拨千斤
使用一个节点 实现整个软件所有的Action best prectice 约定由于配置
6.ResultType 结果类型
dispatcher 普通转发到视图页面 (默认值) ->转发
redirect 重定向到视图页面
redirectAction 重定向到Action
chain 转发到Action
plainText
转发到Action :type="chain"
<result name="list" type="chain">
<param name="actionName">userActionResultAdd</param>
<param name="namespace">/</param>
</result>
pom.xml
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.3</version>
- <scope>test</scope>
- </dependency>
- <!--获取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>
- <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>
- struts.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPEstrutsPUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <!--创建一个default包,继承自Struts2的struts-default包-->
- <!--<package name="default" namespace="/" extends="struts-default">
- <!–接受处理用户的/helloword.action请求,并根据返回结果,完成跳转–>
- <action name="helloword"
- class="cn.struts.one.HelloWordAction">
- <!–结果为”helloword时,跳转至helloword.jsp页面–>
- <result name="ss">helloword.jsp</result>
- </action>
- </package>-->
- <package name="default" namespace="/" extends="struts-default">
- <action name="useraction" class="cn.struts.UsesrAction">
- <result name="success">/success.jsp</result>
- <result name="input">1.jsp</result>
- </action>
- </package>
- <include file="struts-day02.xml"></include>
- <include file="struts-day03.xml"></include>
- <include file="struts-day04.xml"></include>
- <include file="struts-day05.xml"></include>
- </struts>
- filtFirst类
- public class filtFirst extends ActionSupport {
- public String list(){
- System.out.println("list");
- return "list";
- }
- public String del(){
- System.out.println("del");
- return "del";
- }
- }
- struts-day02.xml
- <constant name="struts.devMode" value="true"></constant>
- <package name="cn.struts.day02" namespace="/" extends="struts-default">
- <!--list-->
- <action name="firstlist" class="cn.struts.day02.filtFirst" method="list">
- <result name="list">/day02/list.jsp</result>
- </action>
- <!--del-->
- <action name="firstDel" class="cn.struts.day02.filtFirst" method="del">
- <result name="del">/day02/del.jsp</result>
- </action>
- </package>
- ------------------------------------------------------------
- twodell类
- public class twodell extends ActionSupport {
- public String one(){
- return "one";
- }
- public String two(){
- return "two";
- }
- }
- struts-day03.xml
- <constant name="struts.devMode" value="true"></constant>
- <package name="cn.struts.day03" namespace="/" extends="struts-default">
- <!--list-->
- <action name="*_*" class="cn.struts.day03.{1}" method="{2}">
- <result name="{2}">/day03/{2}.jsp</result>
- </action>
- </package>
- -----------------------------------------------------
- filtFirst类
- public class filtFirst extends ActionSupport {
- public String list(){
- System.out.println("list===================");
- return "list";
- }
- public String del(){
- System.out.println("del====================");
- return "del";
- }
- }
- struts-day04.xml
- <struts>
- <constant name="struts.devMode" value="true"></constant>
- <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
- <package name="cn.struts.day04" namespace="/" extends="struts-default">
- <!--list-->
- <action name="firstFirst" class="cn.struts.day04.filtFirst">
- <result name="list">/day02/list.jsp</result>
- <result name="del">/day02/del.jsp</result>
- </action>
- </package>
- </struts>
- UserAction类
- public class UserAction extends ActionSupport {
- public String del(){
- return "del";
- }
- public String list(){
- Map<String,Object> request= (Map<String, Object>) ActionContext.getContext().get("request");
- request.put("uname","啦啦");
- return "list";
- }
- public String add(){
- Map<String,Object> request= (Map<String, Object>) ActionContext.getContext().get("request");
- Object uname=request.get("uname");
- request.put("info","数据");
- return "add";
- }
- }
- struts-day05.xml
- <struts>
- <constant name="struts.devMode" value="true"></constant>
- <package name="day05" namespace="/" extends="struts-default">
- <action name="userActionResult" class="cn.struts.day05.UserAction" method="list">
- <result name="list" type="chain">
- <param name="actionName">userActionAdd</param>
- <param name="namespace">/</param>
- </result>
- </action>
- <action name="userActionAdd" class="cn.struts.day05.UserAction" method="add">
- <result name="add">/day05/add.jsp</result>
- </action>
- </package>
- </struts>
- add.jsp
- <body>
- <s:debug/>
- ${info}${uname}<h2>Day05 Add</h2>
- </body>
struts2 第二天的更多相关文章
- Struts2第二天
Struts2第二天 昨天: 1.Action的编写方式:实现Action接口.继承ActionSupport.自定义pojo作为action 2.action调用方法:默认的execute.meth ...
- struts2第二天——数据操作
先介绍一下大致内容: 大致内容: 结果页面配置 action获取表单提交数据 提供获取表单数据的方式(封装数据) 表单数据封装到集合中 表达式封装和模型驱动封装比较 一.结果页面配置: result标 ...
- Struts2 第二讲 -- Struts2的入门
搭建struts2环境时,我们一般需要做以下几个步骤的工作: 第一步:创建javaweb工程(这个很废话有木有) 第二步:找到开发Struts2应用需要使用到的jar文件.(这个很白痴有没有) 到ht ...
- SSH框架之Struts2第二篇
1.2 知识点 1.2.1 Struts2的Servlet的API的访问 1.2.1.1 方式一 : 通过ActionContext实现 页面: <h1>Servlet的API的访问方式一 ...
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...
- SSH开发模式——Struts2(第二小节)
上一小节已经学会了如何去搭建Struts2的开发环境,该篇博客我们继续深入Struts2,了解Struts2框架的拦截器. 首先对我们在web.xml文件配置的过滤器进行一个源码的分析. 在Strut ...
- strits2初始配置总结
**************************************************************************************************** ...
- struts2框架学习之第二天
day02 下面是在每个Action之前都会执行的拦截器,这段代码来自与struts-default.xml文件. <interceptor-stack name="defaultSt ...
- 第二篇——Struts2的Action搜索顺序
Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action 1.判断package是否存在,例如:/pat ...
随机推荐
- project online get approvals task data 获取审批待办任务接口
调用接口地址:重要 http://xxxx/sites/pwa/_vti_bin/PSI/ProjectServer.svc Header 三个必要参数: 其中SOAPAction写死就行,如果是on ...
- event.keyCode 事件属性
转自:http://www.runoob.com/jsref/event-key-keycode.html <!DOCTYPE html> <html> <head> ...
- cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客
cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...
- tomcat jsp 数字串传值异常问题
1.在下面的jsp内嵌java代码去除num之前,有某Controller已经有了操作: request.getSession().setAttribute("num", ...
- 使用Cors后台设置WebAPI接口跨域访问
昨天根据项目组前端开发工程师反映,在浏览器端无法直接使用ajax访问后台接口获取数据,根据他的反映,我查阅了相关跨域的解决方案: 一:使用jsonP,但是jsonP只能使用GET请求,完全不符合我项目 ...
- 使用jquery插件实现图片延迟加载--懒加载技术
原文链接:http://www.cnblogs.com/lei2007/archive/2013/05/31/3110725.html 感谢作者.以下为原文,备忘仅供自己学习. 第一:lazyLoad ...
- Java中编写线程安全代码的原理(Java concurrent in practice的快速要点)
Java concurrent in practice是一本好书,不过太繁冗.本文主要简述第一部分的内容. 多线程 优势 与单线程相比,可以利用多核的能力; 可以方便的建模成一个线程处理一种任务; 与 ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- Ajax.BeginForm 使用过程中遇到的问题
一.Ajax.BeginForm设置的路由在浏览器中解析不到. 问题截图:在视图中设置"Counter/Index",在浏览器中显示的是"action='/'" ...
- ProtoBuf练习(二)
重复数据类型 protobuf语言的重复字段类型相当于C++的std::list数据类型 工程目录结构 $ ls proto/ TServer.proto TSession.proto proto文件 ...