• Struts2重要知识点总结


    一、interceptor拦截器的使用

    第一种情况(指定action使用该拦截器):struts.xml文件的配置:

    <interceptors>
      <interceptor name="myinterceptor" class="loginInterceptor"/>
      <interceptor-stack name="loginStack">
        <interceptor-ref name="myinterceptor"/>
        <interceptor-ref name="defaultStack"/>
      </interceptor-stack>
    </interceptors>

    <action name="go" class="testAction">
      <result name="success">index.jsp</result>
      <interceptor-ref name="loginStack"></interceptor-ref>
    </action>

    第二种情况(所有action使用该拦截器):struts.xml文件的配置:

    <interceptors>
      <interceptor name="myinterceptor" class="loginInterceptor"/>
      <interceptor-stack name="loginStack">
        <interceptor-ref name="myinterceptor"/>
        <interceptor-ref name="defaultStack"/>
      </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="loginStack"/>

    PS:必须要添加defaultStack的默认拦截器,不然依赖注入参数受到影响

    二、struts.xml配置文件各节点先后顺序问题

    package节点的子节点一定要按照如下的顺序配置,不然启动时会报错。

          result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*

    例如:global-results节点一定放要在action节点前面,interceptor节点后面(也就是按照上面的节点顺序排列)

    三、多文件上传

    1、文件大小限制设置:

        添加Struts.xml文件配置<constant name="struts.multipart.maxSize" value="2097152000" />

    2、中文的文件名乱码问题:

        添加Struts.xml文件配置<constant name="struts.i18n.encoding" value="utf-8"/>;同时,设置选择上传文件页面的编码为“utf-8”。

    html5页面添加:<meta http-equiv="content-type" content="text/html; charset=UTF-8">;jsp页面添加:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    3、多文件上传的页面的name为同名。如:

    <form action="fileUpdown.do" method="post" enctype="multipart/form-data">
    文件选择1:<input type="file" name="file">
    文件选择2:<input type="file" name="file">
    <input type="submit" value="提交">
    </form>

    4、上传所提交的action代码如下:

    @Controller@Scope("prototype")
    public class FileUpdown {
    private File[] file;
    private String[] fileFileName;
    private String[] fileContentType;

    public void setFileFileName(String[] fileFileName) {
      this.fileFileName = fileFileName;
    }
    public void setFileContentType(String[] fileContentType) {
      this.fileContentType = fileContentType;
    }
    public void setFile(File[] file) {
      this.file = file;
    }
    public String execute(){
    try {
      for (int i = 0; i < file.length; i++) {
        System.out.println(fileContentType[i]);
        FileOutputStream os = new FileOutputStream("E:/"+fileFileName[i]);
        FileInputStream is = new FileInputStream(file[i]);
        int len = 0;
        byte[] b = new byte[1024];
        len = is.read(b);
        while (len!=-1) {
          os.write(b,0,len);
          len = is.read(b);
        }
        os.close();
        is.close();
      }
    } catch (Exception e) {
    }
    return "success";
    }
    }

    四、防止页面重复提交,使用token拦截器

    拦截器配置:

    <interceptors>
      <interceptor-stack name="tokenStack">
        <interceptor-ref name="token"/>
        <interceptor-ref name="defaultStack"/>
      </interceptor-stack>
    </interceptors>

    定向结果配置:

    <action name="serch" class="getUser">
      <result name="success">showUser.jsp</result>
      <result name="invalid.token">error.html</result>
    </action>

    表单页面:

    1、引入Struts2标签库:<%@ taglib prefix="s" uri="/struts-tags" %>

    2、表单包含该标签:<s:token></s:token>。

    注意事项:上面的action一定要继承ActionSupport类,不然运行抛出空指针异常

  • 相关阅读:
    菜鸟浅谈软件开发项目管理
    中国准货币体系的概要简析
    使用dockercompose安装wordpress
    货币乘数
    安全测试的相关内容
    TCP三次握手和四次挥手
    HTTP协议相关
    描述浏览器登录的过程
    AJAX相关知识
    什么是热钱
  • 原文地址:https://www.cnblogs.com/wbjgogogo/p/7569420.html
Copyright © 2020-2023  润新知