Struts 2 具体用法(自整理)

Struts 2 + Hibernate 开发模式

Struts 2:以WebWork设计思想核心的新一代MVC框架:http://how2j.cn/k/struts/struts-tutorial/54.html神器不解析
Hibernate :对象关系映射框架

导入包WEB-INF文件下lib包中
配置文件名:Hibernate.xml
配置文件名:log4j.properties
配置文件:web.xml,编写过滤器
配置文件名:Struts.xml(必须要在src文件下创建)

1.下载Struts2资源包,把相关驱动包导入当前Web应用环境。
2.添加和配置struts2配置文件
3.配置Struts2启动项,Struts2核心控制器。
4.编写Action类    
5.在struts.xml中配置action元素和结果视图。
6.编写JSP页面,运行部署和测试

在src包下创建cn.struts2下 
    dao(底层,impl()访问数据库) 
    service(业务逻辑类,impl()处理业务)
    entity(实体,映射文件hbm.xml) 
    action(动作方法,一般都需要继承ActionSupprt类,表单提交数据时一般都定义相同的name属性来自动映射接收值)
    utils(工具类,openSession,正向工程) 
    client(测试方法类)

struts.xml中:
    1.创建Action类,编写接收值(参数或对象)的get,set,无参,带参方法和业务处理方法.
    2.业务处理方法返回值要明确!如:success或者input或者error等,需要在struts.xml中做好对应的处理
    3.表单提交或者访问Action类自动带方法传递..  具体参考 <-- 项目中的文件


UI标签:在页面上导入:<%@taglib uri="/struts-tags" prefix="s"%>
EL标签不需要引入什么,JSTL标签则是:   <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>       
    UI标签: 1.表单标签:<s:form...>,<s:textfieid.../>
                   2.非表单标签:暂时不讲
                   3.Ajax标签:暂时不讲
    通用标签:<s:if><s:elseif><s:else><s:iterator>跟逻辑相关
    用法: 在JSP页面都有例子.查看一下就行!书中P57页解

Servlet API:作用域(Session,request,application),保存Object类型
    IOC 依赖注入:实现 接口 implements ApplicationAware,RequestAware,SessionAware(参考:UserLoginAction)
    解耦:    ActionContext ac = ActionContext.getContext();
        Map<String, Object> requestMap = (Map<String, Object>) ac.get("request");
        Map<String, Object> applicationMap = ac.getApplication();
        Map<String, Object> sessionMap = ac.getSession();
    耦合:HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = ServletActionContext.getRequest().getSession();
        ServletContext application = ServletActionContext.getServletContext();
    用法:保存值:.put(key,value) 取值:.get(key)

Action:方法调用有两种方式
    1.动态调用:actionName!+方法名称.action(控制器!指定访问的方法,中间使用感汉号隔开)
                     第一步:在struts.xml配置所有功能action元素
            第二步:配置struts2常量,显示允许动态方法调用
            第三步:actionName!actionMethod    
                      例如提交时访问登录方法:user!login.action (提交表单时使用,一般都用通配符方式)
               另一种:比上面的还有简单的实现方法,外加了一点通配符的方式
                      把属性改:method="{*}",访问提交表单的时候:loginUsers!+方法名称.action
    2.通配符调用:例如提交时访问登录方法:loginUsers
             Action的Name属性:*User(*匹配所有,获取的是*表示:login,只是获取User之前的)
             method="{1}"({1}表示占位符的意思吧,此時占位符获取的方法就是login())
               好像有点解析不清楚看一下例子就好  <-- Struts.xml中有使用
        另一种: 第一个*值:{1}第二个*值:{2}
             <action name="*_*" class="cn.struts2.action.{1}Action" method="{2}">
             <result name="{1}_{2}">/{1}_{2}.jsp</result>
                         表单调用时:Action_方法名称!+方法名称.action
    作用:1.封装单元(处理请求数据)2.数据转移(get,set方法)3.返回结果
    配置默认的Action:<default-action-ref name="defalutAction"/>
                作用:如果没有匹配到其他ACtion的时候,默认的Action会自动执行     

Result(接收Action方法中返回的值)配置:
    返回值:1.input(重新输入)
         2.error(有错误,一般打开这个页面显示内容都是升级系统什么的,巴拉巴拉你都懂的.(意思就是代码没错,要错也是因为系统升级的原因!嗯,就是系统升级!))
         3.success(成功之后)
         4.也可以默认不写,那就是返回的时候值找不到以上属性会默认打开某个页面,例子看一下Struts.xml就懂
         5.也可以自定义一些返回值再执行.一般是(input_+方法名) 和(success_+方法名)
         
    打开页面的Type类型有3种:
        1.dispatcher:转发到某个页面,请求中的数据不会丢失!
        2.redirect:重定向打开一个页面,请求中的数据会丢失!默认好像就是这货
        3.redirectAction:采用重定向打开一个新的Action!!,原请求的数据信息会丢失!


OGNL:对象导航图语言是一种可以方便地操作对象属性的开源表达式语言,主要负责两件事:表达式语言和类型转换器
    “%”、“#”、“$”这三个符号的使用:http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html 详解..
    大致就是:
        符号:“#”用来取根目录下的值,例如 session,request等等,取值的时候#session.key.属性名 ,这样会取到想要的对象的属性值。
        符号:“%”用于OGNL标签嵌套时候用的,比如想把一个对象的值赋值给另外一个对象:<input type="hidden" name="UserAId" value="<s:preperty value=“%UserB.id” ">
        符号:“$”就是 EL表达式辣...
    OGNL表达式:
            1.访问Bean属性:支持对象属性调用,形式如:objName.propertyName();意思是:user.name 可以在页面上输入值:类似EL表达式的用法
                         用法:用户姓名:<s:property value="user.name" />
            2.访问集合对象:书中P124页有详解..太多了直接看书吧!
    自定义转换类型:需要继承StrutsTypeConverter,同时需要重载以下两个方法:
                 1.public Object convertFromString(Map context,String[] values,Class toType)
                                将一个或多个字符串值转换为指定的类型,context:OGNL的上下文对象|values:要转换的字符串|toType:转换的目标类型
                 2.public String convertToString(Map context,Object object)
                                将指定对象转化为字符串:context:OGNL的上下文对象|object:要转换的对象
                 注意配置:全局范围的类型转换器:Src包下创建一个名为 :xwork-conversion.properties的属性文件(全局的!)
                                            创建一个名为:*Action-conversion.properties(指定的!)
                                      内容为:转换的类全名   = 类型转换器全名(  参考吧!项目中有     )
                 用法:编写类型转换器:TypeConverter(这里案例为日期类型的转换)放在utils工具包下
                                 
    <s:debug>:struts2提供了一个非常好的调试方法.就是在页面上添加一个debug标签..它会自动帮我们将一些信息显示在页面上.
                             用法:就是在页面多写一个标签就行了..

    Struts标签:可以直接理解为语法“%{···}”
        注意:Struts标签属性都可使用OGNL表达式,例如:<s:set>,<s:property>的value属性都为Object类型,
                    如果要访问动态属性则必须使用%{'~~'}这样的语法!
                                     
    Url标签:访问指定地址时传值
                 注意:Struts2中不推荐使用el表达式!
                 用法:<s:url action="User">   指定请求地址 
                   <s:param name="id" value="123"></s:param>   指定参数 
           </s:url>
           <s:a href="%{url}">测试</s:a>
                 结果为:<a href="User?id=123">             
             
数据校检:出现错误一般返回的是'input'结果,留意在struts.xml中配置好
          用法: validate()表示校检全部
          validate+大写开头方法体表示校检指定的方法。例子在:UsersManageAction.java中参考    
          一般都需要继承ActionSupprt类,同时自动生成序列号
          这样才能使用addFiledError(key,value)(保存错误信息)
          读取错误信息有两种方式:
          1.指定: jsp页面上 <s:fielderror theme="" fieldName="key"/>
          2.全部输出: jsp页面上  <s:fielderror />
          
Struts 2的验证框架:将常用的验证规则进行编码实现,在配置文件中指定某个字段需要进行的验证类型,并提供出错的信息即可
    先参考书中P141页的内置校检器
    用法:编写验证文件与校检规则
          1.验证文件要和验证的Action文件放在同一个包下
          2.采用指定的方式命名:ClassName-validation.xml        (注意这是:验证整个Action)
                                             或者:ClassName-alias-validation.xml(注意这是:验证整个Action中的指定提交Action方法)
                (ClassName是Action的类名,alias表示在Struts中配置的Action名字)
          3.例如:UsersManageAction-validation.xml(参考项目就有例子,在Action包下)
          
国际化: 其实就是用户选择用什么语言,页面自动完成切换语言的功能,符合国际化的概念(i18n=Internationaliztion(这由来..就是i开头n结尾一共18个字母组成))
     用法:1.struts.xml文件中加入:<constant name="struts.custom.i18n.resources" value="message" />
         2.在与struts.xml文件的同目录下创建文件: ① message_en_NZ.properties (切换为英文)
                                         ②message_zh_CN.properties (切换为中文) 同理当然也可以添加多个..( 直接参考项目吧!,反正文件名不能错 )
        3.在JSP页面中使用过Struts标签完成界面内容  login.jsp 用使用的方法:<a href="language?request_locale=zh_CN">中文显示</a>

令牌机制:防止用户因网络延时而多次点击提交数据时反复多次访问服务器
    用法: 1.表单中添加属性:<s:token>
        2.Struts.xml中需要验证重复提交action中加入验证拦截器
          <interceptor-ref name="token"/>
          <interceptor-ref name="defaultStack"></interceptor-ref>
          <result name="invalid.token">/error.jsp</result>
    注意:在Struts.xml文件中使用其他(所有)拦截器的时候必须再调用一次默认的拦截器,不然会出现一个非人类的问题
    案例在:login.jsp页面中有
    
拦截器:是Action执行之前或之后进行一些处理,AOP思想.是Struts体系结构的核心!
    作用于:页面请求传递,数据封装,国际化,类型装换,上传文件等等等...拦截器和过滤器的思想是完全一致..
        流程:请求(页面-->过滤器-->拦截器1-->Action-->拦截器1-->返回页面).在之前或在之后都经过拦截器
         配置详解:启动Tomcat的时候也会自动启动拦截器
 两种实现方式:
         用法1:继承AbstractInterceptor类,重写intercept方法!P92页有参考。

        用法2:创建类实现接口:Interceptor(xwork2下的包)自动生成3个方法
                    太多了...需要的时候再参考:http://www.jikexueyuan.com/course/1668_3.html?ss=1                            
               注意:在Struts.xml文件中使用其他(所有)拦截器的时候必须再调用一次默认的拦截器,不然会出现一个非人类的问题
        
   定义拦截器:在<package>包下
                   <interceptors>
                       <interceptor name="" class=""></interceptor>
                </interceptors>
     引用方式:<interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="自定义的拦截器名字" ></interceptor-ref>
         注意:在Struts.xml文件中使用其他(所有)拦截器的时候必须再调用一次默认的拦截器,不然会出现一个非人类的问题
    
 内置的拦截器:    params(将请求中的数据设置到Action属性上)拦截器
                 staticParams(将配置文件中通过action元素的子元素param设置的参数到对应的Action属性中)拦截器
                 servletConfig()拦截器

                 

使用Struts 2实现文件上传:用户在页面上通过<s:file>选中文件,自动把文件上传到Tomcat服务器中保存..
    用法: 1.添加jar包:commons-fileupload-1.3.jar 和  commons-io-2.0.1.jar
        2.在页面上<s:from>中指定加入属性:enctype="multipart/form-data"
               表单中包含:<s:file name=“upload”>,其中name属性必须对应Action类中定义的name才能取值!
        3.配置Struts 2配置文件:为其添加一个action动作方法 
        4.编写UpLoadFileAction类:使用文件流方式输入输出,再返回结果在XML中判断.
         (upload文件内容,uploadFileName文件名称,uploadContentType文件类型和uploadPath保存路径)
     单个上传:定义字符串接收值         
     多个上传:定义数组接收值+for循环实现
     配置上传文件大小:在Struts.xml中加入:
        
使用Struts 2实现文件下载:需要指定一个输入流,即是InputStream,通过这个流就可以实现文件下载功能
    用法: 1.创建显示图片的网页给出访问Action的连接:<a href="fileDownLoadAction?fileName=<s:property value='#fileName' />">请下载<s:property  value='#fileName' /></a>
        2.编写FileDownLoadAction类(具体属性参考项目,重点)
        3.在Struts.xml中配置结果和参数(具体属性参考项目,重点,可参考书上P104页详解)
        
    塔么的,中文会乱码.    
    
    参考1:http://blog.csdn.net/csh624366188/article/details/6695702
        在FileDownLoadAction.java中fileName的set属性改为:
        // 转换格式
        this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
    参考2:直接修改Tomcat中的配置文件
        http://zhidao.baidu.com/question/227896210.html?qbl=relate_question_0&word=jsp%D2%B3%C3%E6%D4%F5%C3%B4%B4%F2%B2%BB%BF%AA%D6%D0%CE%C4%C3%FB%B3%C6%CD%BC%C6%AC
        
        
        
        
        
        
        

转载于:https://my.oschina.net/Shilu/blog/743040

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值