2018年12月12日
Posted thewinter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018年12月12日相关的知识,希望对你有一定的参考价值。
1.struts2中bean标签的常用属性
参考:https://blog.csdn.net/lzgsea/article/details/79795290
常见属性有id name class factory-method factory-bean destroy-method scope autowired等
- id、name均为bean的标识,id 唯一,spring4之后 name作为名称标识也不允许重复。也不允许id和name的名称一致。另外id和name都可以指定多个名字,名字之间可用逗号、分号、或者空格间隔。
- class属性为bean的全类限定名。指向classpath下类定义所在位置。
- factory-method工厂方法属性,通过该属性,我们可以调用一个指定的静态工厂方法,创建bean实例。
- init-method和destory-method属性
init-method属性是bean的初始方法,在创建好bean后调用该方法。
destory-method属性是bean的销毁方法,在销毁bean之前调用该方法,一般在该方法中释放资源
- scope属性
scope属性表示bean的作用范围,常用的scope有2个值:
singleton:表示整个IOC容器共享一个Bean,也就是说每次说每次通过getBean获取的bean都是同一个。
prototype:每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。
- autowire属性
autowire表示bean的自动装配
2、关于factory-method,可以参考此例:https://howtodoinjava.com/spring-core/spring-create-beans-using-static-factory-method/
注:https://howtodoinjava.com/ 这个可是学Java的好网站啊!
3、拦截器与过滤器的区别
参考:https://www.cnblogs.com/junzi2099/p/8022058.html
总结:
过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等.
拦截器:拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。拦截器不是在web.xml,比如struts在struts.xml中配置。拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
4、拦截器的配置例子
package com.itheima.bos.web.interceptor; import org.apache.struts2.ServletActionContext; import com.itheima.bos.domain.User; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; /** * 自定义一个struts2拦截器,实现用户未登录,自动跳转到登录页面 * */ public class BOSLoginInterceptor extends MethodFilterInterceptor { // 拦截方法 protected String doIntercept(ActionInvocation invocation) throws Exception { User user = (User) ServletActionContext.getRequest().getSession() .getAttribute("loginUser"); if(user == null){ //未登录,跳转到登录页面 return "login"; } return invocation.invoke();// 放行 } }
在struts.xml中进行配置,一般分为三步
<interceptors> <!-- 注册拦截器 --> <interceptor name="BOSLoginInterceptor" class="com.itheima.bos.web.interceptor.BOSLoginInterceptor"> <param name="excludeMethods">login</param> </interceptor> <!-- 拦截器栈 --> <interceptor-stack name="myStack"> <interceptor-ref name="BOSLoginInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <!-- 指定默认栈 --> <default-interceptor-ref name="myStack"/>
<global-results>
<result name="login">/login.jsp</result>
</global-results>
首先将拦截器注册,注册完成之后,需要将拦截器配置到拦截器栈中去。当然也需要将拦截器栈指定成默认栈才会执行。最好将自定义的拦截器放置在defaultStack之前,因为万一没有登陆直接退出,不需要后续的默认拦截器检查。<global-results>配置:有很多时候一个<result>可供很多<action>使用,这时可以使用<global-results>标签来定义全局的<result>l。执行顺序:当一个Action返回的String没有相应的<result>与之对应,Struts2就会查找全局的<result>。注意<global-result>的位置,要在拦截器栈的后面。
以上是关于2018年12月12日的主要内容,如果未能解决你的问题,请参考以下文章