太阳烘烘放光芒吧 关注:56贴子:3,573
  • 3回复贴,共1
一楼防窥


1楼2013-07-03 11:08回复

    填空题:各章知识要点概念
    1.Struts框架是一种流行的MVC框架,掌握这个框架讲给JavaEE项目开发带来诸多方便,从而成倍的提高开发效率。
    2.为了在web中引入struts2,需要在web.xml中记性struts2过滤器的设置。Struts.xml是struts2的核心配置文件,他用户管理web应用中Action配置,struts.properties为struts2的另一个核心配置文件,它用于配置struts2框架的各个属性。Struts2的各项配置属性都来自default.properties,struts2为这些配置项设置了默认值。任何mvc框架在于web应用进行整合时都是借助于web.xml的配置。
    3.国际化(Internationalization,简称I18N)指的是在软件的设计阶段,已经设计了针对不同的语言和地区显示不同页面的功能当系统需要支持另一个不同的语言和地区时,只需要添加另一个资源文件,例如中文使用中跟资源文件,英文使用英文资源文件,而不需要修改程序代码。
    4.输入校验分为客户端校验和服务端校验,这两者对系统来说缺一不可。其中客户端校验主要通过JavaScript实现,阻止非法数据进入系统。而服务端校验是阻止非法输入进入系统的最后一道关卡,通过Java代码编程实现。Struts2提供了强大的校验客户端和服务端数据的校验体系,它吱声提供了绝大部分的校验,而且还提供了良好的扩展性,允许开发人员重写validate方法来自定义验证规则。
    类型转换使用广泛,主要用在开发人员将一个字符串转换成更复杂些的对象类型时,因为web中类型非常单一(在HTTP中所有的信息都是String类型的)而Java是强类型的语言,因此MVC框架一般都会提供字符串类型到其他类型的转换,struts2提供了基于OGNL表达式的强大转换机制,而且还提供了良好的扩展性,允许开发人员创建自定义的类型转换器。
    5.Struts2提供了内置的类型转换,包括简单的对象转换、数组类型转换、List类型转换和Map类型转换等。
    6.拦截器是struts2的一个重要的组成部分,甚至被人称为struts2框架的基石,它与Servlet中的过滤器类似,可在Action的方法之前或之后执行一些预先设置的方法。拦截器一般用于进行类型转换操作、进行权限控制、防止表单的双重提交和处理文件上传等功能,它将各Action执行前后的重复代码提取出来,因此在很大程度上减少了重复代码,增强了代码的复用。Struts2中的拦截器是通过配置文件(struts.xml)进行动态配置的,struts2框架提供了对拦截器的良好的扩展性,允许开发人员定义自定义的拦截器。
    7.Struts2的标签库使用OGNL表达式作为基础,其对集合和对象的访问功能很强大。同时,struts2提供了很多额外的高级标签,例如树型结构、时期选择标签等。同时,struts2提供了对Dojo、DWR和Ajax的支持,因此可以生成更多的页面效果。Struts2提供了对主题和模板的支持。
    8.表达式语言的灵感来自于ECMAScript和XPath表达式语言,他提供了在JSP中简化表达式的方法。他是一种简单的语言,基于用命名空间(PageContext属性)、嵌套属性、对集合和操作符(算术型、关系型和逻辑型)的访问符、映射到Java类中静态方法的可扩展函数以及一组映射对象。EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在JSP文件中嵌入Java代码的元素。他们通常用于对象操作以及执行那些影响所生成内容的计算。JSP2.0将EL表达式添加为以后总脚本编制元素。Struts2在2.0.11版本前支持在标签中使用表达式语言EL而自此以后不再支持在标签中使用EL,但在struts2标签之外使用EL表达式还是允许的。不再支持的原因在于使用JSP表达式语言可能会允许怀有恶意的OGNL表达式。


    2楼2013-07-03 11:12
    回复

      权限拦截器:
      配置struts.xml
      <package name="jkx" namespace="/Interceptor" extends="struts-default">
      <interceptors>
      <interceptor name="permitInterceptor" class="com.jkx.user.interceptor.PermitInterceptor">
      </interceptor>(配置拦截器)
      <interceptor-stack name="permit">
      <interceptor-ref name="permitInterceptor"></interceptor-ref>
      </interceptor-stack>(配置拦截器栈可以包含对多个拦截器的引用)
      </interceptors>
      <global-results>
      <result name="msg">/WEB-INF/page/message.jsp</result>
      </global-results>
      <action name="userAction" class="com.jkx.user.action.UserAction" method="addUI">
      <interceptor-ref name="permit"/>(指定拦截器栈)
      <interceptor-ref name="defaultStack"/>
      </action>
      </package>
      拦截器类的内容
      public class PermitInterceptor implements Interceptor{
      public void destroy() {}
      public void init() {}
      public String intercept(ActionInvocation invocation) throws Exception {
      Object user1=ActionContext.getContext().getSession().get("user");//获取session里的对象
      System.out.println(user1);
      if(user1!=null) return invocation.invoke();//调用struts类封装好的动态代理类如果用户登录成功则调用相应的action
      else{ActionContext.getContext().put("message", "用户无访问权限");return "msg";}}
      登录的jsp页面代码
      <%session.setAttribute("user","两");%>
      将用户登录信息放在session里面在拦截器类里在取判断用户是否有登录如果没有登录就无权限访问。


      4楼2013-07-03 11:14
      回复
        =====================================================================
        代码分析题:拦截器
        自定义拦截器:时间拦截器
        配置struts.xml
        <package name="jkx" namespace="/interceptor" extends="struts-default">
        <interceptors>
        <interceptor name="timeInterceptor" class="com.jkx.time.interceptor.TimeInterceptor">
        </interceptor>
        </interceptors>(配置拦截器,拦截器名称和拦截器对应的类包名.类名)
        <action name="loginAction" class="com.jkx.time.Action.LoginAction">
        <result name="success">/WEB-INF/page/loginSuccess.jsp</result>
        <result name="error">/WEB-INF/page/loginFail.jsp</result>
        <!-- 为loginAction配置timeInterceptor拦截器 -->
        <interceptor-ref name="timeInterceptor"></interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>(为Action配置拦截器必须要映入默认的拦截器栈,否则会报错。此处的拦截器的名称为上面你自己配置的拦截器的名称)
        </action>
        </package>
        拦截器类的内容
        public class TimeInterceptor extends AbstractInterceptor {//当需要申请资源和消费资源时使用implements interceptor
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
        long start=System.currentTimeMillis();
        String result=invocation.invoke();
        long end=System.currentTimeMillis();
        System.out.print("执行被拦截方法的时间为:="+(end-start)+"毫秒");
        return null;
        }
        }


        7楼2013-07-03 11:19
        回复