1 说说Struts的优点、缺点
Struts是开源软件,使开发者能更深入的了解其内部实现机制。
Struts 优点:
业界”标准”(很多成功案例),学习资源丰富。
Struts的优点主要集中体现在两个方面:Taglib和页面导航。
a、利用Struts提供的taglib可以大大节约开发时间。
b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。
c、表现与逻辑分离
d、表单验证解决了请求数据的验证问题,增强了系统健壮性。
e、便于团队开发
Struts缺点:
a、大量的使用标签,对于初学者难度较大。
b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)
2.Struts提供了几个标签库?都是什么标签库?
Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。
HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单
Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用
Logic 标签 管理条件产生的输出和对象集产生的循环
Template 标签 随着Tiles框架包的出现,此标记已开始减少使用
Nested 标签 增强对其他的Struts 标签的嵌套使用的能力
3. 分析一下struts是如何实现MVC的。
Struts采用jsp作为MVC的视图,由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。
4. 说说Struts的处理流程:
控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModuleConfig对象。控制器接收Http请求,并从 ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。
在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在 ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。
执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该 ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过 JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。
5.如何用Struts实现国际化?
国际化:不用修改代码,就适用于不同的语言国家
本地化:如果要适应一个国家,要修改源代码
实现过程:
在struts-config.xml中用如下标签说明资源文件名,注意其只是文件名,没有语言_国家
<message-resources parameter=”struts.ApplicationResources” />
在资源文件对应的目录struts中加入适应不同语言、国家的properties文件
ApplicationResources_zh_CN.properties 中国
ApplicationResources_en_US.properties us
如果不是英语要转码
native2ascii -encoding gb2312 源 ApplicationResources_zh_CN.properties
在jsp页面中用
<bean:message key=”"/>取出信息
6.Struts中如何访问session
有两种方法可以访问session, 通过ActionContext或者实现SessionAware接口,第二种是推荐的。
1. 通过ActionContext
Map attributes = ActionContext.getContext().getSession();
2. 实现SessionAware接口
首先使Action implements SessionAware
然后 Map parameters = this.getSession();
任何对parameters的改动都会直接影响session.
一组Struts的选择测试题附答案(1)
(1)在Struts应用的视图中包含哪些组件?(多选)
选项:
(A) JSP
(B) Servlet
(C) ActionServlet
(D) Action
(E) 代表业务逻辑或业务数据的JavaBean
(F) EJB
(G) 客户化标签
(2)在Struts应用的控制器中包含哪些组件?(多选)
选项:
(A) JSP
(B) Servlet
(C) ActionServlet
(D) Action
(E)代表业务逻辑或业务数据的JavaBean
(F) EJB
(G) 客户化标签
(3)在Struts应用的模型中包含哪些组件?(多选)
选项:
(A) JSP
(B) Servlet
(C) ActionServlet
(D) Action
(E)代表业务逻辑或业务数据的JavaBean
(F) EJB
(G) 客户化标签
(4)以下代码定义了一个变量,如何输出这个变量的值?(多选)
<bean:define id=\”stringBean\” value=“helloWorld“/>
选项:
(A)<bean:write name=“stringBean\”/>
(B) <bean:write name=“helloWorld\”/>
(C)<%= stringBean%>
(D)
<% String myBean=
(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);
%>
<%=myBean%>
(5)把静态文本放在Resource Bundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?(多选)
A)提高可维护性
B)提高可重用性
C)支持国际化
D)提高运行速度
(6)以下哪些说法是正确的?(单选)
选项:
(A)每个HTTP请求对应一个单独的ActionServlet实例
(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。
(C)每个子应用对应一个单独的RequestProcessor实例
(D)每个子应用对应一个单独的web.xml文件
(7)下面哪些任务是RequestProcessor完成的?(多选)
选项:
(A)把Struts配置文件信息加载到内存中
(B)把资源文件信息读入到内存中
(C)如果需要的话,创建ActionForm实例,组装数据,并进行表单验证
(D)找到匹配的Action实例,调用其execute()方法
(E)把请求转发到Action的execute()方法返回的ActionForward代表的组件。
(8)对于以下代码,HelloAction希望把请求转发给hello.jsp,在HelloAction的execute()方法中如何实现?(多选)
<action path = \”/HelloWorld\”
type = \”hello.HelloAction\”
name = \”HelloForm\”
scope = \”request\”
validate = \”true\”
input = \”/hello.jsp\”
>
<forward name=\”SayHello\” path=\”/hello.jsp\” />
</action>
选项:
(A) return (new ActionForward(mapping.getInput()));
(B) return (mapping.findForward(\”SayHello\”));
(C) return (mapping.findForward(“hello.jsp\”));
(9)对于以下这段配置ActionServlet的代码,哪些说法是正确的?(多选)
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/myconfig.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!– Standard Action Servlet Mapping –>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
选项:
(A)Servlet容器在启动Struts应用时,会初始化这个ActionServlet。
(B) 对于所有URL中以”.do”结尾的HTTP请求,都由ActionServlet处理。
(C) 这段代码位于struts-config.xml中。
(D)这段代码位于web.xml中。
(10) 问答题:MVC是什么含义?
答案:
(1)A,G (2)B,C,D (3)E,F (4)A,D (5)A,B,C (6)C (7)C,D,E (8)A,B (9)A,B,D
(10)M表示Model(模型),V表示View(视图),C表示Controller(控制器)
一组Struts的选择测试题附答案(2)
(1)假设在helloapp应用中有一个hello.jsp,它的文件路径如下:
%CATALINA_HOME%/webapps/helloapp/hello/hello.jsp
那么在浏览器端访问hello.jsp的URL是什么? (单选)
选项:
(A) http://localhost:8080/hello.jsp
(B) http://localhost:8080/helloapp/hello.jsp
(C) http://localhost:8080/helloapp/hello/hello.jsp
(2)假设在helloapp应用中有一个HelloServlet类,它位于org.javathinker包下,那么这个类的class文件应该放
在什么目录下? (单选)
选项:
(A) helloapp/HelloServlet.class
(B) helloapp/WEB-INF/HelloServlet.class
(C) helloapp/WEB-INF/classes/HelloServlet.class
(D) helloapp/WEB-INF/classes/org/javathinker/HelloServlet.class
(3)假设在helloapp应用中有一个HelloServlet类,它在web.xml文件中的配置如下:
<servlet>
<servlet-name> HelloServlet </servlet-name>
<servlet-class>org.javathinker.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
那么在浏览器端访问HelloServlet的URL是什么? (单选)
选项:
(A) http://localhost:8080/HelloServlet
(B) http://localhost:8080/helloapp/HelloServlet
(C) http://localhost:8080/helloapp/org/javathinker/hello
(D) http://localhost:8080/helloapp/hello
(4)客户请求访问HTML页面与访问Servlet有什么异同?(多选)
选项:
(A)相同:都使用HTTP协议
(B)区别:前者Web服务器直接返回HTML页面,后者Web服务器调用Servlet的方法,由Servlet动态生成HTML页面
(C)相同:前者Web服务器直接返回HTML页面,后者Web服务器直接返回Servlet的源代码。
(D)区别:后者需要在web.xml中配置URL路径。
(E)区别:前者使用HTTP协议,后者使用RMI协议。
(5)HttpServletRequest对象是由谁创建的?(单选)
选项:
(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个HttpServletRequest对象
(B)由JavaWeb应用的Servlet或JSP组件负责创建,当Servlet或JSP组件响应HTTP请求时,先创建
HttpServletRequest对象
(6)从HTTP请求中,获得请求参数,应该调用哪个方法? (单选)
选项:
(A)调用HttpServletRequest对象的getAttribute()方法
(B)调用ServletContext对象的getAttribute()方法
(C)调用HttpServletRequest对象的getParameter()方法
(7)ServletContext对象是由谁创建的?(单选)
选项:
(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个ServletContext对象
(B)由JavaWeb应用本身负责为自己创建一个ServletContext对象
(C)由Servlet容器负责创建,对于每个JavaWeb应用,在启动时,Servlet容器都会创建一个ServletContext对象
(8)jspForward1.jsp要把请求转发给jspForward2.jsp,应该在jspForward1.jsp中如何实现? (单选)
选项:
(A) <a href=“jspForward2.jsp”>jspForward2.jsp </a>
(B) <jsp:forward page=“jspForward2.jsp”>
(9)当浏览器第二次访问以下JSP网页时的输出结果是什么?(单选)
<!% int a=0; %>
<%
int b=0;
a++;
b++;
%>
a:<%= a %> <br>
b:<%= b %>
选项:
(A) a=0 b=0
(B) a=1 b=1
(c) a=2 b=1
(10)下面哪个说法是正确的? (单选)
选项:
(A) 对于每个要求访问maillogin.jsp的HTTP请求,Servlet容器都会创建一个HttpSession对象
(B)每个HttpSession对象都有惟一的ID。
(C)JavaWeb应用程序必须负责为HttpSession分配惟一的ID
(11)如果不希望JSP网页支持Session,应该如何办? (单选)
选项:
(A) 调用HttpSession的invalidate()方法
(B) <%@ page session= “false\”>
(12)在标签处理类中,如何访问session范围内的共享数据? (多选)
选项:
(A)在TagSupport类中定义了session成员变量,直接调用它的getAttribute()方法即可。
(B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession()方法获得当前的
HttpSession对象,再调用HttpSession对象的getAttribute()方法。
(C)pageContext.getAttribute(“attributename”,PageContext.SESSION_SCOPE)
(13)在下面的选项中,哪些是TagSupport类的doStartTag()方法的有效返回值? (多选)
选项:
(A) Tag.SKIP_BODY
(B) Tag.SKIY_PAGE
(C) Tag.EVAL_BODY_INCLUDE
(D) Tag.EVAL_PAGE
(14)以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果?(单选)
request.setAttribute(\”count\”,new Integer(0));
Integer count = request.getAttribute(\”count\”);
选项:
A)不能编译通过 B)能编译通过,并正常运行
C) 编译通过,但运行时抛出ClassCastException
答案:
(1)C (2)D (3)D (4)A,B,D (5)A (6)C (7)C (8)B (9)C (10)B
(11)B (12)B,C (13)A,C (14)A
分享到:
相关推荐
在深入探讨Struts面试题之前,我们首先理解Struts1的基本架构和工作原理。 **1. Struts1框架的核心组件:** - **ActionServlet**:这是Struts1的核心控制器,它是一个实现了Servlet接口的类。当用户发起HTTP请求时...
外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux面试题,Hibernate面试题,Spring面试题,SQL Server面试题,Struts面试题,...
Java面试题集锦涵盖了广泛的Java基础知识,JSP与Servlet技术,J2EE相关知识以及其他一些IT领域的要点。以下是对这些知识点的详细说明: 1. **Java基础** - Java有八种基本数据类型:byte, short, int, long, float...
JAVA Struts2 框架面试题解析 本文将详细解析 JAVA Struts2 框架相关知识点,涵盖异常处理、Servlet 生命周期、集合框架、HashMap 和 Hashtable 的区别、final、finally 和 finalize 的区别、sleep 和 wait 的区别...
**J2EE面试题收集(三大框架)** 在Java企业级开发中,三大框架——Struts、Hibernate和Spring——占据着核心地位。这些框架分别解决了Web应用中的展示层、持久层和业务逻辑层的问题,形成了高效且易于维护的开发模式...
ean 的特性外,它是 Struts 框架中用于封装用户请求数据的组件。当用户通过 HTML 表单提交数据时,Struts 框架会自动将这些...面试中掌握这些核心概念和技术细节,对于理解 Struts 工作原理和解决实际问题至关重要。
例如,微软的面试题可能包括算法设计、复杂度分析等,这些都需要扎实的计算机科学基础。 ### 第三章 Java篇 1. **Java基础概念**:涵盖Java语言特性,如面向对象、封装、继承、多态、异常处理、内存管理等。理解...
Java面试题涵盖了许多核心知识点,包括对框架的理解、框架带来的益处、自定义框架的设计原则以及使用特定框架如Struts进行开发的流程。以下是对这些知识点的详细解释: 1. **框架的理解**: 框架在软件工程中扮演...
- **Struts框架介绍**:简要介绍Struts框架的核心组件和使用方法。 ### 八、其他高级主题 #### EJB生命周期 - **EJB生命周期管理**:了解EJB容器如何管理Bean的生命周期。 - **会话Bean与实体Bean的区别**:解释两...
### Struts + Spring + Hibernate 面试题解析 #### 1. AOP 和 IOC 的概念以及在 Spring 中的应用 **AOP(Aspect Oriented Programming,面向切面编程)**: 是一种编程思想,它允许程序员定义“切面”来封装那些...
Struts、Spring和Hibernate是Java Web开发中...以上是对Struts、Spring和Hibernate相关面试题的详细解答,涵盖了它们的主要概念、功能和使用方法。在实际项目中,这三大框架的集成使用能极大地提高开发效率和代码质量。
这可能是对2018年主流Java面试题的汇总,包括JVM内存模型、垃圾收集机制、类加载过程、设计模式等热门话题。 6. **教你如何迅速秒杀掉:99%的海量数据处理面试题**: - **大数据处理**:Hadoop、Spark、Hive等...
finalize是对象被垃圾收集前可调用的特殊方法,用于执行清理操作。 【Java集合】 1. ArrayList、Vector、LinkedList:ArrayList和Vector基于动态数组,访问速度快,但插入和删除慢。Vector是线程安全的,性能稍逊于...
通过阅读《Java面试题1.doc》到《Java面试题5.doc》这五个文档,你可以深入学习和复习这些知识点,为面试做好充分准备。每个文档都可能包含了详细的解答和解析,帮助你理解和巩固这些重要的Java知识。
### Java面试题实践收集及答案详解 #### 一、Java基础知识与面试题解析 ##### 1. 面试时应注意哪些事项? - **技术准备**:深入理解Java基础(如集合框架、多线程、异常处理等)、设计模式、算法与数据结构。 - *...
【标题】:“面试题.zip”中的IT面试知识点详解 【描述】:“面试题.zip”包含了一系列与IT技术面试相关的题目,涵盖了多线程、JVM、Redis、MySQL、框架、微服务以及消息中间件等领域,是准备技术面试的重要参考...
【SSH框架面试题详解】 SSH框架,全称为Spring、Struts和Hibernate的组合,是Java Web开发中的常用框架。在面试中,对于SSH框架的掌握程度通常被视为衡量开发者能力的重要指标。以下是一些关于SSH框架的重点知识: ...
Java的基础面试题通常涵盖语言的基本概念、数据类型、内存管理、类库和开发环境等方面。 首先,Java是一种先编译后解释运行的语言。源代码首先通过Java编译器转化为字节码,然后由Java虚拟机(JVM)进行解释执行。...
- Action和ActionForm:处理用户请求和收集表单数据的对象。 - Struts配置文件:struts-config.xml的组成部分和配置规则。 - Tiles框架:用于构建复杂页面布局的Struts插件。 6. **面试技巧**: - 实际项目经验...
Struts2是另一个常见的JavaWeb框架,"Struts2面试题"可能会考察Action、Interceptor、结果类型、全局异常处理等知识点。熟悉Struts2的架构,能够编写Action类,理解Interceptor的工作机制,对处理Web请求有实际经验...