资源描述
39/39
目 录
1 Struts框架 2
2 Spring框架 8
3 AJAX技术 14
4 Hibernate框架 17
5 框架综合运用 24
6 J2EE初级题目 27
7 J2SE初级题目 33
1 Struts框架
1. Struts框架的整体运行流程
在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中.
当ActionServlet接收到一个客户请求时,将执行如下流程.
A. 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
B. 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
C. 根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm 的validate()方法;
D. 如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证成功;
E. ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
F. Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件;
G. ActionForward对象指向JSP组件生成动态网页,返回给客户
2. ActionServlet在Struts框架中的总体作用功能是什么
A. 在web应用启动时ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中。
B. ActionServlet是整个struts 框架的骨干,也是主要的控制部件,它能够处理客户request 并且决定由哪个Action 处理客户request。它象一个Action工厂,创建基于客户request请求的Action类的对象
3. Struts框架的后缀名一般为.do,后缀后能不能更改,如果能更改的话,如何进行更改后缀名
可以更改,在web.xml中把
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
中的url-pattern值改成你想要的后缀名就可以了。
4. 如何在Struts-config.xml中配置数据源以及获取数据源
<data-sources>
<data-source key="SQL" type="mons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="相应的驱动名" />
<set-property property="url" value="相应数据库的url" />
<set-property property="username" value="用户名" />
<set-property property="password" value="密码" />
</data-source>
</data-sources>
Key
绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用程序中有多于一个的DataSource,则必须设置Key的值。
DriverClassName
所用的JDBC驱动类(必须的)如:com.microsoft.jdbc.sqlserver.SQLServerDriver
url
所用的JDBC的URL(必须的)如:jdbc:microsoft:sqlserver://xg088:1433
MaxCount
同时打开的最大连结数,缺省值为2(可选的)
MinCount
同时打开的最小连结数,缺省值为1(可选的)
User
连结到数据库的用户名(必须的)
Password
连结到数据库的密码(必须的)
Description
关于DataSource的描述信息(可选的)
ReadOnly
如果设为true,则表示该连结是只读的,缺省为false。(可选的)
LoginTimeout
创建连结的最大允许时间,以秒为单位。(可选的)
AutoCommit
如果为true,则每次execute之后会强制回滚。缺省为true。(可选的)
在action中只要继承了org.apache.struts.actions.Action及子类,即可通过getDataSource方法获得数据源,代码如下:
//多个数据源
DataSource datasource = this.getDataSource(httpServletRequest, "key值");
//单个数据源
DataSource datasource = this.getDataSource(httpServletRequest);
5. Struts-config.xml文件action配置中的attribute属性和name属性有什么区别
name:用来表示Actionform的名称,
attribute:表示ActionFrom的实例放到作用域中的名称.
6. Struts中的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因
不是线程安全的。
在Struts的生命周期中,只会为每个Action类创建一个实例,所有的客户请求共享这个实例。因此,必须保证在多线程环境中,Action也能正常工作。因此在Action类中要谨慎使用实例变量。
如果在Action类中定义了实例变量,那么在Action实例的整个生命周期中,这个实例变量被所有请求的线程共享。因此不能在Action类,特别是execute方法中定义代表特定客户状态的实例变量。如果要采用实例变量,需要采用Java的线程同步机制。
7. Action的Execute方法有几个参数,这几个参数的具体作用是什么
一共有4个参数
ActionMapping mapping 获取映射
ActionForm form 获取表单
HttpServletRequest request 获得请求
HttpServletResponse response 获得响应
8. Action的Execute方法的返回值是什么类型,有几种方式可以返回此类型
Action的Execute方法的返回值的类型是ActionForward,返回此类型的方法有三种:1、new ActionForward(path)
2、mapping.findForward(key),action中配置
3、mapping.getInputForward(),根据action配置中的input属性来查找。
4、return new ActionRedirect(path);
9. ActionFrom中对于错误消息的存取是如何存取的,页面上面是如何显示ActionFrom中存放的出错消息
通过ActionForm中的validate方法来进行验证的,并通过ActionErrors存取错误的消息。validate()方法返回ActionErrors对象。
具体实现为:ActionErrors errors = new ActionErrors();
errors.add(key,new ActionMessage(“消息”,false));
false下显示消息中的信息,默认为true,在true情况下,他会根据消息的内容到资源文件中找相应的值显示出来。
如果errors不为空的情况下, ActionServlet就不会继续进行接下来的工作,而是返回structs-config.xml所设定的位置,并跳转到input属性所设定的位置。
在页面上通过<html:errors property=”key” />显示
10. 普通的Action对于消息的存取是如何实现的,页面上面是如何显示Action中存放的消息
通过ActionMessages存取消息的。
具体的实现为:ActionMessages messages=new ActionMessages();
messages.add(key,new ActionMessage(“消息”,false));
this.saveMessages(request,messages);、
false下显示消息中的信息,默认为true,在true情况下,他会根据消息的内容到资源文件中找相应的值显示出来。
再页面上先通过
<html:messages id=”var” property=”key” message="true"> </html:messages>定义一个变量var
一种是通过: <bean:write name=”var” ignore=”true” />显示
一种可以通过EL显示: ${var}
Action对于消息的存取是通过ActionMessages来实现的,ActionMessages以一个HashMap存储ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中.也就是说key标识了一组ActionMessage.
页面上是通过struts的<html:messages/>的标签来显示的。
11. 普通的ActionForm和动态的ActionForm有什么区别,在动态的ActionForm中如何设定一个日期类型的属性
1. 动态的ActionForm,由actionform继承而来,之所以有这个东西是因为,它特点是不需要FormBean,而是在struts-config.xml中通过form-property来设置form的表单字段属性.优势是减少在大型开发过程中formbean的增加而显得程序臃肿,给维护和升级带来极大的不便.
2.需要注意的是: 在JSP或Action中访问动态ActionForm时与标准的ActionFrom有所不同,标准ActionForm为每个属性均提供了一对getXXX()/setXXX()方法,通过调用getxxx()/setxxx()方法即可读取或设置ActionForm某个属性.而DynaActionForm则把所有的属性保存在一个Map类对象中,只能通过get()和put()来存取其属性值.
如,从动态表单实例中读取会员的注册信息:
String username=form.get("username").toString();
String password=form.get("password').toString();
String phone=form.get("phone").toString();
在动态的ActionForm中,要设置一个日期类型的属性,有两种方式:
1.直接将数据类型设置为java.sql.Date,但是在页面上必须输入yyyy-mm-dd格式的日期才能行。
2.将类型设置为java.lang.String,不过后台需要转换。
12. 动态ActionForm是以什么方式存取表单控件的值的。要使用动态ActionForm取得一个控件的值是如何取得
动态ActionForm是通过在配置文件中设置相应的表单控件的名称的属性来实现表单控件值的存取。
取得动态ActionForm的控件的值的方法有两种,一是通过request.getParameter()的方法来获得,二是使用动态的ActionForm来获取值,只要调用相应的动态ActionForm的get()方法,如:testDynamicActionForm.get("控件名称")。
13. 普通的Action与DispatchAction的区别是什么
普通Action通常只能完成一种业务操作.
DispatchAction可以处理多个业务请求, 只不过再配置Action的时候需要设置parameter="your_method";
请求时这样写http://localhost:8080/test.do?your_method=add&id=1
其中add是继承DispatchAction的Action类的一个业务操作。
继承DispatchAction 设置parameter 改变execute方法 方法名以task一致
14. Struts框架中常用的有HTML/Bean/Logic标签,这些标签的主要功能是什么
1) HTML Tags:该标签库包含的标签可以用来创建Struts输入表单。
2) Bean Tags:该标签库包含的标签可以用来创建bean、访问bean和访问bean的属性。同时提供了依据cookies、headers和parameters的值创建相关bean的能力。
3) Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。
15. HTML标签中的name属性代表什么功能,为什么可以省略不写
当标签与JavaBean合作的时候,Name代表作用域中Bean的名称;当标签没有跟JavaBean合作,Name表示作用域中对象的名称。因为在配置文件中已经通过name这个属性将action和actionForm关联在一起了,所以可以不用写。
16. Struts标签中name和property两个属性的作用和区别
当标签与JavaBean合作的时候,Name代表作用域中Bean的名称; Property
Bean中属性的值。
17. 请简述J2EE平台体系中标签的体系结构
在标签体系中,最高的是JspTag,它是一个接口,内部没有任何的东西;接着是Tag和SimpleTag,他们都是接口,SimpleTag是简单的标签类,只能实现无body的标签,它的实现类是SimpleTagSupport。
Tag下面的接口是IterationTag;它的子接口是BodyTag;IterationTag的实现类有TagSupport,主要用来做无body的标签,BodyTagSupport继承自TagSupport并实现了BodyTag接口,主要实现有body标签。
18. 请简述自定义标签的步骤
创建实现了 Tag 接口的标签处理程序类,继承TagSupport
创建一个 TLD 文件
在标签处理程序 Java 类中创建属性
在 TLD 文件中定义与标签处理程序 Java 类中定义的属性对应的属性
实现 doStartTag() 方法
在jsp页面导入标签库
19. 如何在自定义标签中获取ServletContext,HttpSession,HttpServletRequest这些JSP页面常见的对象
1、获取ServletContext对象:
this.pageContext.getServletContext();
2、获取HttpSession对象:
this.pageContext.getSession()
3、获取HttpServletRequest对象:
ServletRequest servletRequest = this.pageContext.getRequest();
HttpServletRequest request = (HttpServletRequest) servletRequest;
20. Servlet2.4版本中新增加了一个标签为简单标签,要实现简单标签的话,必须实现标签中的哪一个方法,该方法有没有返回值
创建实现了 Tag 接口的标签处理程序类,继承SimpleTagSupport
创建一个 TLD 文件
在标签处理程序 Java 类中创建属性
在 TLD 文件中定义与标签处理程序 Java 类中定义的属性对应的属性
实现 doTag() 方法
在jsp页面中导入标签库
没有返回值。
21. Struts框架如何实现国际化的步骤
资源文件的编写
Jsp页面必须使用UTF-8编码机制
使用<bean:message key=“xxx”/>来输出资源文件中定义的资源显示信息。
本地页面语言的指定。<html:html locale=“true”>
将语言环境设进session
(request.getSession().setAttribute(Globals.LOCALE_KEY, locale));
22. 如何实现页面中HTML标签的初始值设置
在对应的ActionForm中的reset方法设置相应属性的初始值,或者调用ActionForm中的相应属性的set方法来为其设置初始值。
23. Struts框架的综合运用开发过程中,一般会使用ActionForm和JavaBean,这两个Bean能不能通用?如果不能的话请简述原因
无法通用,
1. ActionForm是表示表单对象,负责action和表单的数据传递,javabean是表示和数据库交互的对象。
2.从软件分层角度看,bean分开的话,一旦框架发生变化,无需进行大量代码重构。
24. 如何操作Oracle表中CLOB和BLOB字段
1、将事务提交设置为手动提交 (conn.setAutoCommit(false))
2、插入一个空的CLOB或BLOB (empty_clob())
3、锁定当前记录 (for update)
4、文件操作 (reader、writer)
5、关闭资源,提交事务。(conn.close 、mit())
2 Spring框架
1. Spring框架分为哪七大模块,各模块的主要功能作用是什么
七大模块,如下:
1. Spring Core: 核心包。Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
2.Spring Context: 上下文(容器)。构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。
3.Spring DAO: DAO (Data Access Object)提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。
4.Spring ORM: 封装一个持久层框架。ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。
5.Spring AOP: 面向切面编程。Spring的 AOP 封装包提供了符合AOP Alliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。
6.Spring Web: 封装一个web框架。Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IOC容器初始化和针对Web的ApplicationContext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
7.Spring Web MVC: Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和Web Form之间。并且,还可以借助Spring框架的其他特性。
2. Spring框架中的三大核心思想是什么
DI(依赖注入),IOC(控制反转),AOP(面向切面编程)
3. IOC的概念以及在Spring容器中如何进行IOC的操作。
IOC:Inversion of Control,控制反转。在Java开发中,IOC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转,就是被调用类的实例由原先的调用类控制创建、销毁现在转变成由Spring的容器管理。
BeanFactory 延迟加载
applicationContextXML:更高级、支持国际化、资源文件、文字解析
4. Spring容器是如何管理Bean的生命周期的(如Bean的初始化方法,Bean的销毁方法)
创建:<bean name="" class="" 额外属性>
初始化:配置init-method/实现接口InitializingBean
调用:context.getBean(),进行方法的调用
销毁:配置destroy-method/实现DisposableBean接口
5. DI的概念以及在Spring框架注入有几种方式。使用构造注入对象,必须要注意什么问题,当设值注入与构造注入同时存在时,执行的先后流程顺序
注入方式:
接口注入
设置注入[属性的SET/GET]
构造注入[构造方法注入]
使用构造函数依赖注入时,Spring保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。
当设值注入与构造注入同时存在时,先执行构造注入,在执行设置注入。
6. 使用DI注入时,Property代表什么意思,如果property引用的是其他Bean的话,如何注入,如果引用是字符串的话,如何设置。
使用DI注入时,Property代表注入类的属性,如果应用其他的bean用ref属性来表明被引用bean的名称,如果是引用字符串的话,用value属性。如:
<property name="userDao" ref="被引用bean的名称" />
<property name="username" value = "字符串"/>
7. 在Spring框架中获取连接池有几种方式。当JNDI与DBCP同时存在时,会不会出现问题,如果不能同时存在的话,请说明原因
四种方式,如下:
1:DBCP数据源
DBCP类包位于 <SPRING_HOME>/lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括<SPRING_HOME>/lib/jakarta-commons/commons-pool.jar。下面是使用DBCP配置oracle数据源的配置片断:
<bean id="dataSource"
class="mons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"
value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
2:C3P0数据源
C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的Connection 和Statement 池。C3P0类包位于<SPRING_HOME>/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一个Oracle数据源:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClassName"
value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
3. Spring的数据源实现类(DriverManagerDataSource)
Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口,但它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要额外的依赖类。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"
value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
4.获取JNDI数据源
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/oracle"/>
</bean>
通过jndiName指定引用的JNDI数据源名称。
8. 在使用Spring的JDBCTemplate操作数据时,必须要往模板中注入哪些对象,同时模板要不要手动关闭数据库连接
注入DataSource数据源对象
不要手动关闭数据库连接,JdbcTemplate会帮我们关闭数据库连接
9. JdbcTemplate的QueryForList方法得到List集合,请问List集合中每一个对象为什么数据类型,在JSP页面使用EL表达式如何取值。
每一个对象为java.util.Map类型的数据,EL表达式里用<c:foreach> ${map.key}取值
10. AOP的概念以及使用AOP机制有什么好处。Java编程中实现AOP有几种方式
AOP的概念是Aspected Oriented Programming 面向方面编程。
好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注
实现AOP有几种方式:
1. Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等
2. Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口
3. 三使用标注(@AspectJ)实现AOP
11. Spring框架中的事务处理有几种。请分别阐述两者的区别
spring提供的事务管理可以分为两类:编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活.
12. 编程式事务的总接口是什么?使用编程式事务需要用到哪几个Spring事务的核心类对象
总接口
接口,
核心类:
TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager核心接口的子类
13. Spring的声明式事务能不能为普通的类产生代理接口,能不能在代码中使用Try/Catch能捕获异常,如果不可以,请说明原因
不能。Spring的声明式事务为实现类产生代理。不能在代码中使用Try/Catch,因为代码中捕获了异常,Spring容器捕获不了异常。
14. 使用TransactionProxyFactoryBean为Bean产生事务物理时,需要哪几个属性值的设置:
<bean name="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
⑴<!-- 为事务代理bean注入事务管理器-->
<property name="transactionManager" ref="transactionManager">
</property>
⑵<!-- 设置事务属性-->
<property name="transactionAttributes">
<props>
⑶<!-- 所有方法采用required的事务策略 ->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
⑷<!-- 为事务代理bean设置目标bean -->
<property name="target" ref="userDao">
</property>
</bean>
⑸<!-- 目标bean -->
<bean name="userDao" class="com.dao.userDao">
<property name="dataSource" ref="dataSource" /></property>
</bean>
3 AJAX技术
1. 什么是AJAX技术,为什么要使用AJAX
AJAX(Asynchronous JavaScript and XML)其实是多种技术的综合,包括 Javascript, XHTML和 CSS DOM XML 和 XSTL XMLHttpRequest。其使用 XHTML和 CSS标准化呈现,使用 DOM 实现动态显示和交互,使用 XML和 XSTL进行数据交换与处理,使用 XMLHttpRequest 对象进行异步数据读 Javascript 绑定和处理所有数据 。
AJAX 在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理—等待—处理—等待缺点. 用户的浏览器在执行任务时即装载了AJAX 引擎. AJAX 引擎用 JavaScript 语言编写,通常藏在一个隐藏的框架中.它负责编译用户界面及与服务 AJAX 引擎允许用户与应用软件之间交互.独立于用户与网络服务器间的交流.
2. 什么是XMLHttpRequest对象,以及如何在不同的浏览器创建XMLHttpRequest对象
XMLHttpRequest对象是XMLHttp组件的对象,它是一个抽象对象,允许脚本从服务器获取返回的XML数据或将数据发送到服务器端。
由于不同的浏览器对XMLHttpRequest的实现方式不同,因此在创建XMLHttpRequest对象时,需要根据不同的浏览器,开发各自合适的实现方法。在JavaScript中创建通用XMLHttpRequest对象的方法如下:
<script language="javascript">
var xmlHttp;
function createHttpRequest(){
if (window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else if (window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}
3. AJAX在客户端时。如何发送文本的GET和POST请求,以及如何接收服务端传送回来的文本数据
文本的GET方式
客户端发送
var url="上下文路径/textServlet?sendValue=中文的传递&date="+new Date();
xmlHttp.open("GET",url);
展开阅读全文