struts2.0(40-50)

 

<action name="register" class="com.test.action.RegisterAction" method="test">

           <result name="success">/success.jsp</result>

           <result name="input">/register2.jsp</result>

           <!-- 增加攔截器或用棧也行 -->

           <interceptor-ref name="auth"></interceptor-ref>

           <interceptor-ref name="defaultStack"></interceptor-ref>

       </action>

 

 

文件上傳和下載:

 

頁面: enctype默認是字符串提交

<form action="result.jsp" method="post" enctype="multipart/form-data">

   

    Information: <input type="text" name="info"><br>

    File: <input type="file" name="file"><br>

   

    <input type="submit" name="submit" value=" submit ">

   

    </form>

 

result.jsp:

<body>

<%

    InputStream is = request.getInputStream();

 

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

   

    String buffer = null;

   

    while((buffer = br.readLine()) != null)

    {

       out.print(buffer + "<br>");    

    }

%>

</body>

 

文件上傳會遇到攔截器:一種是不用struts的包.註釋web.xml

<!-- 

    <filter>

       <filter-name>struts2</filter-name>

       <filter-class>

           org.apache.struts2.dispatcher.FilterDispatcher

       </filter-class>

    </filter>

 

    <filter-mapping>

       <filter-name>struts2</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

 

-->

 

</web-app>

 

 

URL解碼:

public class DecoderTest

{

 

    public static void main(String[] args)throws Exception

    {

       String str = "C%3A%5CDocuments+and+Settings%5Czhanglong%5C%D7%C0%C3%E6%5CNOTICE.txt";

      

       String result = URLDecoder.decode(str,"gbk");

      

       System.out.println(result);

    }

 

}

 

 

Struts文件上傳(apche 方式)

加入包:

commons-fileupload-1.2.1.jar

commons-io-1.4.jar

 

頁面:

<form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data">

 

username: <input type="text" name="username"><br>

 

password: <input type="password" name="password"><br>

 

file1: <input type="file" name="file1"><br>

 

file2: <input type="file" name="file2"><br>

 

<input type="submit" value="submit">

 

</form>

 

建立servelet

package com.test.servlet;

 

import java.io.File;

import java.io.IOException;

import java.util.List;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

 

public class UploadServlet extends HttpServlet

{

 

    @SuppressWarnings("unchecked")

    public void doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException

    {

       //創建工廠

       DiskFileItemFactory factory = new DiskFileItemFactory();

       String path = request.getRealPath("/upload");

        //設置臨時存儲目錄

       factory.setRepository(new File(path));

        //設置超出大小,小於超出大小就放到內存,否則建立臨時文件存放

       factory.setSizeThreshold(1024 * 1024);//1M

        //處理上傳

       ServletFileUpload upload = new ServletFileUpload(factory);

       try

       {

           //接受傳送信息

           List<FileItem> list = upload.parseRequest(request);

 

           for (FileItem item : list)

           {

              //判斷是否是文件類型

              if (item.isFormField())

              {

                  String name = item.getFieldName();

 

                  String value = item.getString("gbk");

 

                  System.out.println(name);

 

                  request.setAttribute(name, value);

              }

              else//文件類型的操作

              {

                  String name = item.getFieldName();

                    //File表單的路徑

                  String value = item.getName();

 

                  int start = value.lastIndexOf("//");

 

                  String fileName = value.substring(start + 1);

                    //處理名稱

                  request.setAttribute(name, fileName);

                  //處理流

                  item.write(new File(path,fileName));

                 

 

//                OutputStream os = new FileOutputStream(new File(path,

//                       fileName));

//

//                InputStream is = item.getInputStream();

//

//                byte[] buffer = new byte[400];

//

//                int length = 0;

//

//                while ((length = is.read(buffer)) > 0)

//                {

//                   os.write(buffer, 0, length);

//                }

//

//                os.close();

//

//                is.close();

 

              }

           }

 

       }

 

       catch (Exception ex)

       {

           ex.printStackTrace();

       }

       request.getRequestDispatcher("upload/result2.jsp").forward(request,

              response);

 

    }

 

}

接收流:

<body>

 

<form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data">

 

username: <input type="text" name="username"><br>

 

password: <input type="password" name="password"><br>

 

file1: <input type="file" name="file1"><br>

 

file2: <input type="file" name="file2"><br>

 

<input type="submit" value="submit">

 

</form>

 

Struts文件上傳(struts2 方式)

提交頁面:

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

   

<%@ taglib prefix="s" uri="/struts-tags" %>

   

<!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=GB18030">

<title>Insert title here</title>

 

<script type="text/javascript">

 

function addMore()

{

    var td = document.getElementById("more");

   

    var br = document.createElement("br");

    var input = document.createElement("input");

    var button = document.createElement("input");

   

    input.type = "file";

    input.name = "file";

   

    button.type = "button";

    button.value = "Remove";

   

    button.onclick = function()

    {

       td.removeChild(br);

       td.removeChild(input);

       td.removeChild(button);

    }

   

    td.appendChild(br);

    td.appendChild(input);

    td.appendChild(button);

   

}

 

</script>

 

</head>

 

<body>

 

    <table align="center" width="50%">

           <tr>

              <td>

 

                  <s:fielderror cssStyle="color:red" />

 

              </td>

           </tr>

       </table>

 

 

       <s:form action="upload" theme="simple" enctype="multipart/form-data">

 

           <table align="center" width="50%" border="1">

              <tr>

                  <td>

                     username

                  </td>

                  <td>

                     <s:textfield name="username"></s:textfield>

                  </td>

              </tr>

 

              <tr>

                  <td>

                     password

                  </td>

                  <td>

                     <s:password name="password"></s:password>

                  </td>

              </tr>

 

 

              <tr>

                  <td>

                     file

                  </td>

             <!—多文件文件name要是一樣的-->

                  <td id="more">

                     <s:file name="file"></s:file><input type="button" value="Add More.." onclick="addMore()">

                  </td>

              </tr>

             

              <tr>

                  <td>

                     <s:submit value=" submit "></s:submit>

                  </td>

 

                  <td>

                     <s:reset value=" reset "></s:reset>

                  </td>

              </tr>

           </table>

 

       </s:form>

 

</body>

 

</html>

 

 

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

<!—全局屬性的設置都在struts核心包裏的default.properties;結果類型和攔截器都在struts-default.xml -->

    <!-- 國際化資源文件 -->

    <constant name="struts.custom.i18n.resources" value="message"></constant>

    <!-- 解決亂碼問題 -->

    <constant name="struts.i18n.encoding" value="gbk"></constant>

    <!-- 設置臨時目錄 -->

    <constant name="struts.multipart.saveDir" value="c:/"></constant>

   

    <package name="struts2" extends="struts-default">

      

       <global-results>

           <result name="login" type="redirect">/login2.jsp</result>

       </global-results>

 

       <action name="upload" class="com.test.action.UploadAction">

           <result name="success">/uploadResult.jsp</result>

           <result name="input">/upload.jsp</result>

    <!-- 應用內置攔截器,攔截非法文件,最大大小,和文件類型 -->

           <interceptor-ref name="fileUpload">

              <param name="maximumSize">409600</param>

               <param name="allowedTypes">application/vnd.ms-powerpoint</param>

           </interceptor-ref>

           <interceptor-ref name="defaultStack"></interceptor-ref>

       </action>

      

    </package>

 

</struts>

上傳AcTION

 

package com.test.action;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.List;

 

import org.apache.struts2.ServletActionContext;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class UploadAction extends ActionSupport

{

    private String username;

 

    private String password;

//要是單文件使用private File file;也可以使用數組的形式File[] file

 

    private List<File> file;

  //namestruts2裏面的匹配格式文件名稱+FileName,類型也一樣,然後被自動注入進來

    private List<String> fileFileName;

 

    private List<String> fileContentType;

生成getset方法

   

    @Override

    public String execute() throws Exception

    {

//要是單文件使用去掉for循環

 

       for (int i = 0; i < file.size(); ++i)

       {

//要是單文件使用InputStream is = new FileInputStream(file);

 

           InputStream is = new FileInputStream(file.get(i));

 

           String root = ServletActionContext.getRequest().getRealPath(

                  "/upload");

//要是單文件使用his.getFileFileName()

           File destFile = new File(root, this.getFileFileName().get(i));

 

           OutputStream os = new FileOutputStream(destFile);

 

           byte[] buffer = new byte[400];

 

           int length = 0;

 

           while ((length = is.read(buffer)) > 0)

           {

              os.write(buffer, 0, length);

           }

 

           is.close();

 

           os.close();

       }

 

       return SUCCESS;

 

接收頁面uploadResult.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

<body>

username: <s:property value="username"/><br>

 

password: <s:property value="password"/><br>

 

file: <s:property value="fileFileName"/>

</body>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章