Java面试----2018年最新Struts2面试题

article/2025/9/30 13:11:45
 

1、描述Struts2的工作原理

答:客户端发送请求--》请求经过一系列过滤器--》FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action --》FilterDispatcher把请求的处理交给ActionProxy--》通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类--》ActionProxy创建一个ActionInvocation的实例 --》调用Action--》执行完毕,返回结果

2、Struts2中的拦截器有什么用?列举框架提供的拦截器名称?(至少3种,可用中文名)

答:

 1)拦截器是struts2核心组成部分,它提供了一种机制,使得开发者可以定义一个特定的功能模块,这个模块会在Action执行之前或者之后执行,也可以在Action执行之前阻止Action执行。 

 2)常用的拦截器有: 

 chain:在不同请求之间将请求参数在不同名字件转换,请求内容不变 

 fileUpload:提供文件上传。 

 ​i18n:记录用户选择的区域环境 

 logger:输出Action的名字

 params:将请求中的参数设置到Action中去。

3、Struts2有哪些优点?

答:

 1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计; 

 2)拦截器,实现如参数拦截注入等功能;

 3)类型转换器,可以把特殊的请求参数转换成需要的类型; 

 4)多种表现层技术,如:JSP、freeMarker、Velocity等;

 5)Struts2的输入校验可以对指定某个方法进行校验;

 6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现 

 7) 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。有丰富的tag可以用,大大提高了开发效率。(简要)

4、什么是OGNL,有什么用途?如何访问存放在session中叫user的对象的username属性

​答:OGNL是Object-Graph Navigation Language的缩写,也叫对象导航语言。它是Struts的一种功能强大的表达式语言列如:访问session中的user对象的username属性:注意的是:使用前需要在页面头部导入taglib prefix="s" uri="/struts-tags"

​5、什么是国际化,struts2实现国际化的原理?

答:国际化是根据不同的国家和地区的语言文化的不同,所设计的适用于不同地区的编码格式。 

 实现方法: 

 1)首先在src目录下新建message_en.properties(英文); 

 2)页面获取国际化信息或者使用 

原理:程序得到当前运行环境的国际/区域,语言环境并存放于Locale,ResourceBundle根据Locale中信息自动搜索对应的国际化资源文件并加载。

6、AJAX是什么? 描述ajax的原理

答:Ajax又叫异步刷新,(JavaScript和xml)原理:使用HttpRequest向服务器发送异步请求,服务器返回处理结果

7、什么是反射?请用反射动态创建一个类的对象(写关键代码,其它可省略)

答:反射,程序运行时动态获取类型信息,完成对象创建,方法调用等。

例如:

Class myclass=Class.forNama("包名.类名");
Student stu=Factory.createInstance("stu1");

8、在struts2中如何实现转发和重定向?

答:在struts.xml中配置type="redirect"(重定向);type="redirectAction"(重定向);

type="dispatcher";type="chain";(请求转发);

9、Struts2中的type类型有哪些?至少写4种

答:chain,redirect,redirectAction,json,dispatcher

10、struts2默认能解决get和post提交方式的乱码问题吗?

答:不能。struts.i18n.encoding=UTF-8属性值只能解析POST提交下的乱码问题。

11、说下Struts的设计模式

答:MVC模式: 

 1)web应用程序启动时就会加载并初始化ActionServler。

 2)用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法. 

 3)Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。

12、拦截器和过滤器的区别

答: 

 1)拦截器是基于java反射机制的,而过滤器是基于函数回调的。 

 2)过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。

 3)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。 

 4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。 

 5)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

13、请你写出struts2中至少5个的默认拦截器?

答: 

 fileUpload 提供文件上传功能 

 i18n 记录用户选择的locale 

 cookies 使用配置的name,value来是指cookies 

 checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的 checkbox。 

 chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。

 alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变

14、ActionContext、ServletContext、pageContext的区别?

答: 

 1)ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用; 

 2)ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用; 

 3)pageContext是JSP中的最重要的一个内置对象,可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁, 生命周期是JSP四个域对象中最小的。

15、拦截器的生命周期与工作过程?

答: 

 1)每个拦截器都是实现了Interceptor接口的 Java 类; 

 2)init(): 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化; 

 3)intercept(ActionInvocation invocation): 每拦截一个动作请求, 该方法就会被调用一次; 

 4)destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次; 

 5)struts2中有内置了18个拦截器。

16、用自己的话简要阐述struts2的执行流程。

答: Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。   1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。 

 2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 

 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。 

 基本简要流程如下:

 1)客户端浏览器发出HTTP请求。 

 2)根据web.xml配置,该请求被FilterDispatcher接收。 

 3)根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。 

 4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 

 5)Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

 6)返回HTTP响应到客户端浏览器。

 

 
注:另有需要JAVA、Android、IOS、Python、C++、HTML5等全套编程视频教程的朋友,请关注微信公众号trteach“图灵技术社区”获取资源~~~


http://chatgpt.dhexx.cn/article/1SEdBdgy.shtml

相关文章

Struts2面试问题

转载自 Struts2面试问题 1.什么是Struts2? Apache Struts2是一个用Java构建Web应用程序的开源框架。Struts2基于OpenSymphony WebWork框架。它从Struts1中得到了很大的改进,使其更加灵活,易于使用和扩展。Struts2的核心组件是Action&…

查看es的tcp和http端口

1、登录linux部署服务器,用命令查找配置文件elasticsearch.yml,如图 find -name elasticsearch.yml 2、进到elasticsearch.yml文件的目录 3、查看tcp,http端口

w10查看端口_Windows 10系统如何查看已打开的端口

最近Win10用户反映,电脑很经常中病毒,用户表示并没有在电脑上插入U盘,也没有打开不安全的网页,但就是一直中毒,这让用户非常苦恼。其实,出现这一问题,可能与电脑开启了一些端口有关,…

使用frp端口映射实现内网穿透(SSH、HTTP服务)

使用frp端口映射实现内网穿透(SSH、HTTP服务) 一、下载 通过内网穿透的原理和实现方式的学习我们已经明白了内网穿透的原理,想要实现内网穿透就需要让内网实现与具有公网IP的设备进行绑定。 我们这里使用frp(一个专注于内网穿透的高性能的反向代理应用…

rinetd端口转发工具

前言 环境:Centos7.9 rinetd.tar.gz 在生产环境中,为了网络安全,我们需要进行端口转发,而rinetd是一款很好用的端口转发工具,下面我们就来讲解一下如何使用rinetd来实现端口转发。rinetd的下载地址:http:…

电脑端口详解

计算机端口号总数:65535,一般用到的是1~65535,0一般不使用 0-1023: 系统端口,也叫公认端口,这些端口只有系统特许的进程才能使用;1024~65535为用户端口: 1024-5000: 临时…

HTTP服务占用80端口的解决办法,找出占用80的元凶。

电脑没有运行web服务,但是80端口被占用,导致运行使用80端口的软件的时候提示80端口监听失败。 网络上搜索一般给的办法是 net stop HTTP,把windows的http API禁用,这样确实80端口没有占用了,但是所有依赖http的服务就…

python端口扫描

文章目录 python网络编程socket函数服务器端套接字函数客户端套接字函数公共用途套接字 C/S架构实践 编写端口扫描器多线程端口扫描2.0 python网络编程 socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答请求。使主机间或者一台计算机上的进…

https默认端口443_为什么选择80作为默认HTTP端口,选择443作为默认HTTPS端口?

https默认端口443 While many of us are familiar with various ports being assigned for specific purposes or uses, we may not know the particular reason why they were chosen. Today’s SuperUser Q&A post has the answers to a curious reader’s questions. 尽…

HTTP协议

目录 前置 1.网络划分 1)局域网 2)广域网 2.IP地址和端口号 1)IP地址 2)端口号 3.网络通信 一,概念 1.HTTP 2.二进制数据和文本 二,抓包 1.网络抓包 2.URL(统一资源定位器&#…

C语言字符串数组赋值错误

直接上代码&#xff1a; #include"stdio.h"int main(){char a[10];for(int i 0; i<10;i){printf("第%d个&#xff1a;",i);scanf("%c",&a[i]);}return 0; }经典的错误&#xff0c;标准的零分&#xff01; 这样的赋值手法&#xff0c;是…

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f; c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。 二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维…

关于中字符串常量给字符数组赋值

结论 在定义字符数组时&#xff0c;可以同时初始化字符数组&#xff0c;即用字符串常量给字符数组赋值在定义完之后&#xff0c;则不允许用字符串常量给字符数组赋值。如需赋值&#xff0c;则使用strcpy()函数&#xff08;需包含头文件string.h&#xff09; #include <std…

C语言:字符数组赋值

字符数组&#xff1a;C语言学习中较麻烦的部分&#xff0c;C语言中没有字符串这种类型的数组&#xff0c;字符串只能存储在字符型数组中。 1、定义时直接赋值 char a[10]{"I LOVE C"};//可以直接省去花括号直接写成char a[10]I LOVE C"; 注意&#xff1a;此处的…

【C#】 Convert.ToInt16 、Convert.ToInt32、Convert.ToInt64 区别

一般写程序是用的都是Convert.ToInt32&#xff0c;为什么呢&#xff1f; 1.Convert.ToInt是数据类型转换成int类型 2. 有三种方法toint16,toint32,toint64 int16-数值范围&#xff1a;-32768 到 32767 int32-数值范围&#xff1a;-2,147,483,648 到 2,147,483,647 …

C# 中int short Int16 Int32 Int64详解

Java中没有Int32,Int64,,只有int,short,long Java中int就代表Int32 ,short就代表Int16&#xff0c;long就代表Int64 首先&#xff0c;几个基本的关键字&#xff1a; Int16 short, 占2个字节. -32768 ~ 32767 Int32 int, 占4个字节. -2147483648 ~ 2147483647 Int64 lon…

【C++】INT32_MAX

INT32_MAX INT32_MAX可以把它认为在limits.h下面的一个宏。关于宏&#xff0c;可以参考这篇文章&#xff0c;直接点击&#xff01;其实就是一个别称&#xff01;

python中int的取值范围_int32的取值范围是多少?

int32的数值取值范围为“-2147483648”到“2147483647”;而int64的数值取值范围为“-9223372036854775808”到“9223372036854775808”。 int32的取值范围 计算机中32位int类型变量的范围,其中int类型是带符号整数。 正数在计算机中表示为原码,最高位为符号位: 1的原码为000…

c语言unsigned int 范围,unsigned int 32比特数据范围为-2147

提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsigned int,下面我们一起来看看吧! unsigned int 一、指代不同 1、int:定义整数类型变量的标识符。 …

C#中ToInt32以及类似函数用法介绍

C#中ToInt32以及类似函数用法介绍 作用程序举例程序逻辑程序代码 程序 作用 将指定的值转换为 32 位有符号整数。对应的还有ToInt16&#xff0c;ToInt64 指定的值可以是字符串、时间、位等数据类型。 程序举例 程序逻辑 当输入值整数时&#xff0c;当输入值大于0&#xff0…