您的位置:首页 > 编程语言 > Java开发

Web框架梳理:第一章:Struts2入门、传值、分页、对象、值栈、OGNL、响应方式、标签、拦截器

2016-12-01 08:53 471 查看
一、Struts2框架: 
 是web Mvc框架 
                          基于Web:B/S模式。 

 
 1.什么是MVC:        
    
   M:Model   Service(业务逻辑的(加工的 
运算的 
处理的))  Dao(数据访问层/数据持久层)        

        
主要处理业务逻辑的.

 
   C:  Controller 控制器   Servlet
       
具体代码:接受页面数据 
调用业务逻辑(Service 
或者Dao)  
页面跳转(转发 重定向)
       
调度 
协调 
指挥的  
命令的 .

 
   V:View 
视图   .jsp   .html json({"id":1001,"name":"张三丰"})   freemarket(模板)   
jfreechart(图表)
      
展现 呈现 
交互.
 
       

  false                        
 V(视图login.jsp)<------>发出请求-----控制器(Action/Servlet)
<---------->调用业务逻辑------->(Service/Dao)-----访问数据库------DB
|                                         
返回业务逻辑结果

|

    |
|
页面跳转(true
页面调度)

|

|

main.jsp
  
 
1. struts2前世今生(了解):
   struts1: apache  
扩展很差  
技术理念不是很超前
   webwork:
核心不变 
边缘的内容 
修改了
   struts2=webwork的技术核心+struts1市场    
apache
 
 
 struts 2.3.4.1:开发包
    
2. Struts2
的开发
  1)引入jar包

     struts-core.jar
     xwork-core.jar包
 ognl.jar包
    freemarker.jar包
     commons-fileupload.jar包
    commons-io.jar包
    javassist.jar:        动态改变字节码文件jar包
commons-lang.jar: java.lang的扩展包 

  2)在web.xml中配置核心控制器(Servlet/Filter)
    
配置核心控制器:  StrutsPrepareAndExecuteFilter主要作用是:查看请求url是否符合, 
 维护struts.xml配置文件
  3)编写Action类 
自定义方法
  4)在src下 创建struts.xml。
    
配置请求url和Action类的对应关系

   <actionname="url" class="action.HelloAction">
 
 3.struts2的执行流程:                                                              
                                                                                   
   /hello---->核心控制器(检查url)---->struts.xml------->HelloAction------>sayHello------>"success"------>hello.jsp
  
 
 
4.struts2的在Eclipse中自动提示:dtd文件下载:
           下载struts-core.jar
解压缩,得到struts-2.3.dtd文件
window---preferces首选项-----搜索xml-----xml catelog--add

1.Struts2  jsp到action传值问题:

  1)jsp: <input name="username"> (*****)
   Action: private String username;
           set/get;

  
  2)将页面很多值 封装的 传递给一个对象 (*****)
    jsp: 
对象名.属性名
        <input name="u.username"/>
    Action:
         private User  u;

 set/get;
  3)第三种传值(了解):
      jsp:

      <input name="username"/>

 

  Action:

  RegistAction implements  ModelDriven{

        User u = new User();

getModel(){

  return u;

}

  }
  
注意: 
在jsp页面获取值的时候用${username}.
 
2.Struts的 crud:
 
1.Post下的分页:
    <ahref="javascript:;" onclick="page(${pageNo+1})"  >下一页
 
    <form>
   <!--保存页号的值-->

<input type="hidden" name="pageNo"/>

 
2.在struts2中怎么使用request,session,application等对象?
      
框架将request,session,application对象封装成Map类型

   1)ActionContext

            Map session =ActionContext.getContext().getSession();

 Map request =(Map)ActionContext.getContext().get("request");

 Map application =ActionContext.getContext().getApplication();
  2)ServletActionContext
获取的原始类型 request,session,application对象封装成Map类型
      
注意:struts2不建议这么用

   request:HttpServletRequest

   session: HttpSession

   application: ServletContext

   3)implements  RequestAware SessionAware   ApplicationAware

      setXxxxx();
 
建议用这种方式获取request等对象.
 
3.ValueStack(*****)
值栈结构
    struts2内存的数据结构
  1)ValueStack总共包含三部分区域,
   
第一部分:ognl引擎 主要作用是执行ognl表达式的
    
如果表达式没有加# 
就去root区查找对应值.
        
如果表达式加了#  
就去Context区去查找对应key的值
   
第二部分:Root区  
栈结构 
先进后出
   
主要用来action对象,
而且会将当前action对象 放在栈的栈顶位置.

 
    
第三部分:Context区      Map结构  
key-value键值对
     
主要用来存放request,session,application对象.

 
4.OGNL(对象图导航语言) 

  
通过提供的对象 
获取对象中的属性的值.
  
  
类似el表达式,获取对象的值
,
     el表达式独立使用的.
 Ognl表达式不能独立使用,结合struts2标签使用的
 Ognl表达式远远比el表达式强大
ognl的表达式的写法:
  ognl其实就是一个有规则的字符串

1.Struts2
标签
   1)控制标签

     <s:property  value="ognl">
     <s:date name="ognl"/>
 <s:iftest="ognl
必须是boolean值">

 <s:iteratorvalue="" var="" status="">
     <s:set value="" var="">
  
   2)UI标签
      
最终转换成了原始form标签:
 
可以将action的值传递给标签.
 
      <s:form>

   <s:textfiledname="name">

 

  <s:password>

  <s:radio>

  <s:select>

  <s:doubleselect>

  <s:checkbox>

  <s:checkboxList>

  <s:textarea>

  <sx:datetimepickername="">
 
 日历挂件的使用方法:

   1) 
引入struts-dojo-plugin.jar
   2) 
引入dojo的标签库路径
      <%@ taglib  taglib uri="/struts-dojo-tags"prefix="sx"%>
   3)<sx:head  parseContent="true">
   4)<sx:datetimepickername="">
 
 扩展:
  ckeditor:
   
文本域编辑软件插件
 1) 
在WEBroot下引入ckeditor文件

 2)  <script type="text/javascript"src="ckeditor/ckeditor.js"></script>

 3)  cssClass="ckeditor" 

dojo:前端独立的技术   ui,
异步技术 
交互技术    jquery(jquery-ui,)

  struts-dojo-plugin.jar

   
2.
几种响应方式:
   dispatcher:转发到jsp
      action中的属性:   
传递到jsp

  
   redirect  :
重定向 jsp
     action中的属性  jsp接受不到action属性的值

   
   redirectAction: 
重定向到别的action
     jsp  ----   action01  -------action02   

  chain:                        转发到别的action 
实际用的不是很多
        jsp  ----   action01  -------action02 

   stream: 
流响应 
响应回去的是流 格式
    
下载   
生成验证码(特殊的下载 
只不过是不需要保存这些提示等)

   
  json响应:  
一般结合异步请求:
     
响应回去的是形如:{"key":"value","key2":"value2",.....}

                   [{"key":"value","key2":"value2",.....},{"key":"value","key2":"value2",.....}]
{"key":["北京","北京大学"]} 
这种格式的字符串.

 
 
验证用户输入的验证码是否正确.
 
文本框自动补全提示:
    a.引入struts-json-plugin.jar
    b.<package extends="json-default">        

c.<result type="json">
     <!--什么不写  
默认会将action类的所有属性 
都以json格式响应-->
 <!--root:   将指定的属性的值 以json响应-->

   <paramname="root">flag</param>
 <!--includeProperties:将指定的属性名 以及属性值都以json格式响应
-->

 <paramname="includeProperties">flag</param>
jfreechart图表响应(扩展):
 
响应回去的是图表(饼状图 ,柱状图,曲线折线图等)

 
 统计分析的功能:jfreechart  highchart 

 

1.Struts中拦截器(Interceptor)

   
作用1:将很多Action中公共的逻辑代码抽取出来,形成一个拦截器类,
 然后通过配置的形式作用到所需要的action上.
作用2:根据请求url的访问路径,从而决定这个访问路径是否可以继续访问action.

 
注意:struts2默认提供了很多内置的拦截器.
发出请求-------核心控制器------拦截器1----拦截器2------        Action(execute)-----result(dispacher/redirectAction/json/chart/stream/chain/freemarker).
发出请求-------核心控制器------拦截器1----拦截器2-----result(dispacher).
1)自定义拦截器
 
自己编写拦截器类.
   a.继承AbstractInterceptor抽象类
   b.将拦截器的逻辑代码 重写在interceptor方法
   c.
在struts.xml中声明并且配置拦截器.
    <interceptors>
<interceptor name="拦截器的名字" class="全类名">

</interceptors>

 

<action>
<interceptor-ref name="拦截器的名字">

<interceptor-ref name="defaultStack">

</action>
 
 
  
需求:计算当前所有的action的方法的执行花费的时间.
  
 session验证:
       
没有登录 不让直接操作main.jsp 
跳转到login.jsp,
如果登录了 就可以直接访问main.jsp.
 
2)内置拦截器
  
拦截器类不需要自己编写.
   例如::fileUpload: 
上传拦截器
        
控制上传的大小 和类型

 

 

 
  
阻止表单重复提交(token):
     
当用户发出请求后,
刷新页面,发出新的请求给予阻止.
 
 
 
将上传失败后的提示信息 国际化成我们中国语言文字.
 
国际化:  i18n 

  
将一个软件中的语言文字 国际化成 
对应国家的语言文字.
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐