struts2中有哪些常用结果类型? (1) dispatcher :Action 转发给 JSP (2) chain :Action转发到另一个Action (同一次请求) (3)redirect : Action重定向到 JSP (4)redirectAction :Action重定向到另一个Action struts2中全局国际化的配置方式? 创建一系列的资源文件 ,命名规范 :基本名称_小写语言_大写的国家.properties messages_zh_CN.properties messages_en_US.properties 配置全局国际化 使用struts.xml里面常量进行配置 常量名称:struts.custom.i18n.resources 常量的值:资源文件的基本名称 如果资源文件在src下面,直接写基本名称 如果资源文件在包下面,添加包路径 比如 cn/itcast/messages Struts2 中的默认包 struts-default 有什么作用? struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,如:从请求中把请求参数封装到 action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了 struts-default 包才能使用 struts2 为我们提供的这些功能 说出 struts2 中至少 5 个的默认拦截器 exception;fileUpload;i18n;modelDriven;params;prepare;token;
过滤器和拦截器的区别? 过滤器:在目标资源之前进行的操作,过滤所有的内容,比如action、servlet、jsp、html 拦截器:在目标资源之前进行的操作,不能拦截所有的内容,拦截action,不能拦截jsp,html 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 6.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。 addFieldError、addActionError 有何区别? addActionError (String anErrorMessage)添加一个Action级别的错误消息到Action,错误消息被存放在List列表中。显示消息的标签是<s:actionerror /> addFieldError (String fieldName, String errorMessage)给一个字段 添加错误消息,错误消息被存放在一个Map<key, value>中(其中key存放的是fieldName,value存放的是errorMessage)。 显示消息的标签是(如放在jsp页面中):<s:fielderror /> 简述struts2中自定义拦截器实现步骤?(面试) 1.首先要实现Interceptor(拦截器)接口或者继承AbstractInterceptor 2.在配置文件中定义自己的拦截器。3.最后还要把系统提供的默认拦截器加上,否则系统默认拦截器不起作用 简述struts2 的拦截器执行原理? 1.struts2中的拦截器的实现原理是AOP思想. 当Action请求到来的时候,会由系统的代理生成一个Action的代理对象, 由这个代理对象调用Action的execute()或指定的方法前, 在struts.xml中查找与该Action对应的拦截器。 如果有对应的拦截器,就在Action的方法执行前(后)调用这些拦截器; 如果拦截器堆栈中还有其他的拦截器,那么invocation.invoke()将调用堆栈中下一个拦截器的执行。 如果拦截器堆栈中只有Action了,那么invocation.invoke()将调用Action执行。 2个非常重要的推论: 1. 如果在拦截器中,我们不使用invocation.invoke()来完成堆栈中下一个元素的调用, 而是直接返回一个字符串作为执行结果,那么整个执行将被中止。 2. 我们可以以invocation.invoke()为界,将拦截器中的代码分成2个部分, 在invocation.invoke()之前的代码,将会在Action之前被依次执行, 而在invocation.invoke()之后的代码,将会在Action之后被逆序执行。 由此,我们就可以通过invocation.invoke()作为Action代码真正的拦截点,从而实现AOP 使用struts2如何实现多文件上传? 1.上传表单页面,多个文件上传项name属性值必须要一样 2.创建action,在action实现多文件的上传,在action中使用数组形式得到多个文件的信息 3.遍历数组,得到每一个文件的信息,一个一个上传到服务器中
|