1.MVC的各个部分都有那些技术来实现?如何实现?
答:MVC是Model-View-Controller的简写。Model 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), View 是应用的表示面(由JSP页面产生),Controller 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
2.说说struts1与struts2的区别 ? ? ? ? ? ? ?
都是MVC的WEB框架;
struts1的前端控制器是一个Servlet,名称为ActionServlet,
struts1的action需要继承Action类,struts2的action可以不继承任何类; Struts1依赖与servlet的API
struts1对同一个路径的所有请求共享一个Action实例,struts2对同一个路径的每个请求分别使用一个独立Action实例对象,所有对于struts2的Action不用考虑线程安全问题;
在struts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数; struts1中的多个业务方法放在一个Action中时(即继承DispatchAction时),要么都校验,要么都不校验;对于struts2,可以指定只对某个方法进行校验,当一个Action继承了ActionSupport且在这个类中只编写了validateXxx()方法,那么则只对xxx()方法进行校验;
3.转发和重定向的区别? ? ?
4.Struts2执行流程 ? ? ? ? ?
客户端发出一个指向servlet容器的请求(tomcat)
这个请求经过一系列的过滤器(Filter),最后达到StrutsPrepareAndExecuteFilter
过滤器是struts2框架的心脏,询问ActionMapper类来查找请求中需要用到的Action,
如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。 ActionProxy
创建一个
ActionInvocation
的实例,并调用
ActionInvocation
的
invoke(),ActionInvocation实例包含了一系列的拦截器,在调用Action的过程前,涉及到相关拦截器(Intercepter)的调用。 ?
5.拦截器的生命周期 ? ? ? ? ?
每个拦截器都实现了Interceptor接口的java类
init(): 在拦截器对象被创建后立即调用,只会调用一次,一般用来进行相关资源的初始化 intercept(ActionInvocation invocation):每个拦截一个动作请求,该方法就会被调用过一次 destory(): 该方法将在拦截器被销毁前条用,只会调用一次,一般用来释放资源 Struts2默认调用18个拦截器
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
struts2
的过滤器
转发:服务端跳转,在客户端浏览器地址栏中不会显示出转向后的地址,一次请求;
重定向:客户端跳转,浏览器将会得到跳转的地址,并重新发送请求链接,两次请求。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用重定向。
struts2的前端控制器是一个filter,在struts2.1中叫StrutsPrepareAndExecuteFilter;
Struts2不依赖与Servlet的API
6.Struts2有哪些优点 ? ? ? ? ? ? ?
7.Struts2常量的修改方式?
常量可以在struts.xml或struts.properties中配置 ? ?
8.Struts2如何访问HttpServletRequest,HttpSession,ServletContext,HttpServletResponse? 方式一:主动获取
HttpServletRequest request =ServletActionContext.getRequest();
HttpSession session =request.getSession();
ServletContext application =session.getServletContext(); 在struts.xml中配置常量 在struts.properties中配置常量
在软件设计上struts2的应用不依赖于Servlet API和Struts API,属于无侵入式设计; 强大的拦截器,实现了如参数拦截输入,文件上传,校验等功能 类型转换器,实现了字符串与特殊数据类类的转换 Struts2可以对指定某个方法进行校验
提供了全局范围。包范围和action范围的国际化资源文件管理 为应用程序添加了全局的result,和声明式异常处理 可以实现模块化管理,将应用程序模块化
HttpServletResponse response=ServletActionContext.getResponse();
方式二:依赖框架注入
定义类实现implements ServletRequestAware,ServletResponseAware,注入请求对象和响应对象,session对象和application对应通过request间接获得。
9.Struts2如何管理aciton,这种管理方式有什么好处?
Struts2框架使用包管理Action,包的作用和java中的类包相似,主要管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。
10.Strus2中校验的执行流程 ? ? ? ?
11.介绍ActionContext,ServletContext,pageContext?
ActionContext是当前Action的上下文,通过ActionContext可以获取request,session.applicationd等于Action有关的对象引用。
ServletContext是域对象,生命周期伴随整个web应用。
类型转换不管是否成功后,都会进行校验
先调用validateXxx()进行校验,只会校验action中方法名为xxx()的方法,如果校验失败,添加校验失败信息
再调用validate()方法,会校验action中所有与execute方法签名相同的方法,如果校验失败,添加校验失败信息
如果校验失败,则跳转到name=“input”的result指定的页面,否则,调用action的具体方法
pageContext也是一个域对象,其作用范围只是当前页面。 12.Ajax的优点 ? ? ?
页面无刷新,用户的体验非常好。 与服务器通信,具有更加迅速的响应能力。
可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。 ?
13.Ajax的缺点 ? ? ? ? ?
14.XMLHttpRequest对象的常用属性和方法 常用属性:
readyState属性:请求的状态,有5个可取值 0=未初始化 ,1=正在加载 2=以加载,3=交互中,4=完成
responseText 属性: 服务器的响应,表示为一个字符串 reponseXML 属性:服务器的响应,表示为XML格式的对象
status :服务器的HTTP状态码,200对应ok 400对应not found。
常用方法:
open(“method”,”URL”) 建立对服务器的调用;
第一个参数是HTTP请求,方式可以为GET,POST或任何服务器所支持的您想调用的方式。 第二个参数是请求页面的URL。 send()方法,发送具体请求
15.谈谈XMLHttpRequest对象
Ajax的核心是JavaScript对象XMLHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XMLHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。
破坏浏览器后退按钮的正常行为。
安全问题 AJAX暴露了与服务器交互的细节。 对搜索引擎的支持比较弱。 破坏了程序的异常机制。 不容易调试。
不需要下载插件或者小程序