撩课-Java每天5道面试题第17天
116.说下Struts的设计模式
MVC模式: web应用程序启动时 就会加载并初始化ActionServler。 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的数据, ActionServler根据Struts-config.xml文件 配置好的设置决定是否需要表单验证, 如果需要就调用ActionForm的Validate() 验证后选择将请求发送到哪个Action, 如果Action不存在, ActionServlet会先创建这个对象, 然后调用Action的execute()方法。 Execute()从ActionForm对象中获取数据, 完成业务逻辑, 返回一个ActionForward对象, ActionServlet再把客户请求 转发给ActionForward对象指定的jsp组件, ActionForward对象指定的jsp生 成动态的网页,返回给客户。
117.拦截器和过滤器的区别?
1、拦截器是基于java反射机制的, 而过滤器是基于函数回调的。 2、过滤器依赖于servlet容器, 而拦截器不依赖于servlet容器。 3、拦截器只能对Action请求起作用, 而过滤器则可以对几乎所有请求起作用。 4、拦截器可以访问Action上下文、 值栈里的对象,而过滤器不能。 5、在Action的生命周期中, 拦截器可以多次调用, 而过滤器只能在容器初始化时被调用一次。
118.struts2框架的核心控制器是什么?它有什么作用?
1)Struts2框架的核心控制器是 StrutsPrepareAndExecuteFilter。 2)作用: 负责拦截由<url-pattern>/*</url-pattern> 指定的所有用户请求, 当用户请求到达时, 该Filter会过滤用户的请求。 默认情况下, 如果用户请求的路径 不带后缀或者后缀以.action结尾, 这时请求将被转入struts2框架处理, 否则struts2框架将略过该请求的处理。 可以通过常量"struts.action.extension"修改action的后缀, 如: <constant name="struts.action.extension" value="do"/> 如果用户需要指定多个请求后缀, 则多个后缀之间以英文逗号(,)隔开。 <constant name="struts.action.extension" value="do,go"/>
119.struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象?
方案一: HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session= request.getSession(); ServletContext servletContext= ServletActionContext.getServletContext(); 方案二: 类 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware 注意:框架自动传入对应的域对象
120.ActionContext、ServletContext、pageContext的区别?
1)ActionContext是当前的Action的上下文环境, 通过ActionContext可以 获取到request、session、ServletContext等 与Action有关的对象的引用; 2)ServletContext是域对象, 一个web应用中只有一个ServletContext, 生命周期伴随整个web应用; 3)pageContext是JSP中的最重要的一个内置对象, 可以通过pageContext获取其他域对象的应用, 同时它是一个域对象, 作用范围只针对当前页面, 当前页面结束时, pageContext销毁, 生命周期是JSP四个域对象中最小的。