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日的主要内容,如果未能解决你的问题,请参考以下文章

2018年12月26日所学内容

2018年12月14日 函数 总结

2018年8月12日

2018年4月12日--python

2018年12月27日所学

摘要-2018年5月12日