zoukankan      html  css  js  c++  java
  • Struts2-----文件上传与拦截器原理

    文件上传

    三种上传方案:

    1、上传到tomcat服务器

    2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系

    3、在数据库表中建立二进制字段,将图片存储到数据库

    (前面两种是常用方法,第三种不常用  我这里要讲的是第二种)

    web层代码:

        private File file;
        private String fileContentType;
        private String fileFileName;
        //变量名与jsp页面input的名字保持一致
    /** * 直接上传图片 * @return */ public String upload() { try { String targetDir ="D:/上课内容/img";//实际存储的位置 String serverPath="/upload";//存储在数据库中的地址 FileUtils.copyFile(file, new File(targetDir+"/"+fileFileName)); //数据库存放的是网络请求地址 而不是本地存放地址 clz.setPic(serverPath+"/"+fileFileName); this.clzDao.edit(clz); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "toList"; } /** * 跳转文件上传页面 * @return */ public String preUpload() { Clazz c = this.clzDao.list(clz, null).get(0); request.setAttribute("clz", c); return "toUpload"; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; }

    jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <form action="${pageContext.request.contextPath }/sy/clz_upload.action " method="post" enctype="multipart/form-data">
            编号:<input type="hidden" name="cid" value="${clz.cid }"> <br>
            班级名:<input type="hidden" name="cname" value="${clz.cname }"> <br>
            教员:<input type="hidden" name="cteacher" value="${clz.cteacher }"> <br>
            <input type="file" name="file">
            <input type="submit">
        </form>
    
    </body>
    </html>
    struts-sy.xml配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
        <package name="sy" extends="base" namespace="/sy">
            <action name="/demo_*" class="com.psy.web.HelloAction" method="{1}">
                <result name="rs">/rs.jsp</result>
            </action>
            
            <action name="/clz_*" class="com.psy.crud.web.ClazzAction" method="{1}">
                <result name="list">/clzList.jsp</result>
                <result name="preSave">/clzEdit.jsp</result>
                <result name="toList" type="redirectAction">/clz_list</result> 
                <result name="toUpload">/upload.jsp</result>
                
            </action>
            
        </package>
    </struts>

              拦截器

    一、Struts2拦截器原理:

    Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。

    比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用。因为大部分Action里的权限检查代码都大同小异,故将这些权限检查的逻辑放在拦截器中进行将会更加优雅。

    二、Struts2拦截器的实现:

    实现拦截器有两种方法

    一种是 implements Interceptor
    第二种是 extends AbstractInterceptor

    public class OneInterceptor implements Interceptor{
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void init() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public String intercept(ActionInvocation arg0) throws Exception {
            System.out.println("========OneInterceptor========1");
            String invoke = arg0.invoke();
            System.out.println("========OneInterceptor========2");
            return invoke;
        }
    
    }

    所有拦截器都使用接口Interceptor ,Action去实现这个接口;

    Init()方法:在服务器起动的时候加载一次,并且只加载一次;

    Destroy()方法:当拦截器销毁时执行的方法;

    Interceptor()方法:其中里边有一个参数invocation;

  • 相关阅读:
    JS的应用(document对象)
    JS的应用(windows对象二)
    JS的应用(windows对象一)
    递归
    函数使用规则和JS内自带的一些函数
    学习笔记之HTML(十秒倒计时;列表收起、展开;下拉列表;
    学习笔记之大图轮播加圆点
    学习笔记之函数类型,for循环,练习
    学习笔记之for循环if循环小练习
    学习笔记之09for循环8个小练习
  • 原文地址:https://www.cnblogs.com/psyu/p/11177885.html
Copyright © 2011-2022 走看看