struts-上传

一、创建项目
    项目名称:demoupload
二、添加jar包
    commons-fileupload-1.2.2.jar
    commons-io-2.0.1.jar
    commons-lang3-3.1.jar
    freemarker-2.3.19.jar
    javassist-3.11.0.GA.jar
    ognl-3.0.5.jar
    struts2-core-2.3.4.1.jar
    xwork-core-2.3.4.1.jar
三、在web.xml文件中配置过滤器
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
四、在WebRoot目录下创建upload目录用于存放上传文件
    /upload
五、添加核心配置文件
    1.在项目中创建conf目录
        /conf
    2.在conf目录下添加配置文件
        配置文件名称:struts.xml
        配置文件内容:
        <?xml version="1.0" encoding="utf-8" ?>
        <!DOCTYPE struts PUBLIC
                  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
                  "http://struts.apache.org/dtds/struts-2.3.dtd">
         <struts>
             <constant name="struts.devMode" value="true" />
             <!-- 配置全局文件大小 -->
             <constant name="struts.multipart.maxSize" value="21851335"></constant>
         </struts>

六、在WEB-INF下创建pages目录
    /pages
    在pages目录下创建页面
    /pages
        /error.jsp
        /success.jsp
七、创建Action
    1.在src目录下创建包
        cn.jbit.demoupload.web.action
    2.在包下创建Action
        Action名称:UploadAction.java
        Action内容:
        public class UploadAction extends ActionSupport {
            private File upload;//文件对象
            private String uploadContentType;//文件类型
            private String uploadFileName;//文件名称
            public String saveFile(){
                ServletContext servletContext = ServletActionContext.getServletContext();
                String path = servletContext.getRealPath("/upload");
                System.out.println(path+"路径");
                File newFile = new File(path,uploadFileName);
                try {
                    FileUtils.copyFile(upload, newFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return SUCCESS;
            }
            public File getUpload() {
                return upload;
            }
            public void setUpload(File upload) {
                this.upload = upload;
            }
            public String getUploadContentType() {
                return uploadContentType;
            }
            public void setUploadContentType(String uploadContentType) {
                this.uploadContentType = uploadContentType;
            }
            public String getUploadFileName() {
                return uploadFileName;
            }
            public void setUploadFileName(String uploadFileName) {
                this.uploadFileName = uploadFileName;
            }
        }
    3.在struts核心配置文件中添加配置
        <package name="default" namespace="/" extends="struts-default">
             <action name="*_uploadAction" class="cn.jbit.demoupload.web.action.UploadAction" method="{1}">
                 <interceptor-ref name="defaultStack">
                     <param name="fileUpload.maximumSize">20480</param>
                     <param name="fileUpload.allowedTypes">image/pjpeg,image/gif</param>
                     <param name="fileUpload.allowedExtensions">jpg,gif</param>
                 </interceptor-ref>
                 <result name="success">/WEB-INF/pages/success.jsp</result>
                 <result name="input">/WEB-INF/pages/error.jsp</result>
             </action>
         </package>
八、创建页面
    页面名称:index.jsp
    页面内容:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
      </head>
      
      <body>
        <form action="${pageContext.request.contextPath }/saveFile_uploadAction.action" method="post" enctype="multipart/form-data">
            上传文件:
            <input type="file" name="upload"/>
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>

    本文转自  素颜猪  51CTO博客,原文链接:    


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将数组作为参数,调用该函数时候给的是数组地址还是整个数组

1、在实际的应用中&#xff0c;数组经常作为函数参数&#xff0c;将数组中的数据传递到另外一个函数中&#xff0c;一般来说&#xff0c;传递可以采用两种方法&#xff1a; 1>、数组元素作为函数的实参时&#xff0c;用法跟普通变量作参数相同&#xff0c;将数组元素的值传递…

C#项目中常用到的设计模式

C#项目中常用到的设计模式 1. 引言 一个项目的通常都是从Demo开始&#xff0c;不断为项目添加新的功能以及重构&#xff0c;也许刚开始的时候代码显得非常凌乱&#xff0c;毫无设计可言。但是随着项目的迭代&#xff0c;往往需要将很多相同功能的代码抽取出来&#xff0c;这也是…

学习笔记(14):Python网络编程并发编程-文件传输功能实现

立即学习:https://edu.csdn.net/course/play/24458/296245?utm_sourceblogtoedu 1.课程目的&#xff1a; 实现客户端输入下载文件的命令&#xff0c;然后将命令发送给服务端&#xff0c;服务端再执行下载文件的命令&#xff0c;最后将执行下载文件命令后的结果返回给客户端&a…

NFS精简版配置方法

此实验的前提是防火墙需关闭。 1.关闭iptables /etc/init.d/iptables stop /etc/init.d/iptables status 2.关闭selinux setenforce 0 getenforce Permissive ---出现这个单词即代表selinux临时关闭&#xff0c;如需永久关闭则需修改/etc/sysconfig/selinux配置文件 …

Serializable接口中serialVersionUID字段的作用

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联&#xff0c;该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。 如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同&…

重新认知指针

1、把指针指向的变量的数据类型称为指针的数据类型&#xff1b;而任何一个指针变量本身数据值的类型都是unsigned long int 2.、指针变量名前的符号“*”表示的是指向运算。 3、不要认为“ *p" 是指针变量&#xff0c;指针变量是p而不是*p 4、

分布式数据库 HBase

原文地址&#xff1a;http://www.oschina.net/p/hbase/ HBase 概念 HBase – Hadoop Database&#xff0c;是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实…

学习笔记(15):Python网络编程并发编程-进程理论

立即学习:https://edu.csdn.net/course/play/24458/296423?utm_sourceblogtoedu 1.进程&#xff1a;正在运行的一个过程或者一个任务&#xff1b; 2.进程与程序的区别&#xff1a;程序是一堆代码&#xff0c;程序运行起来就是进程了&#xff0c;一个程序运行两次&#xff0c;算…

【翻译】Designing Websites for iPhone X

让网站适配 iphone X 英文原文地址&#xff1a;https://webkit.org/blog/7929/...本文原文地址&#xff1a;https://github.com/cnsnake11/... The section below about safe area insets was updated on Oct 31, 2017 to reflect changes in the iOS 11.2 beta. 以下关于safe …

指针作为函数参数引用数组的任意元素

void swap(int *a,int*b) {*a*a^*b;*b*a^*b;*a*a^*b; } swap(data[j],data[j1]&#xff09;; int data[10]{13,55,48,13,62,45,754,0,10};以上是我遇到的问题&#xff0c;我觉得调用这个swap函数是不能这样直接把数组的某个元素直接丢给swap数据 在程序中参加数据处理的量不是指…

使用 Log4Net 记录日志

第一步&#xff1a;下载Log4Net 下载地址&#xff1a;http://logging.apache.org/log4net/download_log4net.cgi 把下载的 log4net-1.2.11-bin-newkey解压后&#xff0c;如下图所示&#xff1a; 双击bin文件夹 双击net文件夹&#xff0c;选择针对.NET FramerWork的不同版本 找…

Xcode常用快捷键

1. 文件CMD N: 新文件CMD SHIFT N: 新项目CMD O: 打开CMD S: 保存CMDOPtS&#xff1a;保存所有文件CMD SHIFT S: 另存为CMD W: 关闭窗口CMD Q :退出XcodeCMD SHIFT W: 关闭文件2. 编辑CMD [: 左缩进CMD ]: 右缩进CMDshiftF:项目中查找CMDG:查找下一个CMDshiftG:查…

学习笔记(16):Python网络编程并发编程-开启子进程的两种方式

立即学习:https://edu.csdn.net/course/play/24458/296424?utm_sourceblogtoedu #方式一&#xff1a;使用python内置模块multiprocessing下的process类 from multiprocessing import Process import time#定义进程函数 def task(name):print(%s is running&#xff01;%name)t…

ElasticSearch的API python调用

os json datetime datetime django.http HttpResponse reelasticsearch Elasticsearches Elasticsearch([])res8 es.search({:{:{:{::}}}} ) statistic():():hit res8[][]:a (%hit %hit[])a re.split(a);arow a:id row[] row[]idHttpResponse(a)转载于:https://blog.51cto…

HDU 1757 A Simple Math Problem (矩阵快速幂)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1757 在吴神的帮助下才明白如何构造矩阵&#xff0c;还是好弱啊。 此处盗一张图 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <cmath>5 #include <al…

Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)...

首先&#xff0c;在xml其中新增部分标有下划线的文件&#xff0c;容器初始化的时候需要扫描包 注意&#xff1a; a. 包款扫描(下划线部分)一定要加&#xff0c;默认是不扫描整个包。与每一包之间’&#xff0c;’开。如过具有同样的父包&#xff0c;那么我们能够用父包来取…

python 判断字符串时是否是json格式方法

在实际工作中&#xff0c;有时候需要对判断字符串是否为合法的json格式 解决方法使用json.loads,这样更加符合‘Pythonic’写法 代码示例&#xff1a; Python import json def is_json(myjson):try:json_object json.loads(myjson)except ValueError, e:return Falsereturn Tr…

学习笔记(17):Python网络编程并发编程-Process对象的其他属性或方法

立即学习:https://edu.csdn.net/course/play/24458/296427?utm_sourceblogtoedu 1.pid与ppid&#xff1a;pid进程编码&#xff0c;ppid进程的父进程编码&#xff1b;os.getpid()查看正在运行的进程编码&#xff0c;os.getppid()查看正在运行进程的父进程编码 2.僵尸进程&…

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!

//用弦截法求一元三次方程的根x^3-5x^216x-800 #include<stdio.h>#include<math.h> float f(float x) //定义子函数f(x) x^3-5x^216x-80&#xff0c;当f(x) →0时&#xff0c;则x即为所求的实数根&#xff1b; { float y; y((x-5.0)*x16.0)*x-80.0; …