当我用javaweb上传文件的时候,不想上传到tomcat的webapp下对应的项目中,因为当我重新发布的时候,就会所有文件全部不见了,因此可以通过文件服务器来上传文件。
(一)在myeclipse中导入上传下载jar包、struts的jar包
(1)下载Common-FileUplaod框架地址:
http://jakarta.apache.org/commons/fileupload/,下载commons-fileupload-1.2-bin.zip文件,解压后得到commons-fileupload-1.2.jar。
(2)http://jakarta.apache.org/commons/io/,下载commons-io-1.3.2-bin.zip文件,解压后得到commons-io-1.3.2.jar。
(二)创建index.jsp,首先要import导入java.net.InetAddress和java.util.,把form表的enctype设置为:“multipart/form-data“,修改action跳转。
(1)说明:关于pageContext.request.contextPath
${pageContext.request.contextPath}/helloworld.action
${pageContext.request.contextPath}等价于
<%=request.getContextPath()%> 或者可以说是<%=request.getContextPath()%>的EL版,意思就是取出部署的应用程序名或者是当前的项目名称。比如我的项目名称是ajax01 在浏览器中输入为http://localhost:8080/ajax01/login.jsp,${pageContext.request.contextPath}或<%=request.getContextPath()%>
取出来的就是/ajax01,而"/"代表的含义就是http://localhost:8080
代码:“${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。
缺点:操作不便,其他工具无法正确解释。
所以我们项目中可以这样写:
${pageContext.request.contextPath}/login.jsp
如下:
<%@ page language="java"import="java.util.*,java.net.InetAddress"pageEncoding="utf-8"%>
<% String path =request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()++path+"/";%>
<%-- 去掉bashepath后边的path,默认是项目名称 --%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 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"