java面试-ssh-1

来源:
每日新闻头条
最后修订:
2017-03-21 22:26:05

摘要:SSH面试总结什么是MVCMVC是Model—View—Controler的简称。即模型—视图—控制器。1.视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进...

SSH面试总结

什么是MVC

MVC是Model—View—Controler的简称。即模型—视图—控制器。

1.视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。

2.模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性

3.控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图。

项目中为什么使用 SSH

Struts核心类

1. ActionServlet类:前端控制器,将请求转发给RequestProcesser来处理,提供被Action对象使用的方法

2. ActionMapping类:ActionConfiguration子类,对struts-config.xml的一个映射类,从中得到所有配置信息。

3. ActionForward类:mapping中一个forward包装,对应一个URL

4. Action类:链接客户端请求和业务操作,负责处理请求。所有的Action类都扩展org.apache.struts.action.Action类,覆盖其中execute方法。

5. DispatchAction类:普通Action类只能通过execute()执行一项任务,dispatchAction类可以通过配置参数执行多重任务,如insert、update、list、delete

Struts1与Struts2有什么区别

struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。

1.Action 类:

• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口。

• Struts 2 Action类可以实现一个Action接口,也可实现其他接口。Struts2提供一个ActionSupport基类去实现常用的接口。

2.线程模式:

• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。

• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

3. Servlet 依赖:

• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时,HttpServletRequest和HttpServletResponse 被传递给execute方法。

• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。

4. 捕获输入:

• Struts1 使用ActionForm对象捕获输入。

• Struts 2直接使用Action属性作为输入属性。Action属性能够通过we页面上的taglibs访问。

从开发者角度看,需要显示给用户的数据可以直接从Action中获取,而Struts1.x那样,必须把相应的Bean存到Page、Request或者Session中才能获取。Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。

5. 表达式语言:

• Struts1 整合了JSTL,因此使用JSTL EL。

• Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

6.校验:

• Struts 1支持在ActionForm的validate方法中手动校验。同一个类可以有不同的校验内容,但不能校验子对象。

• Struts2支持通过validate方法和XWork校验框架来进行校验。

XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

Struts2的工作流程

1.Tomcat启动,加载web.xml,加载web.xml中的FilterStrutsPrepareAndExecuterFilter过滤器,

2.客户端发起一个(HttpServletRequest)请求到Tomcat容器

3.请求被提交到一系列(主要是三层)的过滤器(Filter)如(ActionContextCleanUp、FilterDispatcher)。

注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器、最后到FilterDispatcher。

FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)

4.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,

如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。

5.ActionProxy通过struts.xml询问框架的配置文件,找到需要调用的Action类.

6.ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。

但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。

7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。WebWork 的拦截器链自动对请求应用通用功能, 例如 workflow、 validation 或文件上传等功能。

8.回调Action的execute方法,该方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器, 它会调用业务逻辑组件来处理用户的请求。

9.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。Action 的 execute 方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持 JSP,也支持 Velocity、FreeMarker。

java面试-ssh-1

Struts1的工作流程

1.在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配置信息,把它们存放到各种配置对象。2.ActionServlet 接收到一个客户请求

3.检索和用户请求匹配的 ActionMapping 实例,如果不存在,就返回无效信息;

4.如果 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交的表单数据保存到ActionForm 对象中;

5.根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;

6.如果ActionForm的validate() 方法返回null或返回一个不包含ActionMessage的ActionErrors 对象, 就表示表单验证成功;

7.ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action。

如果相应的 Action 实例不存在,就先创建这个实例,然后调用 Action 的 execute()方法;

8.Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;

ActionForward 对象指向 JSP 组件生成动态网页,返回给客户;

java面试-ssh-1

Struts1配置文件

1. Web.xml:映射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/conf/struts-config.xml</param-value>

</init-param>

</servlet>

2. Servlet-mapping:用户可以将访问web应用个的扩展名映射到具体处理的servlet,例如将.do结尾的请求都转发到ActionServlet控制器

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-param>*.do</url-param>

</servlet-mapping>

3. Struts-config.xml:用来配置组件:ActionForm、DynaActionForm、Action、全局异常。

<?Xml version=”1.0” encoding=”UTF-8”?>

<!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configration 1.1//EN”“/WEB_INF/dtd/struts-config_1_2.dtd”>

<struts-config>

各种子元素:form-bean,action

</struts-config>

4.在struts-config中的元素配置

1. <form-bean>和<form-beans>:定义表单对象,如定义ActionForm类,<form-bean name=“menuForm” type=”com.itjob.struts.MemuForm”>

定义DynaActionForm类:

<form-bean name=“loginForm” type=”org.apache.struts.DynaActionForm”>

<form-property name=”username” type=”java.lang.String”/>

<form-property name=”password” type=”java.lang.String”/>

</form-bean>

2. <globle-forward>和<forward>:将一些常用的页面配置成全局,这样就不用在action中配置forward

3. <action-mapping>和<action>:action元素描述从特定的请求路径到相应的Action类的映射,

如form-bean中定义name指定表单名称,提供给action,用于指定使用哪个表单。

5.Action属性包括:path,type(完整类名),name(form-bean名),scope,validate,input(输入表单的路径,当表单验证失败时将请求转发到该URL)

6.Action中子元素forward用于指定局部forward走向。

<action-mapping>

<action path=”/login” type=”完整类名” name=”loginForm” scope=”request” validate=”ture” input=”/login.jsp”/>

<action path=”/welcom” type=”完整类名” >

<forward name=”continue” path=”/welcome.jsp”/>

</action>

</action-mapping>

7. <globle-exceptions>和<exception>:定义全局异常

8. <controller>:用于配置ActionServlet请求处理器,代替自己创建的ActionServlet子类

9. <message-resources>:配置本地化消息文本

10. <piug-in>:插件

11. <data-sources>:配置应用程序的数据源

12. Validation.xml:对表单进行验证,使用<plug-in>

13. 资源文件.properties:针对不同语言编写不同资源文件,方便web程序的国际化:资源文件名_国别_语言.properties

Struts1标签库

1. <html:form>:为了创建 Struts和html交互的表单。它的Action属性必须在Struts的配治文件中找到,以便找到相应的Action类:

<html:form action=”/advise.do” enctype=”multipart/form-data”> </html:form>

另外还有text、hiden、password、textarea、img、link、submit、select、reset、checkbox

2. <bean:cookie>:在访问JavaBean及属性,以及定义一个新bean时使用,将请求的cookie值定义成脚本可以访问的JavaBean实例。

还有define(定义变量)、header、include、message、page、parameter、resource、Struts、write

<bean:define id=”test” value=”this is a test”></bean:define>

3. <logic:equal>:管理条件,以及循环产生对象,判断变量是否与指定变量相等。

还有greaterThan、greaterEqual、lessThan、lessEqual、iterate(循环遍历)、empty、present(是否存在)、forward、redirect

<logic:iterate id=”user” name=”yserArray”>

<bean:write name=”user” property/>

</logic:iterate>

4. <nested:nest>:增强嵌套能力。定义嵌套级别,表达JavaBean间的嵌套关系。在一个表单中加入属性值,则可以使用nested进行嵌套写入。

还有root:指定底层界别的JavaBean

5. <title:insert>:用于创建复合式网页,将指定网页加入某网页中。

拦截器Interceptor和过滤器Filter的区别

(1)拦截器是基于java反射机制的,而过滤器则可以对几乎所有请求起作用

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

(3)拦截器只能对执行到Action中的请求起作用,而过滤器可以对任意请求起作用,比如直接跳转到jsp的请求

(4)拦截器可以访问action中上下文值栈里面的对象,过滤器不能。

(5)在action的生命周期中,拦截器可以多次调用,而filter只能在servlet容器初始化的时候调用。

为什么要用Struts

JSP、 Servlet、 JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。 在Struts之前,最常见的做法是在JSP中加入业务和应用逻辑,或者在Servlet中通过println()来生成视图。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于 Struts,是通过结合JSP和Servlet,使Web应用的视图和业务/应用逻辑得以清晰地分离开来。

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"%>

显示信息: <bean:message key="label.welcome.china">

可以在 struts-config.xml 文件中定义多个资源包,而每个资源包可使用 key 属性指定包的名称。

拦截器

1.拦截是AOP的一种实现策略。在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。

2.它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也提供了一种可以提取action中可重用的部分的方式。Struts1.x的标准框架中不提供任何形式的拦截器。

3.拦截器是Struts2的一个强有力的工具,如国际化、转换器,校验等。

4.拦截器链(Interceptor Chain,在Struts2中称为拦截器栈Interceptor Stack)。

拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

5.Struts 2的拦截器实现相对比较简单。

当请求到达Struts2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一一地调用列表中的拦截器,Struts 2已经提供丰富多样功能齐全的拦截器实现。

读者可以到struts2-all-2.0.6.jar或struts2-core-2.0.6.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。作为“框架(framework)”,可扩展性是不可缺少的,因为世上没有放之四海而皆准的东西。

6.创建自定义拦截器。

IOC控制反转在Struts中的应用

如何利用IoC在Action处理过程中可以访问到当前请求HttpServerRequest对象。

在例子中,使用的依赖注入机制是接口注入,接口注入需要的是已经被实现了的接口。这个接口包含了相应属性的setter,为Action提供值。

例子中使用了ServletRequestAware接口,如下:

public interface ServletRequestAware { public void setServletRequest(HttpServletRequest request);}

当继承这个接口后,原本简单的Action看起来有点复杂了,但是这时可以获取HttpServerRequest对象来使用了。

public class IoCForStruts2 implements ServletRequestAware { }

Struts2配置文件:web.xml、Struts.xml

1. 在web.xml中配置(Struts1)org.apache.struts.action.ActionServlet

(Struts2)加载核心控制器FilterDispacher

<filter>

<filter-name>struts2<filter-name>

<filter-class>org.apache.struts2.sidpacher.FilterDispacher</filer-class>

</fliter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2.Struts.xml:负责管理所有的action

<!DOCTYPE struts PUBLIC ”-//Apache Software Foundation//DTDD Struts Configuration 2.0//EN” “http://struts.apache.org/dtd/struts-2.0.dtd”>

<struts>

</struts>

Struts使用的标签:

1. include:将不同的配置模块放在不同的配置文件中

2. package:导包

3. action:将一个请求对应一个Action去处理

<action name =”adminLogin” class=”包名” method=”动作指向Action的哪个方法”>

<result>index.jsp</result>

</action>

4. result:

5. param:action的子标签,是设置参数

Struts.properties

配置Struts2的框架属性,放在src下,编译后将会放在工程的classes下

default.properties

Struts2数据校验:重写validate和整合Xwork校验框架

1. 重写validate

2. 使用框架校验:每个Action同目录下都有一个Action名-validation.xml文件。在xml文件中编写<validator>进行校验。

Struts2标签库:OGNL

1. 控制标签:iterator,if、else,append,generator,sort,merge,subset

2. 数据标签:action(调用action),bean(创建JavaBean),set,include,debug,push,url

3. UI标签:form,textfile,select,radio,checkboxlist,

Struts2拦截器:基于AOP

在Struts2配置拦截器只需要指定拦截器的名称和实现类,使用<intercepts><intercepts><param>

拦截器放在struts-default.xml中

10. STRUTS 的应用(如 STRUTS 架构)

Struts 是采用 Java Servlet技术,开发 Web 应用程序的开放源码的framework。采用 Struts 能开发出基于 MVC(Model-View-Controller)设计模式的应用构架。

Struts 有如下的主要功能:

包含一个 controller servlet,能将用户的请求发送到相应的Action 对象。

JSP 自由 tag 库,并且在 controller servlet 中提供关联支持,帮助开发员创建交互式表单应用。

三.提供了一系列实用对象: XML 处理、通过 Java reflection APIs 自动处理 JavaBeans 属性、国际化的提示和消息。