j2ee程序员面试题

1、 几种服务器的区别及何时应用?为什么?(如weblogic,Tomat等等)
Joss、tomcat、weblogic、websphere
Web服务器:tomcat主要作用发布web应用程序
企业服务器:主要发布企业级应用程序,打包程jar、ear、war
2、 使用Jms、socket的好处及它的用法?
Jms:
异步通信
Socket:
基于TCP、UDP的即时通信

3:谈谈你所了解的设计模式,说出去作用;
a、创建型模式
Singleton: 它是一种创建型的设计模式。解决的是实例化对象个数的问题,比如抽象工厂中的工厂、对象池等,其他创建型模式解决的都是new所带来的耦合关系。
Factory Method: 需要一个额外的工厂类来负责实例化“一边对象”。
Abstract factory: 创建一系列相互依赖的对象,并能在运行时改变系列。
b、结构型模式
Facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
Proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。
c、行为型模式
Observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。
4、:tomcat5和tomcat6的区别。一个项目中,我们为什么要使用tomcat5或是tomcat6.
区别:
a、首先是目录的不同:Tomcat6.x在目录上最大的区别就是将 lib 包直接置于 HOME/lib 下,而tomcat 5.x 系列版本是分HOME/common,HOME/share,HOME/server 三个包存放的.
common目录中:存放Tomcat服务器和所有Web应用都能访问的JAR
share目录中: 存放所有web应用都能访问的,但tomcat不能访问的。
server目录中:存放Tomcat 服务器需要的但Web应用不能访问的JAR,另外该目录下webapps存放Tomcat 自带的APP-admin和manager两个应用。
b、bin文件夹下的启动文件不同了。
c、tomcat5.x基于Tomcat3.x,Tomcat4.x,遵循新的Servlet2.4,jsp2.0规范。他最大的特点是就是支持JDK5.0。tomcat5.x是个总结,改进版本,因为有了3.x,4.x作基础,加上使用JDK5.0使tomcat在性能上有了突飞猛进的发展,备受大家欢迎。
tomcat6.x是目前最新的版本。遵循新的Servlet2.5,jsp2.1规范。该版本增加了很多新特性。主要有:高级的IO功能:采用APR或NIO HTTP连接进行异步IO操作; 组件功能:可以使用ant-fextras.xml的方式为tomcat添加新的组件。

5:tomcat、weblogic的调优
a、禁用DNS查询
当web应用程序要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。
DNS查询需要占用网络,并且包括可能从很远的服务器或者不起作用的服务器上获取对应IP的过程,这样会耗费一定的时间。为了消除DNS对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLoopups参数值为”false”;
b、调整线程数
通过修改应用程序的连接器(connector)中的处理请求的线程数。Tomcat使用线程池加速响应速度来处理请求。
6:你对java中的socket编程了解多少?
Socket是网络上运行的两个程序间双向通讯的一端,他既可以使接收请求,也可以是发送请求,利用它可以较方便地编写网络上数据的传递。
在java中,利用Socket方法,可以实现两台计算机之间的通讯。Socket可理解为客户端或服务器端的一个非凡的对象,这个对象有两个重要的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流实际上是从服务器端发出的数据流。getOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流。(其实是一个缓冲区,暂时存储将要发送到服务器的数据)。

7:socket的连接方式,进行简单的说明
Socket client = new Socket(“服务器Ip”,服务器监听端口); 向服务器发送连接请求。
Socket(InetAddress address, int port): 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port): 创建一个流套接字并将其连接到指定主机名上的指定端口号。
// Socket的实际工作由SocketImpl抽象类的实例执行。而具体实现是在SocketImpl抽象类的子类PlainSocketImpl的connect()中;

8:xml的解析方式?各有什么特点?项目中xml的数据怎么导入数据库中?
xml的解析方式:DOM,SAX,STAX等
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树型结构造成的,这种结构占用的内存较多,这是因为DOM必须在解析文件之前把整个文档都加载到内存中,适合对XML的随机访问。
SAX:不象DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文件结束,或者标签开头,标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件。
STAX:Streaming API for XML(这个不了解)

可以适用xml的解析方式解析xml数据成Object,再插入数据库中。
9:Sql2000和sql2005有什么区别?
a、 最直观的一点就是两者的界面有很明显的不同。sql2005的操作风格更接近于vs2005。
b、 sql2005比sql2000存储的数据量要大很多,sql2005支持数据库逻辑分区;
c、 sql2000与sql20005 jdbc连接不同:
sql2000 jdbc连接:url地址:jdbc:microsoft:sqlserver://:<1433>;
driver :com.microsoft.jdbc.sqlserver.SQLServerDriver;
sql2005 jdbc连接:url地址:jdbc:sqlserver://: [;databaseName=];
driver :com.microsoft.sqlserver.jdbc.SQLServerDriver;
d、 安全性能的提高:sql Server 2005包括了一些在安全性能上的改进,例如将用户和对象分开、数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。
e、 sql2005还提供了一些新的特性,比如文件流支持(向第三代数据库迈出了可喜的一步)、T-Sql的改进(处理错误、递归查询功能、关系运算符PIVOT, APPLY, ROW_NUMBER和其他数据列排行功能,等等)、数据库镜像、透 明的客户端重定向、新的基于架构的安全模型、内建的Http服务器等…。
10:struts1.2和struts2.0的区别?如何控制两种框架中的单例模式?
struts1.2和struts2.0的对比
a、Action类:
struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类
b、线程模式
struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。
单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。
struts2.0 Action为每一个请求产生一个实例,因此每有线程安全问题。
c、Servlet依赖
struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。
struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action仍然可以访问初始的Request和Response。
但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
d、可测性 测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase
提供了一套struts1.2的模拟对象来进行测试。
Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。
11:项目中用到了那些测试方法?进行简单的描述?你是怎么测试的?项目中用了什么bug管理工具?在项目中如何去使用?
a、单元测试
单元测试用于测试软件中的各个组件。它是属于白盒测试的。用的最多的是使用Junit工具来进行单元测试。类只需继承TestCase类即可。
b、集成测试
把几个相关的单元集成在一起,通过检查集成单元或模块以发现缺陷的过程就称为集成测试。我们通常在项目中是将每个人的模块整合到一起进行统一测试。
c、系统测试
系统测试是一系列的测试,其主要目的是在模拟环境中完整、准确的运行软件系统。
我们通常的处理方法是:
1. 负载测试:使系统处理超过其能力的任务来测试系统的过程。
2. 压力测试:也叫做强度测试,获取系统正确运行的极限。
3. 性能测试:其目的不是为了发现任何错误或缺陷,而是消除瓶颈。
4. 可用性测试: 这个主要是体现在给用户的体验上。
d、用户验收测试
开发阶段之后的测试阶段确保开发的软件是完整且没有缺陷的。
项目中用到的bug管理工具很少,基本上没用。

12:项目中如何规范编码?
制定一份编码规范文档:
1、类名以大写开头、有意义的单词的组成,组合单词的每一个单词都要大写。
2、接口以I开头,实现类在类名后加Impl如:接口为IUserDAO,实现类为UserDAOImpl。
3、系统中涉及的常量字符串,不能采用硬编码,需从properties文件中读取。
4、编码需要多加注释
5、Jsp页面命名以小写字母开头、有意义的单词的组成,组合单词除第一个单词首字母小写,其他单词的首字母大写,其余小写。
6、包名全部小写
7、数据库中表字段:同5

13:java中的基本数据类型?各占多少位?多少字节?取值范围?
数据类型 占位 字节 取值范围
Int 32 4 -2,147,483,648 ~ 2,147,483,647
Short 16 2 -32768 ~ 32678
long 64 8 -9,223,372,036,854,775,808~+9,223,372,036,854,775,807
float 32 4 -3,40292347E+38 ~ +3,40292347E+38
double 64 8 -1.79769313486231576E+308 ~ 1.79769313486231576E+308
char 16 2 ‘\u0000′ ~ ‘\uFFFF’
boolean 1 0.125 true/false
byte 8 1 -128 ~ 127

14:项目中经常出现的异常?是什么原因产生的?又是如何解决的?
1、NullPointerException
出错原因:尝试访问null对象成员
解决方法:找到null对象成员,获得需要的业务对象实例。

2、ClassNotFoundException
出错原因:不能加载所需的类
解决方法:可能缺少对应的包,加入对应的包,或设置classpath路径

3、ClassCastException
出错原因:类转换错误出现的异常
解决方法:转换成相应的类,或对象。

Hibernate和spring中常出现的几个异常
4、org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘sessionFactory’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column:
password (should be mapped with insert=”false” update=”false”)
出错原因:password 和repassword同时对应数据库表中的password一列,同时update和insert都设为true。xml文件如下:
update="true"
insert="true"
access="property"
column="password"
length = "32"
/> type="java.lang.String"
update="false"
insert="false"
access="property"
column="password"
length = "32"
/>
解决方法:将repassword的insert和update设为false。

5、org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘sessionFactory’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed;nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class
错误原因:hibernate的映射文件中ID是大写的,而pojo的类中id是小写的
解决方法:要么将pojo类中的id改称大写,要么把hibernate的映射文件中的ID改称小写。

15:jsp中怎样设置cookie?
以下scriptlet在客户端设置了一个cookie “mycookie”:
<%
Cookie mycookie = new Cookie("aName","aValue");
response.addCookie(mycookie);
%>
通常,cookies在JSP页的开始处进行设置,因为它们作为HTTP headers的一部分被送出。
如果你想在关闭浏览器后在cookie中保存数据,你还需要设置expiration date,例如,
cookie_name.setMaxAge( time_in_milisecs );

16:存储过程的作用?
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,
以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,
而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列 SQL 语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

17:如何考虑一个项目的安全性?从哪些方面去体现?
项目的安全性并不是指一个系统的功能,而是属性。
要考虑的方面:
a、防止有人恶意破坏,如:sql注入。
b、编码、权限的严密控制,也能很好的控制项目的安全性。如页面尽量少用客户端验证,而使用服务器验证,
减少有人修改客户端代码而破环项目的安全性。
c、硬件设备等的支持,如:防火墙能够防止有人攻击Ip, 从端口访问服务器。
d、平台稳定性如何,如:考虑linux,window平台下项目是否能够很好的运行。

18:如何单独屏蔽一个ip地址
方法一:使用tomcat来屏蔽一个ip
tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve。



方法二:到系统文件Hosts中添加配置:例如:192.168.1.28 : www.baidu.com

19:Hibernate与jdbc的联系
hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate.property的配置文件实现当然本质是封装了jdbc的forname),
和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate通过hbm 配置文件把po类的字段和数据库的字段关联起来比如数据库的id,在po类中就是pravite Long id; public Long getId() ;public setId(Long id);
然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件

20:Hibernate与spring的联系
hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactory,HibernateTemplate等。
Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。

21:一次运行javac的时候,是否可以运行多个java语句?
首先是java编译器把java源码编译成java字节码;再由java解析器解析java字节码,一次只能解析一个java语句。

36:概要设计和详细设计各有哪些文档?
概要设计:编码规范文档,需求分析文档概要设计,总计划文档
详细设计:系统详细设计文档

22:sqlserver和oracle数据库的性能优化
1).选用适合的ORACLE优化器
ORACLE的优化器共有3种:
   a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)
在缺省情况下,ORACLE采用CHOOSE 优化器, 为了避免那些不必要的全表扫描(full table scan) ,
你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.
访问Table的方式
2).ORACLE 采用两种访问表中记录的方式:
a. 全表扫描
全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.
b. 通过ROWID访问表
你可以采用基于ROWID的访问方式情况,提高访问表的效率,RowId包含了表中记录的物理位置信息.ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(RowId)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.
3). 选择最有效率的表名顺序(只在基于规则的优化器中有效)
4). WHERE子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
5). SELECT子句中避免使用 ‘ * ‘
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常
低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这
意味着将耗费更多的时间.
6). 减少访问数据库的次数
当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少 ORACLE的工作量.
7). 整合简单,无关联的数据库访问
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)
8). 使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
9). 对经常要查询的字段可以建立一个视图
10). 在表中的某个字段上建立索引,可以提高检索速度。

23:spring中可以用注入获得属性值,还有其他的方式吗?
读取配置文件
24:javac编译后会产生几个文件
每个java文件在编译后对应一个.class文件。

25:js的命名规范、注释有哪几种?java的命名规范
命名规范:
1. 变量名必须以字母或下划线(“_”)开头。
2. 变量名可以包含数字、从A到Z的大写字母和从a到z的小写字母
3. 由于javascript区分大小写,所以说,变量myVar、myVAR和myvar是三个不同的变量
注释: 1. 2. // 注释
java的命名规范:
1. 标识符的命名规则: 必须以字母、下划线“_”或“$”符号开头。首字母后面可以跟任意数量的字母、数字、下划线或“$”符号。标识符可以包含数字,但是不能以数字开头。另外,除了下划线和“$”符号外,不能包含任何特殊字符。不能使用java语言的关键字。java中的变量名区分大小写。
2. 类名命名规范:不能为java中的关键字。不能包含任何嵌入的空格或点号“.”以及除下划线、“$”字符之外的特殊字符。不能以数字开头。一般以大写字母开头,且为有意义的单词组合 。
3. 方法命名:不能为java中的关键字。不能包含任何嵌入的空格或点号“.”以及除下划线、“$”字符之外的特殊字符。不能以数字开头。一般以小写字母开头,且为有意义的单词组合

26:spring在项目中如何充当粘合剂
1、在项目中利用spring的IOC(控制反转或依赖注入),明确地定义组件接口(如UserDAO),开发者可以独立开发各个组件, 然后根据组件间的依赖关系组装(UserAction依赖于UserBiz,UserBiz依赖于UserDAO)运行,很好的把Struts(Action)和hibernate(DAO的实现)结合起来了。
2、spring的事务管理把hibernate对数据库的操作进行了事务配置。

27:项目中为什么使用SSH
1. 使用Struts是因为struts是基于MVC模式的,很好的将应非用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。
2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。
3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等

28:简单工厂模式与抽象工厂模式的区别
简单工厂:一个具体工厂通过条件语句创建多个产品,产品的创建逻辑集中与一个工厂类。客户端通过传不同的参数给工厂,实现创建不同产品的目的增加新产品时,需要修改工厂类、增加产品类,不符合OCP(开闭原则)原则工厂方法
抽象工厂:一个具体工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建的逻辑分在在每个具体工厂类中。所有的具体工厂继承自同一个抽象工厂。客户端创建不同产品族的工厂,产品族的工厂创建具体的产品对客户端是不可见的。增加新的产品族时,需要增加具体工厂类,符合OCP原则
(1) 企业JavaBean(Enterprise JavaBean,EJB)为开发服务器端企业应用程序组件提供了一个模型,利用这个模型开发用来创建可移植与分布式企业应用程序的服务器企业应用程序组件,比创建独立的企业应用程序所需使用的企业应用程序组件更为简单。
(2) EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
(3) 开发EJB的主要步骤一般来说,整个的开发步骤(开发,配置,组装)包括如下几个方面。
 开发:首先要定义三个类:Bean类本身,Bean的本地和远程接口类。
 配置:配置包括产生配置描述器-这是一个XML文件、声明了Enterprise Bean的属性、绑定了bean的class文件(包括stub文件和skeleton文件)。最后将这些配置都放到一个jar文件中。还需要在配置器中定义环境属性。
组装应用程序:包括将Enterprise beans安装到Server服务器中,测试各层的连接情况。程序组装器将若干个Enterprise Beans与其它的组件结合起来,组合成一个完整的应用程序;或者将若干个Enterprise beans组合成一个复杂的Enterprise Bean?管理Enterprise Bean

谈谈你所了解的设计模式,说出其作用
a、创建型模式
Singleton: 它是一种创建型的设计模式。解决的是实例化对象个数的问题,比如抽象工厂中的工厂、对象池等,其他创建型模式解决的都是new所带来的耦合关系。
Factory Method: 需要一个额外的工厂类来负责实例化“一边对象”。
Abstract factory: 创建一系列相互依赖的对象,并能在运行时改变系列。
b、结构型模式
Facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
Proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。
c、行为型模式
Observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。

29:Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?
1、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据, Query.setMaxResults():设置要显示的最后一行数据。
2、不使用hibernate自带的分页,可采用sql语句分页,如:5:为每页显示的记录,2为当前页: select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table);

30:最重要的对象是什么?ajax的工作流程?
第一问:不知题目的意思(ajax中最重要的对象是XMLHttpRequest对象)
ajax的工作流程:建立XMLHttpRequest对象,并在XMLHttpRequest上设置一个回调函数,使用XMLHttpRequest对象的open方法与服务器建立连接,并向服务器发异步请求,当服务器数据返回时,就可以在回调函数中用javascript来操作DOM而更新页面。

31:InputStream与BufferReader的区别
InputStream:这是一个抽象类,是表示字节输入流的所有类的超类,需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。
BufferedReader:是从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

32:java中截取字符串的常用方法
substring(int beginIndex), substring(int beginIndex, int endIndex)

33:谈谈你mvc的理解
MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同的任务。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。
然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。

34:struts与spring是如何集成的
有2中集成方式:
1.在Action 中取的spring 对象,此中方式不提倡使用,因为他与业务对象的依耐关系太紧密
2.将 Action 交有 sprong 管理, Action 中需要的业务对象有 spring 注入,提倡使用这种方式

35:struts如何实现国际化
以下以两国语言(中文,英文)为例:
1. 在工程中加入Struts支持
2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: lable.welcome.china=Welcome!!!
3. 创建英文资源文件ApplicationResource_en.properites
4. 创建临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!
5. 对临时中文资源文件进行编码转换。可以使用myeclipse的插件,也可以在dos下执行: native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties
6. 在jsp中加入struts的bean标记库 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
显示信息:
可以在struts-config.xml文件中定义多个资源包,而每个资源包可使用key属性指定包的名称。

36:js怎么实现二级联动










37:UML中的几种关系?他们之间有什么区别?
1、关联
2、聚合
3、组合
4、泛化
5、依赖
6、实现

38:两个ArrayList中怎么算出他们的差集,并集
假如有list1和list2:它们的差集为list3,并集为list4,交集为list5;
for (Object object : list1) {
if(list2.contains(object)){
list3.add(object); //求交集
}else{
list4.add(object); //求差集(list1中存在的,list2中不存在的)
}
list5.add(object);
}
for (Object object : list2) {
if(!list1.contains(object)){
list4.add(object); //求差集(list2中存在的,list1中不存在的)
list5.add(object); //求并集
}
}

你可能感兴趣的:(企业应用)