Struts学习总结--Java免费学习网

web中常规任务:国际化 文件上传 参数传递 类型转换 处理表单的重复提交.

struts2:struts1 + webwork,
 1.分离关注:不再将所有任务交给一个人完成,而是将任务拆分,每个任务交给独立的一个组件(拦截器)完成,使得框架更加更加整洁.
      更便于维护和管理.
 2.struts2实现了应用程序和框架api的解耦,action是pojo.更加容易测试.
   struts1和原生的servlet api(HttpServletRequest,HttpServletResponse)耦合在一起,难于测试.
 3.struts由于每个实体都会对应一个formbean,所以会造成的类的爆炸,struts2没有actionform组件,使用pojo代替.
 4.struts1的action是单利的,数据不是线程安全的.struts2中的action是原型,每个线程独占访问action实例,不会造成并发访问,
      因此struts2的action是数据线程安全的.
 5.struts1是基于servlet的,struts2是基于filter.

webwork:

struts1配置文件:
<struts-config.xml>
    <form-beans>
        <form-bean name type="...UserForm" />
    </form-beans>
    <action-mappings>
 <action path="/xx"
  name="userForm"
  scope="request|session"
  validate="true"
  input="/xxx.jsp"
  type="....RegAction">
   <forward name path="/xxxx.jsp" />
        </action>
    </action-mappings>
</struts-config>

 struts-html.tld:回显数据
 struts-bean.tld:输出数据,jstl <c:out>
 struts-logic.tld:逻辑标签库,逻辑判断的.
 1.action寻找
 2.formBean处理
 3.封装参数信息
 4.校验处理
 5.跳转到input页面
 6.实例化action
 7.调用action方法
 8.解析actionForward
 9.跳转
 
 mvc:
  control:ActionServlet Action.

 <>
 <action path="/"
   parameter="method"
   type="..XxxAction">
 url:http://.../XxxAction.do?method=save
spring:aop,降低耦合.

使用struts2进行web开发
 1.创建web项目.
 2.引入struts2类库
  ${struts2解压目录}/apps/struts2-blank-2.1.8.1.war/web-inf/lib/*.jar
 3.创建action(pojo)
  package cn.itcast.struts2.action;

  /**
   * HelloWorldAction
   */
  public class HelloWorldAction {
   public String execute() {
    System.out.println("hello world");
    return null;
   }
  }
 4.创建src/struts.xml配置文件
  dtd:struts-core.jar/struts-2.1.7.jar/30行
  <?xml version="1.0"?>
  <!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
   "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  <struts>
   <package name="HelloWorldPkg" namespace="/HelloWorld">
    <action name="HelloWorldAction" class="cn.itcast.struts2.action.HelloWorldAction" />
   </package>
  </struts>
 5.配置web.xml文件的过滤器-org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.
  <?xml version="1.0" encoding="UTF-8"?>
  <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   <filter>
    <filter-name>action</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   <filter-mapping>
    <filter-name>action</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>
   <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
  </web-app>
 6.测试.

 struts1文件上传:
  UserForm{
   //struts1提供的FormFile
   FormFile photo ;
  }

  <form enctype="multipart/form-data" method="post">
   <input type="file" name="photo" /> 
  </form>

  text/html,image/jpeg contentType="".

  <global-forwards>
   <forward name="404" path="/xxx.jsp" />
  </global-forwards>

http://www.javalearns.com/

请求转发:共享数据,只能转发到当前应用上的路径上.
重定向: 不能共享数据,重定向到任意url.

struts2包搜索顺序:
 http://localhost:8085/lsn_struts2/HelloWorld/aaa/bbb/HelloWorldAction.do?name=tom [url:ActionMapper->ActionMapping]
 http://localhost:8085/lsn_struts2/HelloWorld/aaa/HelloWorldAction.do?name=tom
 http://localhost:8085/lsn_struts2/HelloWorld/HelloWorldAction.do?name=tom

Struts2:
 Action位于模型层,action可以携带数据(实例变量).

 Ognl:Object Graph navigator language,对象图导航语言.  el:

 page --> request --> session -->application

 struts2:ValueStack,

 ActionContext:是线程本地化的.
 
Queue:队列,先进先出.
Stack:栈,先进后出.ArrayList,

Spring:
 service层面上实现事务管理:
  1.编程式:硬编码方式
  2.声明式:aop xml

struts2中阻止某些方法进行校验:
 1.@SkipValidation
 2.validateReg|validateDoReg
 3.通过覆盖拦截器参数的形式.
  <!-- 注册Action -->
  <action name="RegAction_*" class="cn.itcast.struts2.action.RegAction" method="{1}">
   <result name="success">/success.jsp</result>
   <result name="regView">/reg.jsp</result>
   <result name="input">/reg.jsp</result>
   <interceptor-ref name="defaultStack">
    <!-- 排出的方法 -->
    <param name="validation.excludeMethods">input,back,cancel,browse,toReg</param>
   </interceptor-ref>
  </action>
struts2中文件上传:
 1.上传多个实用数组即可.
 2.阻止哪些文件能上传.(通过扩展名方式 + 通过内容类型方式.)

 静态参数拦截器:
  <action name="RegAction_*" class="cn.itcast.struts2.action.RegAction" method="{1}">
   <param name="uploadDir">d:/kkk</param>
  </action>
  静参拦截器在参数拦截器之前执行,所以参数拦截器覆盖静参拦截器的值.(取决于顺序配置)
struts2:servletConfig.
 httpServletRequest.getAttribute();

 Map.get("");

http://www.javalearns.com/

ajax:同步消息.

struts2 ognl 表达式:
 <s:textfield name="names" label="UserNames"/>:数据不能正确回显
 <s:textfield name="ages[0]" label="UserAges"/>:可以正确回显.

hibernate:
 Customer{
  Address ca ;
  Address ha ;
 }
 <hibernate-mapping>
  <class name table lazy >
   <id ..>
   <component name="ha" class="...Address">
    <property name column type />
   </component>
  </class>
<logic:iterator>

s:i18n:指定某一个文件:

allUsers{age > 25};

select * from customers;
select id,name from customers;//投影查询

Dispatcher://只能转发到另外的jsp或者是servlet.
request.getDispatcher("/xxx.jsp").forward(request,response);


redirect:从定向,可以从定向到任意url.
   对于站内的从定向,需要以"/"开头,结果类型类会解析该url封装成ActionMapping,同时自动在前面追加ServletConext[lsn_struts2]

response.sendRedirect("http://www.gogle.com");

chain:相当于action之间的请求转发,栈中含有所有所涉及的action对象.

response.setContentType("text/plain");
ServletOutStream sos = response.getOutsteam();
sos.write(".dddd");

 

response.setContentType("image/jpeg");
ServletOutStream sos = response.getOutsteam();
sos.write(byte[]);

ModelDriven:
 模型驱动,方便对所有action的模型对象进行批处理.
 典型是在拦截器完成.
 eq:
 MyInterceptor{
  Object o = invocation.getAction();
  if(o instanceof ModelDriven){
   Object model = ((ModelDriven)o).getModel();
   sysout(model.getClass());
  }

 }

文章转载自 http://www.javalearns.com/Html/?1524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值