zoukankan      html  css  js  c++  java
  • struts2基础

      浅谈struts2基础
    1.什么是框架?
    在我的理解中,框架相当于人们生活中的各种工具,帮助程序员
    更好的完成工作,让我们用更精简的代码来替代之前大量重复的代码。

    2.怎么写框架?
    想要实现自己的框架,就必须要对框架之间的各种关系,流程清
    楚。明白服务器运行时,为什么会先加载配置文件(web.xml),然后又是根据什
    么条件执行到(struts.xml)中。在进行页面内事件处理时,
    根据什么与后台进行交互,把握好它们各自之间的关系,才能写出属于自己的框架。

    3.servlet封装思路?
    servlet的核心是资源和资源之间的映射关系
    类和URL-pattern之间的映射关系;
    而我们封装servlet就是把它变成一个展现层框架,而展现层框架最核心的
    是以下三点:
    1.配置文件(properties)这里面封装的是我们各种资源调配之间的映射关系;
    2.过滤器(filter)在这里我们可以进行捕获所所有符合条件的资源名 如: .do Or .action;
    3.反射机制,所谓反射,就是在JVM(动态)中,我们只要
    知道某一对象的名字,就能获取它所有声明的方法,并调用这些方法。

    4.struts框架?
    1.理解?
    struts框架是SSH(struts2,spring,hibernate)框架中的展现层框架。
    展现层框架的原理就是把数据仓储中的数据取出来,放在浏览器页面
    进行展现,想要实现这些功能就需要我们把握好资源和资源调配之间的映射关系。
    然后运用java代码调用Action里面的方法,调用Action也有两种方法,一是请求调
    度,二是url(统一资源地址符)
    5.struts2详解?
    1.什么是struts2?
    struts2是一个展现层框架,它本质上相当于一个servlet。它是在struts1和webwork的基础上合并的一个新框架。
    2.使用思路?
    使用struts2框架时,我们要牢记以下三步:
    1.导入struts2的jar包;
    2.把调用各个资源之间的配置文件写齐全;
    3.根据自己需求的功能写好类。

    3.核心配置:
    1.web.xml;
    存在过滤器;
    在过滤器进行捕获时,有*.action和/*两种方法。但是在实际开发中使用/*的
    话所有的文件全部都会被过滤到到,这样会会为我们的工程带来很大的安全隐患。
    2.strust.xml。
    struts.xml里面包含了版本信息,编码格式,约束文件,跟标签,常量,包等。
    1.版本信息和编码格式,声明了我们这个xml文件的基础类型;
    2.约束文件规定了我们在xml文件里具体能够写那些内容;
    3.跟标签就是一个<struts></struts>;
    4.常量是其中最重要的一步,它为我们提供了各种各样的方法用以解决各种问题,
    如:i18n(编码格式) devMode(开发者模式)等;
    5.包(package)在包里我们可以配置各个资源之间的映射关系,包里包含有<action>
    标签,Action标签包含有 name namespace method 属性,其中name和method
    是必有属性,namespace只是规定访问空间。
    然后Action里还有一个result标签,它代表action的最终返回结果,无返回值可以不写,
    它里面也有name和type name必须和类里的返回值名称相同,type表示请求转发和重定向,
    默认请求转发,重定向是redirect。
    4.访问流程:
    1.服务器启动,此时加载配置文件,如配置文件有误,会在控制台中打印出错误信息;
    2.在浏览器通过(URL)进行访问;
    3.进入到web.xml中,经由web.xml中的过滤器,拼接地址中所包含的字符串,获得包路径和方法名等;
    4.进入struts.xml,在这里更深一步进入拦截器interceptors中,
    通过拦截器里各种拦截方法把参数拆分出来;
    5.根据映射关系进入到具体Action中,执行具体的方法
    在方法体中根据相应的代码实现不同的功能,方法可以分为有返回值和无返回值两类。
    1.有返回值:
    根据其返回的内容,在struts.xml对应方法的结果(result)内显示不同的结果;
    2.无返回值:
    如方法内有响应,就会根据响应做具体的功能,如果
    没有响应,那就只执行相应的功能代码。
    在Action中只要针对前台表单里的属性或对象生成具体的getter和setter方法,
    前台页面就能获得后台传递的值(setter),后台也能获得前台具体传递的值(getter)。

    6.struts2的展现层处理策略?
    1.在struts框架中自带有用于页面数据展现的标签库
    struts-tag,但是这个标签库违反了数据处理和页面展现相分离的原则。
    为了解决struts-tag里的问题,我们用以下三块来替代,
    它们是 html,js,css,
    其中html又有html4.01(PC端)和html5(移动端)两种。
    为了解决它们之间的兼容性问题,程序员开发了jQuery用于更好实现页面展现的效果。
    jQuery原理是在浏览器的某一位置显示具体的内容,样式,属性,效果。但是jQuery也只是
    静态的展示页面的数据信息,想要动态展示的话就需要ajax。
    7.ajax?
    1.为什么要进行ajax异步处理?
    用户在页面上实现具体的功能操作时,如果每进行一次数据处理页面就重新加载一次的话,
    不仅会给服务器带来很大的压力,也会让用户感觉很繁琐。所以ajax就应运而生了。
    2.ajax异步处理是如何实现的?
    ajax工作原理就是异步加载处理浏览器数据。
    大概分为以下几步:
    1.使用XMLHttpRequest对象和web服务器进行异步数据交接;
    2.使用javascript操作文件(document),对象(Object),模型(model)进行动态显示,交互。
    3.ajax的工作原理?B/S模式下产生的
    它就是在客户浏览器和服务器之间加入了一个中间层
    (ajax引擎),使得用户操作和服务器响应异步处理,
    但并不是所有的请求都异步,只有一些数据校验(如注册时判断是否有重复字段),
    只有必须从服务器接受新数据时才去响应整个html页面。
    8.文本,文件数据提交策略?
    文本,文件有两种上传方式,分别是单文本,文件和多文本,文件。
    每种上传方式都有三种提交方式1.form表单 2对象.属性 3.ajax
    1.如果使用form表单或对象.属性的方式,不管是单文本,文件或是多文本,文件
    每提交一次,服务器就要响应一次,需要加载整个的html页面,
    如果需要使用别的功能,还得等待页面重新加载才可以,业务流程太过繁琐。
    2.ajax异步提交:
    ajax的话就可以直接在当前功能区域进行提交而不用重新响应整个html页面,大大减轻了客户的
    等待时间和服务器的压力。
    但是ajax只能够进行少量的数据异步提交,遇到大量数据时也不能完美解决需求,
    所以有有了基与jQuery衍生出来的ajaxSubmit提交,
    它可以以整个form表单为对象,整体提交。

    9.增删改查 分页策略?
    增删改查、分页并实现功能没有什么过于复杂的思路,只需要注意以下几点即可:
    1.中文的编码格式: ---i18n
    为防止在功能实现的过程中出现乱码问题,我们需要在struts.xml中引入一个常量
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    它会作用于HttpServletRequest的setCharacterEncoding方法中指定编码格式为UTF-8;
    2.时间转化问题:
    在实际开发中,我们不可避免要在英文版的浏览器上测试自己的项目,
    但是由于中文时间和英文时间并不互相兼容,导致我们在进行有关时间的操作时会出现一系列问题。
    这种时候,就需要我们在浏览器向服务器提交有关时间的数据时用一个拦截器把它拦截出来,
    进入特定的Action里把时间格式进行转换,在把新格式传回服务器里进行具体的操作。
    10.国际化处理?
    为了解决外国友人在访问我们的页面时,不会因文字无法理解而失望,我们有一个类专门用来处理
    浏览器的语言,如是英文(en)就用英文显示具体内容,中文(zh)就用中文显示具体内容。
    但因为这种方法实现起来太过繁琐,所以现在市场上的公司或机构基本都是使用多套页面,
    每一套对应一种语言。
    11.模型驱动,值栈?
    模型驱动可以让我们获取form表单的属性更简单化,
    模型驱动原理:
    1.先在bean里面定义好需要的属性,
    2.在Action里实现ModelDriven的接口,泛型定义为bean,
    3.在Action里新声明一个bean类;
    4.重写ModelDriven的getModel方法,在里面获取Action的对象,判断其是否为空:
    若为空,就为它新开辟一个空间,并返回;
    不为空则直接返回;
    5.在方法内通过request请求把所有bean里的属性放入值栈中,方便后面调用。这里在放入属性时,
    依照的顺序是属性的首字母从a-z的排序;
    6.调用的话直接valueStack.findValue()就可以了;

  • 相关阅读:
    oracle 强杀进程
    oracle查询使用频率和磁盘消耗需要缓存大小
    Oracle定时器执行多线程
    Python
    Python- XML模块
    Python-标准库之OS模块
    Python
    Python-时间复杂度
    Python-冒泡排序
    Python-正则表达式
  • 原文地址:https://www.cnblogs.com/zhuangfei/p/7158903.html
Copyright © 2011-2022 走看看