当前位置: 首页 > news >正文

黄页网络的推广网站有哪些怎样在手机上做网站

黄页网络的推广网站有哪些,怎样在手机上做网站,无锡锡牛网站建设,怎样做网络推广效果好一、理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法#xff0c;字段之前或之后实施拦截#xff0c;并且Struts2拦截器是可插拔的#xff0c;拦截器是#xff21;#xff2f;#xff30;的一种实现#xff0e; 2. 拦截器栈#xff08;Inter… 一、理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法字段之前或之后实施拦截并且Struts2拦截器是可插拔的拦截器是的一种实现 2. 拦截器栈Interceptor Stack。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。 二、实现Struts2拦截器原理 Struts2拦截器的实现原理相对简单当请求struts2的action时Struts 2会查找配置文件并根据其配置实例化相对的    拦截器对象然后串成一个列表最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 Struts2规定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明了3个方法 void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception;   其中init和destroy方法会在程序开始和结束时各执行一遍不管使用了该拦截器与否只要在struts.xml中声明了该Struts2拦截器就会被执行。 intercept方法就是拦截的主体了每次拦截器生效时都会执行其中的逻辑。 不过struts中又提供了几个抽象类来简化这一步骤。 public abstract class AbstractInterceptor implements Interceptor; public abstract class MethodFilterInterceptor extends AbstractInterceptor;   都是模板方法实现的。 其中AbstractInterceptor提供了init()和destroy()的空实现使用时只需要覆盖intercept()方法 而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性用来过滤执行该过滤器的action的方法。可以通过param来加入或者排除需要过滤的方法。 一般来说拦截器的写法都差不多。看下面的示例 package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor { public void destroy() { // TODO Auto-generated method stub } public void init() { // TODO Auto-generated method stub } public String intercept(ActionInvocation invocation) throws Exception { System.out.println(Action执行前插入 代码);      //执行目标方法 (调用下一个拦截器, 或执行Action)    final String res invocation.invoke();    System.out.println(Action执行后插入 代码);    return res;    } } 四、配置Struts2拦截器 Struts2拦截器需要在struts.xml中声明如下struts.xml配置文件 ?xml version1.0 encodingUTF-8? !DOCTYPE struts PUBLIC -//Apache Software Foundation//DTD Struts Configuration 2.0//EN http://struts.apache.org/dtds/struts-2.0.dtd struts constant namestruts.objectFactory valuespring / package namedefault extendsstruts-default interceptors interceptor nameMyInterceptor classinterceptor.MyInterceptor/interceptor interceptor-stack namemyInterceptorStack interceptor-ref nameMyInterceptor/ interceptor-ref namedefaultStack/ /interceptor-stack /interceptors action nameloginAction classloginAction result namefail/index.jsp /result result namesuccess/success.jsp/result interceptor-ref namemyInterceptorStack/interceptor-ref /action /package /struts 拦截器   名字   说明   Alias Interceptor   alias   在不同请求之间将请求参数在不同名字件转换请求内容不变   Chaining Interceptor   chain   让前一个Action的属性可以被后一个Action访问现在和chain类型的result结合使用。   Checkbox Interceptor   checkbox   添加了checkbox自动处理代码将没有选中的checkbox的内容设定为false而html默认情况下不提交没有选中的checkbox。   Cookies Interceptor   cookies   使用配置的name,value来是指cookies   Conversion Error Interceptor   conversionError   将错误从ActionContext中添加到Action的属性字段中。   Create Session Interceptor   createSession   自动的创建HttpSession用来为需要使用到HttpSession的拦截器服务。   Debugging Interceptor   debugging   提供不同的调试用的页面来展现内部的数据状况。   Execute and Wait Interceptor   execAndWait   在后台执行Action同时将用户带到一个中间的等待页面。   Exception Interceptor   exception   将异常定位到一个画面   File Upload Interceptor   fileUpload   提供文件上传功能   I18n Interceptor   i18n   记录用户选择的locale   Logger Interceptor   logger   输出Action的名字   Message Store Interceptor   store   存储或者访问实现ValidationAware接口的Action类出现的消息错误字段错误等。   Model Driven Interceptor   model-driven   如果一个类实现了ModelDriven将getModel得到的结果放在Value Stack中。   Scoped Model Driven   scoped-model-driven   如果一个Action实现了ScopedModelDriven则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。   Parameters Interceptor   params   将请求中的参数设置到Action中去。   Prepare Interceptor   prepare   如果Acton实现了Preparable则该拦截器调用Action类的prepare方法。   Scope Interceptor   scope   将Action状态存入session和application的简单方法。   Servlet Config Interceptor   servletConfig   提供访问HttpServletRequest和HttpServletResponse的方法以Map的方式访问。   Static Parameters Interceptor   staticParams   从struts.xml文件中将ION中的 中的内容设置到对应的Action中。   Roles Interceptor   roles   确定用户是否具有JAAS指定的Role否则不予执行。   Timer Interceptor   timer   输出Action执行的时间   Token Interceptor   token   通过Token来避免双击   Token Session Interceptor   tokenSession   和Token Interceptor一样不过双击的时候把请求的数据存储在Session中   Validation Interceptor   validation   使用action-validation.xml文件中定义的内容校验提交的数据。   Workflow Interceptor   workflow   调用Action的validate方法一旦有错误返回重新定位到INPUT画面   Parameter Filter Interceptor   N/A   从参数列表中删除不必要的参数   Profiling Interceptor   profiling   通过参数激活profile 提到拦截器使我不得不想起武侠剧中劫匪们常说的一句话“此山是我开此树是我栽要打此路过留下买路财”。难不成程序中也有“打劫”的说的没错拦截器就是个打劫的。在现实生活中劫匪劫的大都是钱财当然也有别的什么那么程序中的“劫匪”劫的又是什么呢或者说程序中为什么需要它在我们的日常编程中少不了写一些重复的代码例如在一个地方中写了一段代码后来发现这段代码在其它地方中同样需要在传统的编程中我们一定会采取复制、粘贴的办法。如果这段代码只在这一两个处需要我们采取这种办法还说的过去但是如果系统对这段代码过于依赖也就是这段代码在系统中出现的过多如果那一天我们发现这段代码中在某些地方还需要完善我们是不是要着个修改它们呢我估计没有人会这么做它严重违反了软件开发中一条非常重要的DRY规则不写重复代码。说了这么多你一定知道我们为什么需要在程序中弄一个“劫匪”了吧。这个“劫匪”就是并不是劫取什么东西只是为了在某个程序执行前后动态的增加一些功能以前所写通用代码块或进行一些检查工作。那么这个拦截器到底是怎么实现的呢实际上它是用Java中的动态代理来实现的具体可以参考《设计模式学习笔记(十六)—Proxy模式》。 二、拦截器在Struts2中的应用 对于Struts2框架而言正是大量的内置拦截器完成了大部分操作。像params拦截器将http请求中参数解析出来赋值给Action中对应的属性。Servlet-config拦截器负责把请求中HttpServletRequest实例和HttpServletResponse实例传递给Action……struts2内置的拦截器有很多在此我就不一一列举了具体可以参考《Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解》。 那么怎么在struts2中定义自己的拦截器呢? 很简单Struts2为我们提供了一个Interceptor接口,该接口源代码如下: publicinterface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; } 1)    init():在拦截器执行之前调用主要用于初始化系统资源。 2)    destroty():与init()对应用于拦截器执行之后销毁资源。 3)    intercept():拦截器的核心方法实现具体的拦截操作。与action一样该方法也返回一个字符串作为逻辑视图。如果拦截器成功调用了action则返回一个真正的也就是该action中execute()方法返回的逻辑视图反之则返回一个自定义的逻辑视图。 通常我们使用拦截器并不需要申请资源为此Struts2还为我们提供了一个AbstractInterceptor类该类的init()和destroy()都是空实现。我们开发自己的拦截器只需要继承这个类就行了。 下面创建一个判断用户是否登录的拦截器。代码如下: struts.xml中配置一下。 /** *//**   *  * author a hrefflustarmailto:flustar2008163.comflustar/a  * version 1.0   * Creation date: Feb 12, 2008 5:05:28 PM  */ import java.util.Map; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; SuppressWarnings(serial) public class CheckLoginInterceptor extends AbstractInterceptor { SuppressWarnings(unchecked)     public String intercept(ActionInvocation actionInvocation) throws Exception {          System.out.println(begin check login interceptor!); // 检查Session中是否存在user Map session actionInvocation.getInvocationContext().getSession(); String username (String) session.get(user); if (username ! null username.length() 0) { // 存在的情况下进行后续操作。 System.out.println(already login!); return actionInvocation.invoke(); } else { // 否则终止后续操作返回LOGIN System.out.println(no login, forward login page!); return Action.LOGIN; } } } 创建好拦截器后还不能使用还需要我们在 下面看一下怎么配置拦截器。 interceptors interceptor namecheckLogin classcom.myblog.interceptor.CheckLoginInterceptor / /interceptors 这个定义好的拦截器在Action中怎么使用呢使用方法很简单如下 action name class result /result interceptor-ref namecheckLogin / /action 一旦我们为某个action引用了自定义的拦截器struts2默认的拦截器就不会再起作用因此还需要引用默认拦截器。 action name class result /result interceptor-ref namecheckLogin / interceptor-ref namedefaultStack / /action 但是我们这么做似乎也不太方便因为如果拦截器checkLogin需要被多个action引用的话每一个都要配置一遍太麻烦了。我们可以把它定义成默认的拦截器。 interceptors interceptor namecheckLogin classcom.myblog.interceptor.CheckLoginInterceptor / !—-定义一个拦截器栈-- interceptor-stack namemydefault interceptor-ref namedefaultStack / interceptor-ref namecheckLogin / /interceptor-stack /interceptors default-interceptor-ref namemydefault / 另外struts2还为我们提供了一个方法过滤的拦截器MethodFilterInterceptor类该类继承AbstractInterceptor类重写了intercept(ActionInvocation invocation)并提供了一个新的方法doInterceptor(ActionInvocation invocation)抽象方法。该类的使用方法很简单就不举例了。这个拦截器与以往的拦截器配置有所不同。那就是可以指定哪些方法需要被拦截那些不需要。通常在引用该拦截器时指定。 interceptor-ref name  param nameexculdeMethods/param param nameincludeMethods/param     /interceptor-ref exculdeMethods是不被拦截的方法如果有多个以逗号分隔。 includeMethods需要被拦截的方法如果有多个以逗号分隔。 拦截器-Exception interceptor nameexception classcom.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor/ 配置Exception如果出现什么样的异常就跳转到对应的页面。 在action执行之后抛出异常才会被调用的。 拦截器alias 在action执行之前执行 The aim of this Interceptor is to alias a named parameter to a different named parameter. By acting as the glue between actions sharing similiar parameters (but with different names), it can help greatly with action chaining. 主要用在chain的action如果从一个action直接跳转到另外一个action可能需要传递参数值而参数的名称是不一样的这个时候alias拦截器就起作用了。 拦截器-ServletConfig 在action执行之前执行 An interceptor which sets action properties based on the interfaces an action implements. For example, if the action implements ParameterAware then the action contexts parameter map will be set on it. 配置了这个拦截器后action可以实现某些接口就可以自动获取到某些对象例如request和response对象。 详细的例子com.work.core.action.OurActionSupport 拦截器-prepare 在action执行之前执行 必须实现Preparable接口com.opensymphony.xwork2.Preparable interceptor nameprepare classcom.opensymphony.xwork2.interceptor.PrepareInterceptor/ 可以通过setAlwaysInvokePrepare方法来决定prepare()是否要被执行。 和validate方法一样你可以在action中设定prepareList()方法那么这个方法就会被首先执行然后在执行prepare方法。prepareDoList也可以。 先执行prepareList如果这个找不到就寻找prepareDoList方法如果都找不到就不执行。 需要测试。 注意需要使用呢params prepare params 拦截器的配置方式 Prepare方法当前action中的任何方法执行都会执行到他 import com.opensymphony.xwork2.Preparable; public void prepare() throws Exception { if(log.isInfoEnabled()) log.info(执行prepare()方法了);     } /** * 测试失败 * throws Exception */ public void prepareLoadForEdit() throws Exception { if(log.isInfoEnabled()) log.info(执行prepareLoadForEdit()方法了); try { if (labid null) { //lab null; log.debug(labidnull); } else { lab labServiceDao.loadForEditById(labid); log.debug(lablab); } } catch (DataAccessException e) { if (log.isErrorEnabled()) { log.error(根据labidlabid查询出错。, e); } } }   拦截器-i18n 在action执行之前执行 interceptor namei18n classcom.opensymphony.xwork2.interceptor.I18nInterceptor/ 实现国际化的功能。 拦截器-chain 在action执行之前执行 如果action实现了接口com.opensymphony.xwork2.Unchainable,那么对应的属性将不再拷贝。 An interceptor that copies all the properties of every object in the value stack to the currently executing object, except for any object that implements Unchainable. A collection of optional includes and excludes may be provided to control how and which parameters are copied. Only includes or excludes may be specified. Specifying both results in undefined behavior. See the javadocs for OgnlUtil.copy(Object, Object, java.util.Map, java.util.Collection, java.util.Collection) for more information. It is important to remember that this interceptor does nothing if there are no objects already on the stack. This means two things: One, you can safely apply it to all your actions without any worry of adverse affects. Two, it is up to you to ensure an object exists in the stack prior to invoking this action. The most typical way this is done is through the use of the chain result type, which combines with this interceptor to make up the action chaining feature. 拦截器- scopedModelDriven 在action执行之前执行 你的action实现com.opensymphony.xwork2.interceptor. ScopedModelDriven接口 如果一个Action实现了ScopedModelDriven则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。 拦截器- modelDriven 在action执行之前执行 实现ModelDriven接口 Watches for ModelDriven actions and adds the actions model on to the value stack. Note: The ModelDrivenInterceptor must come before the both StaticParametersInterceptor and ParametersInterceptor if you want the parameters to be applied to the model. 拦截器- fileUpload 上传文件的代码在action执行之前执行清除临时文件在action之后执行。 interceptor namefileUpload classorg.apache.struts2.interceptor.FileUploadInterceptor/ 拦截器- checkbox还需要测试不是很明白 在action执行之前执行 org.apache.struts2.interceptor.CheckboxInterceptor 如果使用了checkbox标签才使用这个吧 这个拦截器的功能比较奇怪啊看了源代码也不明白为什么要将checkbox没有选中的设置为false。 public String intercept(ActionInvocation ai) throws Exception { Map parameters ai.getInvocationContext().getParameters(); MapString, String newParams new HashMapString, String(); SetString keys parameters.keySet(); for (IteratorString iterator keys.iterator(); iterator.hasNext();) { String key iterator.next(); if (key.startsWith(__checkbox_)) { String name key.substring(__checkbox_.length()); iterator.remove(); // is this checkbox checked/submitted? if (!parameters.containsKey(name)) { // if not, lets be sure to default the value to false newParams.put(name, uncheckedValue); } } } parameters.putAll(newParams); return ai.invoke(); } 设置checkbox标签不被选中的时候的默认值 interceptor-ref namecheckbox           param nameuncheckedValue0/param        /interceptor-ref 拦截器- staticParams 在action执行之前执行 interceptor namestaticParams classcom.opensymphony.xwork2.interceptor.StaticParametersInterceptor/ This interceptor populates the action with the static parameters defined in the action configuration. If the action implements Parameterizable, a map of the static parameters will be also be passed directly to the action. 在struts的xml配置文件中配置的参数 拦截器-params 在action执行之前执行 interceptor nameparams classcom.opensymphony.xwork2.interceptor.ParametersInterceptor/ 将所有的参数值放入到stack中去。Ognl ParameterNameAware接口 com.opensymphony.xwork2.interceptor.ParameteraNameAware 实现了此接口可以设定允许哪些action的属性的值被放入stack中去。 拦截器-conversionError 在action执行之前执行 转换器 interceptor nameconversionError classorg.apache.struts2.interceptor.StrutsConversionErrorInterceptor/ 将错误从ActionContext中添加到Action的属性字段中 拦截器- validationxml自动校验配置文件 在action执行之前执行 使用action-validation.xml文件中定义的内容校验提交的数据。 拦截器-workflow执行action中的validate方法 在action执行之前执行 调用Action的validate方法一旦有错误返回重新定位到INPUT画面 interceptor nameworkflow classcom.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor/ 和prepare拦截器类似啊 顺序查找并执行下面的方法。 ValidateSave  validateDoSave  validate  拦截器必须是线程安全的 拦截器-cookie 将cookie的值放到valuestack中去 你也可以实现接口CookiesAware在程序中编程设置。 拦截器- createSession org.apache.struts2.interceptor.CreateSessionInterceptor This interceptor creates the HttpSession. This is particular usefull when using the s.token tag in freemarker templates. The tag do require that a HttpSession is already created since freemarker commits the response to the client immediately. 拦截器-其他 Debugging Interceptor  debugging  提供不同的调试用的页面来展现内部的数据状况。   Execute and Wait Interceptor  execAndWait  在后台执行Action同时将用户带到一个中间的等待页面。   Message Store Interceptor  store  存储或者访问实现ValidationAware接口的Action类出现的消息错误字段错误等。   Scope Interceptor  scope  将Action状态存入session和application的简单方法。   Roles Interceptor  roles  确定用户是否具有JAAS指定的Role否则不予执行。   Token Interceptor  token  通过Token来避免双击   Token Session Interceptor  tokenSession  和Token Interceptor一样不过双击的时候把请求的数据存储在Session中   Parameter Filter Interceptor  N/A  从参数列表中删除不必要的参数   Profiling Interceptor  profiling  通过参数激活profile   在拦截器中获取action的属性值 // 找到对应的临时文件的路径 String tempFilePath (String) invocation.getStack().findValue( tempFilePath); 给拦截器栈中的某个拦截器配置参数的方法 !DOCTYPE xwork PUBLIC -//OpenSymphony Group//XWork 1.1.1//EN http://www.opensymphony.com/xwork/xwork-1.1.1.dtd xwork include filexwork-test-beans.xml / package namedefault interceptors interceptor nametimer classcom.opensymphony.xwork2.interceptor.TimerInterceptor/ interceptor nametest classcom.opensymphony.xwork2.mock.MockInterceptor param namefoofooDefault/param /interceptor interceptor-stack namedefaultStack interceptor-ref nametimer/ interceptor-ref nametest/ /interceptor-stack /interceptors default-interceptor-ref namedefaultStack / action nameTestInterceptorParam classcom.opensymphony.xwork2.SimpleAction interceptor-ref namedefaultStack param nametest.expectedFooexpectedFooValue/param /interceptor-ref /action action nameTestInterceptorParamOverride classcom.opensymphony.xwork2.SimpleAction interceptor-ref namedefaultStack param nametest.foofoo123/param param nametest.expectedFooexpectedFooValue2/param /interceptor-ref defaultStack中有个拦截器的名称为testtest拦截器中有配置参数的get和set方法。 /action /package /xwork
http://www.tj-hxxt.cn/news/138168.html

相关文章:

  • 我们的社区手机在线观看湘潭优化公司
  • 县蒙文网站建设汇报网站301检测工具
  • 长沙网站建设公司有哪些国外网站 国内做镜像
  • 智能建站服务平台dz论坛识别手机网站自动跳转
  • 景观做文本常用的网站wordpress主题移动端
  • 网站首页设计欣赏重庆免费做网站
  • 网站关键词分隔符深圳网站搜索排名
  • 怎么兼职做网站最开放的浏览器下载
  • 浙江龙泉市建设局网站蚌埠网站制作
  • 建网站要多少钱建一个网络平台需要多少钱dw如何用表格来做网站
  • 湖州网站建设官网制作图片在线
  • 英语网站都可以做哪些内容湖南关于新冠最新通知
  • 网站密码管理制度单页设计是什么意思
  • 汉中城乡建设网站首页5个网站建设
  • 什么做网站赚钱营销策划方案ppt
  • 泰州做房产的网站c2c网站的建设
  • 兴安盟市住房和城乡建设局网站网站建设怎么挣钱
  • 上海联通 网站备案网站建设合同封皮
  • 学多久可以做网站 知乎网站推广的优缺点
  • wordpress站点更换域名网站app生成器下载
  • 西安哪家做网站公司好互联网站开发管理文档
  • 一站式服务是什么意思大网站建设
  • 骗子会利用钓鱼网站做啥在线平面设计师招募
  • 企业网站空间购买wordpress 输出豆瓣
  • 微商城网站建设公司上海卫生人才招聘官网
  • 成都网站设计与制作网站建设属于无形资产
  • asp.net个人网站模板百度做网站好吗
  • 要建设一个网站需要什么手续费dz论坛做视频网站教程
  • 鹤壁建设网站推广渠道电话优化师和运营区别
  • 网站平台建设意见企业怎么注册163邮箱