struts一直显示jsp文件未找到_3道常见的 Struts面试题

个人觉得,Struts框架已经不流行了,传统的项目可能还会使用Struts。这部分可以简单看一下,面试一般不会问Struts,除非你的项目经验有使用过。

1、Struts的理解

官方解释:它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

Structs分Struts1、Struts2 ,是一个轻量级的MVC框架,后者在不断的优化,但是风险和漏洞太多,加上Spring MVC的出现,已经代替了Struts了。

在没有Struts的时候,我们都是使用servlet处理请求的,而Struts恰好就是为了解决这个问题的,servlet默认在第一次访问的时候只创建一次对象,是单实例对象;Struts2的action是多实例对象,每次访问的时候都会创建action对象,是多态的。

与Servlet对比

优点:业务代码解耦,提高开发效率。提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。

缺点:执行效率偏低,需要使用反射、解析XML等技术手段,结构复杂。

优点:

(1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。

(2) 丰富的标签库,大大提高了开发的效率。

(3) Struts2提供丰富的拦截器实现。

(4) 通过配置文件,就可以掌握整个系统各个部分之间的关系。

(5) 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。
(6) Struts2的可扩展性高。Struts2的核心jar包中由一个struts-default.xml文件,在该文件中设置了一些默认的bean,resultType类型,默认拦截器栈等,所有这些默认设置,用户都可以利用配置文件更改,可以更改为自己开发的bean,resulttype等。因此用户开发了插件的话只要很简单的配置就可以很容易的和Struts2框架融合,这实现了框架对插件的可插拔的特性。

(7) 面向切面编程的思想在Strut2中也有了很好的体现。最重要的体现就是拦截器的使用,拦截器就是一个一个的小功能单位,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个、Action中就可以。

缺点:

(1) 传参麻烦,要经过默认的拦截器,参数过多就会臃肿,而且参数校验繁琐,需要根据不同的参数错误返回给前端,就需要配置多个name。
   (2) 安全性有待提高,被爆漏洞多。

2、Struts2 的核心

Struts2 在 web.xml 配置 的核心——StrutsPrepareAndExecuteFilter,也是Struts2 的核心。

<filter>
    <filter-name>Struts2fileter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
filter>
<filter-mapping>
    <filter-name>Struts2filter-name>
    <url-pattern>/*url-pattern>
<filter-mapping>

struts.xml 的配置:

    <package name="admin" extends="admin-default" namespace="/admin">
        <action name="default">
            <result>/WEB-INF/page/admin/frame/default.jspresult>
        action>
        <action name="menu">
            <result name="success">/WEB-INF/page/admin/frame/menu.jspresult>
        action>
        <action name="top">
            <result>/WEB-INF/page/admin/frame/top.jspresult>
        action>
    package>

3、Struts的执行流程

  1. 客户端浏览器发出HTTP请求。

  2. 根据web.xml配置,该请求被StrutsPrepareAndExecuteFilter接收。如果判断是struts2请求,就把它交给ActioProxy处理

  3. ActionProxy创建一个ActionInvocation的实例(采用动态代理的方式),并进行初始化

  4. ActionInvocation实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用

  5. 根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。

  6. Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

  7. 返回HTTP响应到客户端浏览器。

--end--

765df57b3ec166dbe61467f45b2ec3b7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值