Struts面试题
- 格式:doc
- 大小:117.00 KB
- 文档页数:7
第1篇引言程序设计面试是衡量应聘者技术能力的重要环节。
以下是一些常见的程序设计面试题目及其参考答案,旨在帮助应聘者准备面试,同时也能让面试官了解应聘者的技术深度和解决问题的能力。
一、基础编程题目题目 1:编写一个函数,实现两个整数的加法,但不使用加号(+)或减号(-)答案:```javapublic int add(int a, int b) {while (b != 0) {int carry = a & b;a = a ^ b;b = carry << 1;}return a;}```解析:使用位运算来实现加法,通过异或运算`^`完成无进位加法,与运算`&`获取进位,然后左移一位`<<`作为下一次加法的进位。
二、数据结构与算法题目题目 2:实现一个栈,支持push、pop、peek和isEmpty操作答案:```javapublic class Stack {private int[] elements;private int size;private int capacity;public Stack(int capacity) {this.capacity = capacity;elements = new int[capacity];size = 0;}public void push(int value) {if (size < capacity) {elements[size++] = value;} else {throw new StackOverflowError();}}public int pop() {if (size > 0) {return elements[--size];} else {throw new IllegalStateException("Stack is empty"); }}public int peek() {if (size > 0) {return elements[size - 1];} else {throw new IllegalStateException("Stack is empty"); }}public boolean isEmpty() {return size == 0;}}```解析:使用数组实现栈的基本操作,注意边界条件的检查。
1、什么是SpringMvc?答:SpringMvc是spring的一个模块,基于MVC的一个框架,无需中间整合层来整合。
2、Spring MVC的优点:答:1)它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java 组件.并且和Spring提供的其他基础结构紧密集成.2)不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)3)可以任意使用各种视图技术,而不仅仅局限于JSP4)支持各种请求资源的映射策略5)它应是易于扩展的3、SpringMVC工作原理?答:1)客户端发送请求到DispatcherServlet2)DispatcherServlet查询handlerMapping找到处理请求的Controller3)Controller调用业务逻辑后,返回ModelAndView4)DispatcherServlet查询ModelAndView,找到指定视图5)视图将结果返回到客户端4、SpringMVC流程?答:1)用户发送请求至前端控制器DispatcherServlet。
2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4)DispatcherServlet调用HandlerAdapter处理器适配器。
5)HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6)Controller执行完成返回ModelAndView。
7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
java中⾼级⾯试题整理及参考答案⾯试问题:⼀、Java基础⽅⾯:1、Java⾯相对象的思想的理解(主要是多态):2、集合:ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap,HashTable,HashSet的底层源码实现原理3、Java虚拟机(1)组成以及各部分作⽤:(2)类加载器——ClassLoader:(3)类加载器的⽗亲委托机制深度详解:(4)JVM调优:(5)垃圾回收:4、异常5、String,StringBuffer,StringBuilder区别6、值传递与引⽤传递:7、Java中的equals和hashCode⽅法详解8、TCP的三次握⼿和四次挥⼿9、多线程(1)实现线程同步:(2)⽣产者消费者问题:(3)线程安全(4)线程死锁(5)Synchronize实现原理(7)happen-before规则:(8)线程池(9)DCL失效原因以及解决办法:(10)线程实现⽅式:Thread,Runable,Callable的区别10、IO11、NIO12、⽹络编程13、Java内存模型⼆、数据库(MySql)1、⾯试题:2、sql优化:3、搜索引擎三、设计模式单例模式,⼯⼚模式,建造者模式,观察者模式,适配器模式,代理模式等等四、数据结构与算法:1、链表,栈,队列,⼆叉树:2、⼋⼤排序算法:3、查找算法五、⾼并发与海量数据1、⼤型⽹站应⽤之海量数据解决⽅案2、⼤型⽹站应⽤之⾼并发情况下的解决⽅案3、在⼀个千万级的数据库查寻中,如何提⾼查询效率?六,Struts,Spring,Hibernate,Mybatis,Springmvc 七、前端:javascript,Jquery⼋、Jsp+Servlet九、linux操作命令(重点服务器⽅⾯操作)⼗、tomcat调优⼗⼀、Redis/MongoDB等NoSql⼗⼆、Nginx的配置与使⽤。
程序员面试题精选100题1. 什么是面向对象编程(OOP)?列举几种常见的面向对象编程语言。
2. 解释一下封装、继承和多态的概念。
3. 什么是数据结构?列举几种常见的数据结构。
4. 解释一下栈和队列的概念,并提供它们的实际应用场景。
5. 什么是算法?解释一下时间复杂度和空间复杂度的概念。
6. 解释一下HTTP协议的工作原理。
7. 什么是数据库事务?解释一下ACID原则。
8. 解释一下前端开发中的MVC和MVVM模式。
9. 解释一下正向代理和反向代理的区别。
10. 什么是RESTful API?列举一些常见的HTTP请求方法。
11. 解释一下同步和异步的概念,以及它们的区别。
12. 解释一下进程和线程的概念,并提供它们的区别。
13. 解释一下操作系统中的死锁问题,以及如何避免死锁。
14. 解释一下TCP/IP协议族的组成部分。
15. 什么是单元测试?解释一下TDD(测试驱动开发)的概念。
16. 解释一下版本控制系统中的分布式版本控制和集中式版本控制的区别。
17. 什么是软件设计模式?列举几种常见的软件设计模式。
18. 解释一下Web应用程序中的会话管理机制,以及如何处理会话跟踪。
19. 解释一下缓存的工作原理,并提供一些常见的缓存算法。
20. 什么是虚拟机?解释一下虚拟化技术的概念。
21. 解释一下操作系统中的文件系统,以及不同类型的文件系统。
22. 解释一下数据库索引的概念,以及为什么使用索引可以提高查询性能。
23. 什么是反射?解释一下反射在Java中的应用。
24. 解释一下关系型数据库和非关系型数据库的区别。
25. 什么是分布式系统?列举一些常见的分布式系统架构。
26. 解释一下HTTP和HTTPS的区别,以及为什么使用HTTPS更安全。
27. 解释一下云计算的概念,以及云计算的优势和劣势。
28. 什么是容器化?解释一下Docker的工作原理。
29. 解释一下RESTful风格的API设计原则。
第1篇一、Servlet基础知识1. 什么是Servlet?Servlet是一种运行在服务器端的Java程序,用于处理客户端请求并生成响应。
它通常用于构建动态网页和Web应用程序。
2. Servlet与JSP的区别是什么?Servlet和JSP都是用于开发Web应用程序的技术,但它们的主要区别在于:- Servlet是一种Java类,而JSP是一种特殊的HTML页面,其中可以嵌入Java代码。
- Servlet通过Java代码直接处理请求,而JSP将Java代码与HTML标记混合在一起。
- Servlet具有更高的性能,因为它是编译后的Java程序,而JSP每次请求都会重新解析和编译。
3. Servlet的生命周期有哪些阶段?Servlet的生命周期包括以下几个阶段:- 编译:Servlet被编译成Java字节码。
- 初始化:Servlet容器调用Servlet的init()方法,进行初始化操作。
- 服务:Servlet容器调用Servlet的service()方法,处理客户端请求并生成响应。
- 销毁:Servlet容器调用Servlet的destroy()方法,进行清理操作。
4. 什么是Servlet映射?Servlet映射是指将URL模式与Servlet类进行关联的过程。
当客户端发起请求时,Servlet容器根据URL模式找到对应的Servlet类进行处理。
5. 什么是请求转发和响应重定向?请求转发(Request Dispatching)是指将请求从一个Servlet转发到另一个Servlet或资源的过程。
响应重定向(Response Redirect)是指将请求重定向到另一个URL的过程。
二、Servlet请求与响应6. 什么是HttpServletRequest和HttpServletResponse?HttpServletRequest表示客户端请求的信息,HttpServletResponse表示服务器端响应的信息。
Java高级工程师面试题及答案1.Hibernate工作原理及为什么要用?工作原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作 3. hibernate 使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate中怎样实现类之间的`关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many4.Struts1流程:1、客户端浏览器发出HTTP请求。
2、根据web.某ml配置,该请求被ActionServlet接收。
3、根据struts-config.某ml配置, ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
第1篇1. 问题:请简要描述一下什么是RESTful API?答案:RESTful API是基于REST(Representational State Transfer)架构风格的API。
它使用HTTP协议进行通信,遵循一定的设计原则,如无状态、客户端-服务器模式、资源导向等。
RESTful API通过URI(统一资源标识符)来定位资源,通过HTTP方法(如GET、POST、PUT、DELETE等)来操作资源。
2. 问题:什么是Spring框架?请列举Spring框架的主要模块。
答案:Spring框架是一个开源的Java企业级应用开发框架,它简化了企业级应用的开发过程。
Spring框架的主要模块包括:(1)Spring Core Container:核心容器,包括BeanFactory和ApplicationContext,负责管理Bean的生命周期和依赖注入。
(2)Spring AOP:面向切面编程,提供声明式事务管理和日志记录等功能。
(3)Spring Data Access/Integration:数据访问和集成模块,提供ORM(对象关系映射)和JPA(Java持久化API)等功能。
(4)Spring Web:Web模块,提供Web应用程序开发所需的组件,如Spring MVC 和Spring WebFlux。
(5)Spring Test:测试模块,提供对Spring应用程序的测试支持。
3. 问题:请解释一下Spring框架中的依赖注入(DI)?答案:依赖注入(DI)是Spring框架的核心概念之一。
它通过将对象的依赖关系从代码中分离出来,使得对象可以在运行时动态地注入依赖。
依赖注入主要有以下几种方式:(1)构造器注入:通过在对象的构造函数中注入依赖。
(2)设值注入:通过setter方法注入依赖。
(3)字段注入:通过字段直接注入依赖。
4. 问题:请描述一下Spring MVC的工作流程。
答案:Spring MVC的工作流程如下:(1)用户发送请求到前端控制器(DispatcherServlet)。
1. 【基础题】请描述访问控制符的各自作用域与区别答:√√√√√√√√√一、名词解释二、问答题1. 【中等题】请说出ArrayList和Vector的区别答:主要从二方面来说.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半2. 【中等题】请说出HashMap和Hashtable的区别答:HashMap与HashT able主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或value3. 【基础题】Collection 和Collections的区别答:Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口第十八章输入输出笔试题一、填空题1. 【基础题】File对象的isFile()方法作用是判断是否是文件,getAbsolutePath() 方法作用是获取文件或目录的绝对路径。
2. 【基础题】BufferedReader和BufferedWriter以字符流的方式读写文本文件,且效率更高。
3. 【基础题】FileInputStream和FileOutputStream以字节流的方式读写文本文件。
二、选择题1. 【基础题】下列哪个类是实体类(BC )A. InputStreamB. PrintStreamC. SocketD. ReaderE. DataInput2. 【提高题】请选择下列程序的运行结果(A)public class TestIOapp{public static void main(String [] args) throws IOException{StringReader stingin = new StringReader("test");LineNumberReader in = new LineNumberReader(stingin);PrintWriter out = new PrintWriter(System.out);out.println(in.readLine());out.flush();}}A. testB. test:1C. 1:testD. 1 test3. 【提高题】请选择下列程序的运行结果( B )public class TestIOapp{public static void main(String [] args) throws IOException{RandomAccessFile file = new RandomAccessFile("test.txt","rw");file.writeBoolean(true);file.writeInt(123456);file.writeInt(7890);file.writeLong(1000000);file.writeInt(777);file.writeFloat(.0001f);file.seek(5);System.out.println(file.readInt());}}A. 123456B. 7890C. 1000000D. 777E. 0001三、名词解释四、问答题1. 【中等题】请说出java.io.reader和java.io.inputstream的区别答:java.io.Reader 和java.io.InputStream 组成了Java 输入类。
SpringMVC⾯试题常问的29道(附答案)博主整理了29道⾯试中常问的SpringMVC⾯试题及答案,希望对⼤家有帮助哈~1、什么是Spring MVC?简单介绍下你对Spring MVC的理解?Spring MVC是⼀个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进⾏职责解耦,把复杂的web应⽤分成逻辑清晰的⼏部分,简化开发,减少出错,⽅便组内开发⼈员之间的配合。
2、Spring MVC的优点(1)可以⽀持各种视图技术,⽽不仅仅局限于JSP;(2)与Spring框架集成(如IoC容器、AOP等);(3)清晰的⾓⾊分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4)⽀持各种请求资源的映射策略。
3、Spring MVC的主要组件?(1)前端控制器 DispatcherServlet(不需要程序员开发)作⽤:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)处理器映射器HandlerMapping(不需要程序员开发)作⽤:根据请求的URL来查找Handler(3)处理器适配器HandlerAdapter注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执⾏Handler。
(4)处理器Handler(需要程序员开发)(5)视图解析器 ViewResolver(不需要程序员开发)作⽤:进⾏视图的解析,根据视图逻辑名解析成真正的视图(view)(6)视图View(需要程序员开发jsp)View是⼀个接⼝,它的实现类⽀持不同的视图类型(jsp,freemarker,pdf等等)4、什么是DispatcherServletSpring的MVC框架是围绕DispatcherServlet来设计的,它⽤来处理所有的HTTP请求和响应。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
第1篇第一章:基础知识一、选择题1. 下列哪个语言是面向对象的编程语言?A. JavaB. CC. C++D. Python答案:A. Java解析:Java是一种面向对象的编程语言,它提供了丰富的面向对象特性,如封装、继承和多态。
2. 下列哪个操作系统是微软开发的?A. LinuxB. WindowsC. macOSD. Unix答案:B. Windows解析:Windows是由微软公司开发的一种广泛使用的操作系统。
3. 下列哪个数据库管理系统是开源的?A. OracleB. MySQLC. SQL ServerD. PostgreSQL答案:B. MySQL解析:MySQL是一个开源的关系型数据库管理系统,广泛应用于各种Web应用。
4. 下列哪个框架是用于Web开发的?A. SpringB. HibernateC. DjangoD. Struts答案:C. Django解析:Django是一个Python Web开发框架,它鼓励快速开发和干净、实用的设计。
5. 下列哪个协议用于在Web浏览器和服务器之间传输数据?A. FTPB. HTTPC. SMTPD. TCP答案:B. HTTP解析:HTTP(超文本传输协议)是用于Web浏览器和服务器之间传输数据的协议。
二、填空题1. 在Java中,类定义以关键字______开始,以关键字______结束。
答案:class、{}解析:在Java中,类定义以关键字class开始,以关键字{}结束。
2. 在Python中,定义一个列表使用______符号。
答案:[]解析:在Python中,定义一个列表使用[]符号。
3. 在MySQL中,创建一个名为“users”的表,包含两个字段“id”和“name”,可以使用以下SQL语句:CREATE TABLE users (id INT,name VARCHAR(100));4. 在HTML中,用于创建一个标题标签的标签是______。
综合面试题(1-80题)1、写出6个java常用的包答:(1)ng包(2)java.u til包(3)ja va.io包(4)java.awt包(5)javax.swing包(6)包2、写出java 类的super 和th is 区别答:su per表示超(父)类的意思,this代表对象本身。
3、写出t omcat默认端口号,以及修改答:在s erver.xml的修改<Connect or port="8080" proto col="HTTP/1.1" con nectionTim eout="20000" redire ctPort="8443" />里面po rt值4、写出生成20个随机数,并用冒泡排序答:intt emp=0;//设置一个临时变量i nt[] demo={3,5,1,4,2};for(i nt i=1;i<d emo.length;i++){//比较的轮数for(int j=0;j<demo.leng th-i;j++){//每轮的比较次数if(dem o[j]<demo[j+1]){temp=dem o[j+1];demo[j+1]=demo[j];dem o[j]=temp;}}}//输出for(int k=0;k<demo.l ength;k++){Syste m.out.prin tln(demo[k]);}5、写出九九乘法表答:f or(int i=1;i<=9;i++){for(i nt j=1;j<=i;j++){System.o ut.print(i+"*"+j+"="+i*j+"\t");}System.out.print("\n");}6、写出html或其它语言的登录页面答:<f orm action="login.ac tion"meth od="post">用户名:<inp ut type="t ext"name="name"/>密码:<input type="pas sword"nam e="passwor d"/><inp ut type="s ubmit"nam e="sub"/></form>7、1-1000内,能被2,3,5之一整除的数有多少个?答:int count=0;for(int i=1;i<=1000;i++){if(i%2==0 || i%3==0 ||i%5==0){count++;}}System.out.println(c ount);Cou nt:7348、Ar rayList.Ve ctor,LinkL ist的存储性能和区别?答:Array List和Vecto r都是使用数组的方式来存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vec tor 由于使用了synchroniz ed 方法(线程安全),通常性能上较ArrayList差,而Linke dList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
第1篇一、Java基础知识1. 请简述Java的基本特性和优势。
解析:Java具有简单性、面向对象、分布式、平台无关性、安全性、多线程、动态性、强类型、高效率、可移植性等特性。
其优势在于跨平台、安全性高、易于开发、有丰富的类库等。
2. 请解释Java中的基本数据类型和引用数据类型。
解析:基本数据类型包括byte、short、int、long、float、double、char、boolean;引用数据类型包括类、接口、数组等。
3. 请解释Java中的封装、继承、多态三个基本概念。
解析:封装是指将类的属性和方法封装在一个单元中,隐藏内部实现细节;继承是指子类继承父类的属性和方法,实现代码复用;多态是指同一方法在不同对象上表现不同的行为。
4. 请解释Java中的构造函数和析构函数。
解析:构造函数用于创建对象时初始化对象的属性,析构函数用于销毁对象时释放对象占用的资源。
5. 请解释Java中的static关键字。
解析:static关键字用于修饰成员变量和方法,表示该成员变量或方法属于类,而不是对象。
6. 请解释Java中的final关键字。
解析:final关键字用于修饰成员变量、方法和类,表示该成员变量、方法或类不可修改。
7. 请解释Java中的异常处理机制。
解析:Java中的异常处理机制包括try-catch-finally语句,用于捕获和处理程序中的异常。
8. 请解释Java中的泛型。
解析:泛型是一种参数化类型,允许在定义类、接口和泛型方法时指定类型参数,提高代码的复用性和安全性。
二、Java集合框架1. 请解释Java中的List、Set和Map接口。
解析:List接口表示有序集合,Set接口表示无序集合且元素不可重复,Map接口表示键值对映射。
2. 请解释Java中的ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等常用集合类。
解析:ArrayList和LinkedList实现List接口,ArrayList基于数组实现,LinkedList基于链表实现;HashSet和TreeSet实现Set接口,HashSet基于哈希表实现,TreeSet基于红黑树实现;HashMap和TreeMap实现Map接口,HashMap基于哈希表实现,TreeMap基于红黑树实现。
1、介绍一下Struts的Action类Struts框架采用ActionServlet和RequestProcessor组件进行集中控制,并采用Action组件来处理单项业务。
ActionServlet把全部提交的请求委托到RequestProcessor对象,RequestProcessor使用struts-config.xml文件检查请求URI找到响应的Action。
Action类是用户请求和业务逻辑之间的桥梁,每个Action充当客户的一项业务代理,这样使得客户请求和Action类之间可以有多个点对点的映射。
Action类还提供了其它的辅助功能,比如:日志(logging)和数据验证(validation)。
当控制器收到客户请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法。
在RequestProcessor类预处理请求时,在创建了Action的实例后,就调用自身的processActionperform()方法,该方法再调用Action类的execute()方法, execute()方法再调用模型组件的业务方法,完成用户请求的业务逻辑处理,然后根据执行结果把请求转发给合适的Web组件。
Struts Framework为应用系统中的每一个Action 类只创建一个实例。
因为所有的用户都使用这一个实例,所以必须确定你的Action 类运行在一个多线程的环境中。
2、ActionForward类Action类的execute()方法返回一ActionForwad对象.ActionForward对象代表了Web资源的逻辑抽象。
这里的资源可以是JSP页\Java Servlet或Action.从execute()方法中返回ActionForward对象有两种方法:第一:在execute()方法中,动态创建一个ActionForward实例,return new ActionForward("Failure","/security/error.jsp","true");以上ActionForward构造方法的第一个参数代表ActionForward实例的逻辑名,第二个参数指定转发路径,第三个参数指定是否进行重定向.(true:重定向;false:请求转发)第二:在Struts配置文件中配置<forward>元素.<action name="loginActionForm"parameter="reqCode"path="/login"scope="request"validate="false"type="com.eRedLab.eRedCIP.frame.web.LoginAction"><forward name="Failure" path="/security/error.jsp" /></action>配置了<forward>元素后,在Struts框架初始化时就会创建存放<forward>元素配置信息的ActionForward对象。
在Action 的execute方法中只需调用Actionmapping实例的findForward()方法,来获得特定的ActionForward实例: return mapping.findForward("Failure");3、介绍一下Struts的ActionServlet类ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中扮演的角色是中心控制器。
它提供一个中心位置来处理全部的终端请求。
按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。
同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息如下。
<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class></servlet>全部的请求URI以*.do的模式存在并映射到这个servlet,其配置如下:<servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>中心控制器为所有的表示层请求提供了一个集中的访问点。
当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。
4、Struts对MVC的体现M: 在Struts中,模型由JavaBean和EJB组件组成,用来实现程序的业务逻辑部分.C: ActionServlet,RequestProcessor和Struts辅助类来实现控制器。
ActionServlet是Struts中的核心控制器ActionServlet会根据在Struts配置文件中的配置将控制权转交给相应的Action类。
Action 类是业务的代理,在Action 类中可以调用模型组件或者编写其他业务逻辑代码来完成一项具体的业务。
V: Struts框架中的视图主要由JSP文件构成,在JSP文件中可应用Struts标签和自定义标签来表现模型组件中的数据进行简单的处理。
ActionForm Bean实际上是一个遵循了特殊约定的JavaBean,在Struts中ActionForm Bean可看作为一个中间存储器在视图与控制器之间进行数据传递。
5、Struts框架工作流程当启动一个采用Struts框架开发的Web应用程序时,ActionServlet就会被加载并被初始化。
然后ActionServlet读取Struts配置文件中的信息,并根据文件中的各模块配置来初始化相应的配置对象。
当用户的请求属于ActionServlet所处理请求的模式时,ActionServlet被调用,Struts的处理工作开始:1.中央控制器根据用户的请求,在Struts配置文件中的<action-mapping>元素中查找匹配该请求的<action>子元素,如果不存在,则返回异常;2.在匹配的<action>元素中查找有Scope属性指定的范围中是否存在由name属性指定的ActionForm Bean.如果不存在,就创建一个新的ActionForm对象,然后将用户提交的表单中的数据保存在给ActionFrom对象中,并将ActionForm对象放入Scope属性指定的范围内;3.如果<action>元素中Validate属性值为true,则调用ActionFrom中的Validate()方法进行表单验证;4.ActionForm的Validate()方法返回NULL或返回的ActionErrors对象中不包含任何ActionMessage对象,则表单验证成功。
否则表单验证失败,ActionServlet将请求转发给Input属性指定的页面;5.中央控制器将控制权转交给<action>元素Type属性指定的Action类,如果相应的Action类对象不存在,则创建该类对象。
接下来Action类的Execute()方法被调用;6.在Action类的Execute()方法中进行业务逻辑处理,并返回一个ActionForward对象。
控制权被交回ActionServlet,ActionServlet将返回的ActionForward对象与<action>元素中的<forward>子元素进行匹配,并将请求转发给指定的JSP组件;7.如果ActionForward对象指定的是另外的Action动作,则返回第(1)步在次执行流程,否则生成动态网页返回给用户。
6、Struts中DispatchAction和Action类有什么不同?DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。
与其它Action类仅提供单个execute()方法实现单个业务不同,DispatchAction允许你在单个Action类中编写多个与业务相关的方法。
这样可以减少Action类的数量,并且把相关的业务方法集合在一起使得维护起来更容易。
要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的DispatchAction得到。
例如,我们想要提供一个方法来实现对购物车添加商品清单,创建了一个类ShoppingCartDispatchAction提供以下的方法:public ActionForward addItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){throws Exception;}那么,这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单,还有clearCart()方法清除购物车等等。
这时我们就可以把这些方法集合在单个Action类,不用为每个方法都提供一个Action类。
在调用ShoppingCartDispatchAction里的某个方法时,只需在URL中提供方法名作为参数值。
就是说,调用addItem()方法的 URL看起来可能类似于:http://myhost/storefront/action/cart?method=addItem其中method参数指定ShoppingCartDispatchAction中要调用的方法。
参数的名称可以任意配置,这里使用的”method”只是一个例子。
参数的名称可以在Struts配置文件中自行设定。