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">
&lt;!&ndash;接受处理用户的/helloword.action请求,并根据返回结果,完成跳转&ndash;&gt;
<action name="helloword"
class="cn.struts.one.HelloWordAction">
&lt;!&ndash;结果为”helloword时,跳转至helloword.jsp页面&ndash;&gt;
<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 第二天的更多相关文章

  1. Struts2第二天

    Struts2第二天 昨天: 1.Action的编写方式:实现Action接口.继承ActionSupport.自定义pojo作为action 2.action调用方法:默认的execute.meth ...

  2. struts2第二天——数据操作

    先介绍一下大致内容: 大致内容: 结果页面配置 action获取表单提交数据 提供获取表单数据的方式(封装数据) 表单数据封装到集合中 表达式封装和模型驱动封装比较 一.结果页面配置: result标 ...

  3. Struts2 第二讲 -- Struts2的入门

    搭建struts2环境时,我们一般需要做以下几个步骤的工作: 第一步:创建javaweb工程(这个很废话有木有) 第二步:找到开发Struts2应用需要使用到的jar文件.(这个很白痴有没有) 到ht ...

  4. SSH框架之Struts2第二篇

    1.2 知识点 1.2.1 Struts2的Servlet的API的访问 1.2.1.1 方式一 : 通过ActionContext实现 页面: <h1>Servlet的API的访问方式一 ...

  5. Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】

    前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...

  6. SSH开发模式——Struts2(第二小节)

    上一小节已经学会了如何去搭建Struts2的开发环境,该篇博客我们继续深入Struts2,了解Struts2框架的拦截器. 首先对我们在web.xml文件配置的过滤器进行一个源码的分析. 在Strut ...

  7. strits2初始配置总结

    **************************************************************************************************** ...

  8. struts2框架学习之第二天

    day02 下面是在每个Action之前都会执行的拦截器,这段代码来自与struts-default.xml文件. <interceptor-stack name="defaultSt ...

  9. 第二篇——Struts2的Action搜索顺序

    Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action     1.判断package是否存在,例如:/pat ...

随机推荐

  1. SSDB VS redis

    现在有不少团队开始使用了一个新型高效的 NoSQL数据库 - SSDB,如 京东.唱吧 …… SSDB 官网的定义 一个高性能的支持丰富数据结构的 NoSQL 数据库,用于替代 Redis 官网 ht ...

  2. Spirng+In+Action(Craig Walls Ryan Breidenbach)

    目录 1.开始Spring之旅(简介) 2.装配Bean(IoC) 3.创建切面(AOP) ... 第一章:开始Spring之旅 1.1 为什么使用Spring:简化了企业级系统开发. 1.1.1 j ...

  3. 使用log4j出现缺失com.sun.jdmk:jmxtools:jar:1.2.1

    用maven引用log4j出现缺失com.sun.jdmk:jmxtools:jar:1.2.1的错误提示 解决方案一:使用1 .2 .15之前版本的log4j 解决方二: <dependenc ...

  4. Spring IOC 少

    控制反转好处 IOC:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式.所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给sprin ...

  5. CODING 代码托管架构升级之路

    本文为 CODING 创始团队成员王振威在『CODING 技术小馆:上海站』的演讲实录. CODING 技术小馆,是由国内专业的一站式软件服务平台 CODING 主办的一系列技术沙龙.将邀请数位业内知 ...

  6. android build system resource links

    总体结构,参见这里:http://www.jayway.com/2012/10/24/a-practical-approach-to-the-aosp-build-system/ 一般应用的Andro ...

  7. .net core 中使用NLog

    在.net standard 2.0.3 和.net core 2.1适用.其他版本的.net 应该也可以. 1.新建一个空白解决方案,再建一个类库 2.安装NLog.Config,会生成一个配置文件 ...

  8. nginx优化配置大全

    由于面试被问到nginx优化做过哪些 后来发现,其实做过的也不少,忘了的更不少,因此写个博客记录一下(里面有一些内容来源于其他作者). 配置文件样例为生产环境样例. 1.nginx基本优化 安装方式有 ...

  9. 项目接入apm后错误报警总结

    此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言: 后端服务一般都有监控措施,一般可以及时发现线上错误,但是很多项目的前端却没有线上报警服务,即使有错误, ...

  10. Linux ubi子系统原理分析

    本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...