码迷,mamicode.com
首页 > 编程语言 > 详细

java框架篇---struts开发

时间:2015-03-17 17:53:21      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

1.文件上传

  • 掌握Struts文件上传的基本操作原理;
  • 可以使用Struts完成文件的上传功能实现。

文件上传

在WEB项目中文件上传是一个必不可少的操作,前面介绍过两种上传组件的使用,分别是SmartUpload、FileUpload,这两种组件相比较起来SmartUpload更加的容易,而FileUpload却较为复杂,幸运的是在Struts中也对文件上传有所支持,而且上传使用的组件就是FileUpload,但是此时的使用比起直接使用FileUpload就要方便许多了。
如果要想正确的使用FileUpload组件完成操作,还需要依靠<html:file>标签完成,此标签核心语法如下所示:
<html:file property="对应ActionForm中的属性名称"/>

FormFile类的常用方法

No.

方法

类型

描述

1

public byte[] getFileData() throws FileNotFoundException,IOException

普通

取得上传文件大小

2

public InputStream getInputStream() throws FileNotFoundException,IOException

普通

取得上传文件的输入流

3

public int getFileSize()

普通

取得上传文件的大小

4

public String getFileName()

普通

取得上传文件的名称

5

public String getContentType()

普通

取得上传文件的类型

定义表单 —— upload.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://www.mldn.cn/struts/bean" prefix="bean"%>
<%@ taglib uri="http://www.mldn.cn/struts/html" prefix="html"%>
<%@ taglib uri="http://www.mldn.cn/struts/logic" prefix="logic"%>
<html:html lang="true">
<head>
    <title>文件上传</title>
</head>
<body>
    <html:form action="/ch17/upload.do" method="post" enctype="multipart/form-data">
        请选择要上传的文件;<html:file property="photo"/>
        <html:submit value="上传"></html:submit>
    </html:form>
</body>
</html:html>

定义ActionForm,接收上传文件 —— UploadForm.java

package org.lxh.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
public class UploadForm extends ActionForm {
    private FormFile photo ;            // 接收上传文件
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {        // 暂不验证
        return null;
    }
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    }
    public FormFile getPhoto() {
        return photo;
    }
    public void setPhoto(FormFile photo) {
        this.photo = photo;
    }
}

定义Action —— UploadAction.java

public class UploadAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        UploadForm uploadForm = (UploadForm) form;
        IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr()); // 自动生成文件名
        String fileName = its.getIPTimeRand()
                + "."
                + uploadForm.getPhoto().getFileName().split("\\.")[uploadForm
                    .getPhoto().getFileName().split("\\.").length - 1];// 生成文件名
        File outFile = new File(super.getServlet().getServletContext()
                .getRealPath("/") + "upload"+ File.separator
                + uploadForm.getPhoto().getFileName().split("\\."));    // 输出文件路径
        try{
            OutputStream output = new FileOutputStream(outFile) ;        // 文件输出
            byte data[] = new byte[1024] ;        // 接收文件
            int temp = 0 ;            // 结束判断
            while ((temp = uploadForm.getPhoto().getInputStream()
                    .read(data, 0, 1024)) != -1) {    // 分块保存
                output.write(data) ;            // 保存文件
            }
            output.close() ;        // 关闭输出
        }catch(Exception e){
            e.printStackTrace() ;        // 错误输出
        }
        return null;
    }
}

配置struts-config.xml文件 

<struts-config>
    <form-beans>
        <form-bean name="uploadForm" type="org.lxh.struts.form.UploadForm" />
    </form-beans>
    <action-mappings>    
        <action attribute="uploadForm" input="/upload.jsp"
            name="uploadForm" path="/upload" scope="request"
            type="org.lxh.struts.action.UploadAction" />
    </action-mappings>
</struts-config>

这样就可以很方便的完成文件上传操作。

2.怎么配置动态ActionForm?

在正常操作中,每一个Action必须对应一个ActionForm,但是这样一来就会造成ActionForm过多的情况,所以为了解决此类问题,在Struts中专门提供了动态ActionForm,以解决ActionForm过多的问题。
动态ActionForm对应的操作类是:org.apache.struts.action.DynaActionForm,使用此类时,不需要定义具体的类,只需要在struts-config.xml文件中配置即可。 

配置一个动态ActionForm,包含两个属性 —— struts-config.xml

<struts-config>
    <form-beans>
        <form-bean name="newsForm" 
            type="org.apache.struts.action.DynaActionForm">
            <form-property name="title" type="java.lang.String">
            </form-property>
            <form-property name="content" type="java.lang.String">
            </form-property>
        </form-bean>
    </form-beans>
    <action-mappings>    
        <action attribute="newsForm" input="/ch17/news.jsp"
            name="newsForm" path="/ch17/news" scope="request"
            type="org.lxh.struts.action.NewsAction" />
    </action-mappings>
</struts-config>

定义输入表单 —— news.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://www.mldn.cn/struts/bean" prefix="bean"%>
<%@ taglib uri="http://www.mldn.cn/struts/html" prefix="html"%>
<%@ taglib uri="http://www.mldn.cn/struts/logic" prefix="logic"%>
<html:html lang="true">
<head>
    <title>动态actionForm</title>
</head>
<body>
    <html:form action="/ch17/news.do" method="post">
        标题:<html:text property="title"/><br>
        内容:<html:text property="content"/><br>
        <html:submit value="提交"/><html:reset value="重置"/>
    </html:form>
</body>
</html:html>

接收参数 —— NewsAction.java

package org.lxh.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
public class NewsAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        DynaActionForm dynaForm = (DynaActionForm) form ;
        String title = dynaForm.getString("title") ;    // 取得title输入内容
        String content = dynaForm.getString("content") ;    // 取得content输入内容
        System.out.println("title --> " + title) ;        // 输出title内容
        System.out.println("content --> " + content);    // 输出content内容
        return null;
    }
}
动态ActionForm依靠配置完成,可以解决ActionForm过多的问题,但是ActionForm本身依然属于Struts的最大弱点。

java框架篇---struts开发

标签:

原文地址:http://www.cnblogs.com/oumyye/p/4344867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!