美文网首页程序员码蚁IT
撩课-Java每天5道面试题第18天

撩课-Java每天5道面试题第18天

作者: 码蚁Q | 来源:发表于2018-11-19 17:31 被阅读94次

    121.描述Struts2的工作原理

    客户端发送请求--》
    请求经过一系列过滤器->
    FilterDispatcher通过
    ActionMapper来决定这个Reques
    t需要调用哪个Action ->
    FilterDispatcher把请求的处理交给ActionProxy-> 
    通过ConfigurationManager询问
    Struts配置文件(Struts.xml)
    找到需要调用的Action类->
    ActionProxy创建一个ActionInvocation的实例 ->
    调用Action->执行完毕,
    返回结果
    
    

    122.result的type属性中有哪几种结果类型?

    一共10种:    
    
    dispatcher          
    
    struts默认的结果类型,
    把控制权转发给应用程序里的
    某个资源不能把控制权
    转发给一个外部资源,
    若需要把控制权重定向到
    一个外部资源, 应该使用  
    
    redirect结果类型  
    redirect   
    把响应重定向到另一个资源(包括一个外部资源)  
    
    redirectAction      
    把响应重定向到另一个 Action  
    
    freemarker、
    velocity、
    chain、
    httpheader、
    xslt、
    plainText、
    stream 
    

    123.拦截器的生命周期与工作过程?

    1)每个拦截器都是实现了I
    nterceptor接口的 Java 类;  
    
    2)init(): 该方法将在拦截器被创建后立即被调用, 
    它在拦截器的生命周期内只被调用一次. 
    可以在该方法中对相关资源
    进行必要的初始化;  
    
    3)intercept(ActionInvocation invocation): 
    每拦截一个动作请求,
     该方法就会被调用一次;  
    
    4)destroy: 
    该方法将在拦截器被销毁之前被调用, 
    它在拦截器的生命周期内也只被调用一次;  
    
    5)struts2中有内置了18个拦截器。
    

    124.struts2如何完成文件的上传?

    1、JSP页面:  
    
    1)JSP页面的上传文件的组件:
    <s: file name=”upload” />,
    如果需要一次上传多个文件, 
    就必须使用多个 file 标签, 
    但它们的名字必须是相同的,
    即:   name=“xxx”的值必须一样;  
    
    2)必须把表单的enctype属性设置为:
    multipart/form-data;  
    
     3)表单的方法必须为post,
    因为post提交的数据在消息体中,
    而无大小限制。  
    
    2、对应的action:  
    
     1)在 Action 中新添加 3 个
    和文件上传相关的属性;  
    
    2)如果是上传单个文件, 
    uploadImage属性的类型就是 
    java.io.File, 它代表被上传的文件, 
    第二个和第三个属性的类型是 String, 
    它们分别代表上传文 件的文件名和文件类型,
    定义方式是分别是:  
    
    jsp页面file组件的名称+ContentType,  
    jsp页面file组件的名称+FileName  
    
    3)如果上上传多个文件, 
    可以使用数组或 List  
           
    

    125.值栈ValueStack的原理与生命周期?

    1)ValueStack贯穿整个 Action 的生命周期,
    保存在request域中,
    所以ValueStack和request的生命周期一样。
    当Struts2接受一个请求时,
    会迅速创建ActionContext,  
    
    ValueStack,action。
    然后把action存放进ValueStack,
    所以action的实例变量可以被OGNL访问。
     请求来的时候,
    action、ValueStack的生命开始,
    请求结束,action、    ValueStack的生命结束;  
    
    2)action是多例的,和Servlet不一样,
    Servelt是单例的;  
    
    3)每个action的都有一个对应的值栈,
    值栈存放的数据类型是该action的实例,
    以及该action中的实例变量,
    Action对象默认保存在栈顶;  
    
    4)ValueStack本质上就是一个ArrayList;  
    
    5)关于ContextMap,
    Struts 会把下面这些映射压入 ContextMap 中:  
    
    parameters  :   
    该 Map 中包含当前请求的请求参数  
    
    request     :  
    该 Map 中包含当前 request 对象中的
    所有属性  session 
    :该 Map 中包含当前 session 对象中的所有属性  
    
    application 
    :该 Map 中包含当前 
    application 对象中的所有属性  
    
    attr:该 Map 按如下顺序来检索某个属性: 
    request, session, application           
    
    6)使用OGNL访问值栈的内容时,
    不需要#号,
    而访问request、session、application、attr时,
    需要加#号;  
    
    7)注意: Struts2中,
    OGNL表达式需要配合Struts标签才可以使用。
    如:<s:property value="name"/>  
    
    8)在struts2配置文件中引用ognl表达式 ,
    引用值栈的值 ,此时使用的"$",而不是#或者%;  
    

    相关文章

      网友评论

        本文标题:撩课-Java每天5道面试题第18天

        本文链接:https://www.haomeiwen.com/subject/yvcnfqtx.html