struts2从零开始(四)

本文介绍如何使用Struts2实现文件上传功能,并详细解释了上传过程中的配置及实现代码。此外,还介绍了两种自定义类型转换器的方法及其在Struts2中的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点:1、文件上传
2、类型转换


1、文件上传:
1.1、 jsp页面代码:
<body>

<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="submit" value="上传">

</form>


</body>


1.2、 struts.xml中的代码:
<package name="mypackage" extends="struts-default">

<action name="upload" class="cn.zhuojingxinxi.web.UploadAction">
<interceptor-ref name="fileUpload"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/success.jsp</result>
<result name="input">/error.jsp</result>
</action>

</package>


1.3、 action中的代码:
package cn.zhuojingxinxi.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport{
private File photo;
private String photoFileName;
private String photoContentType;

public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}

public String getPhotoFileName() {
return photoFileName;
}

public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getPhotoContentType() {
return photoContentType;
}

public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}


public String execute(){
// System.out.println(photo.length());
// System.out.println(photoFileName);
// System.out.println(photoContentType);
String path=ServletActionContext.getServletContext().getRealPath("/");
try {
FileInputStream fis=new FileInputStream(photo);

FileOutputStream fos=new FileOutputStream(path+photoFileName);

byte[] b=new byte[512];
int length=-1;
try {
while((length=fis.read(b))!=-1){

fos.write(b, 0, length);

fos.flush();
}
fos.close();
fis.close();
} catch (IOException e) {

e.printStackTrace();
}
} catch (FileNotFoundException e) {

e.printStackTrace();
}


return null;

}

}



2、类型转换
2.1编写转换器,方式一继承DefaultTypeConverter(代码如下)
package cn.zhuojingxinxi.util;

import java.util.Map;

import cn.zhuojingxinxi.entity.Point;

import ognl.DefaultTypeConverter;

public class PointConvert extends DefaultTypeConverter{

@Override
public Object convertValue(Map context, Object value, Class toType) {


if(toType==Point.class){
System.out.println("转入");
String[] str=(String[])value;
String[] s=str[0].split(",");
Point point=new Point();
point.setPointX(Integer.parseInt(s[0]));
point.setPointY(Integer.parseInt(s[1]));
return point;

}else{
System.out.println("转出");
Point p=(Point)value;
StringBuilder sb=new StringBuilder();
sb.append(p.getPointX()+","+p.getPointY());
return sb.toString();

}

}

}

2.2、方式二继承StrutsTypeConverter(代码如下)
package cn.zhuojingxinxi.util;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import cn.zhuojingxinxi.entity.Point;

import ognl.DefaultTypeConverter;

public class PointConvert2 extends StrutsTypeConverter{


@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {

String[] str=arg1;
String [] s= str[0].split(",");
Point point=new Point();
point.setPointX(Integer.parseInt(s[0]));
point.setPointY(Integer.parseInt(s[1]));
return point;

}

@Override
public String convertToString(Map arg0, Object arg1) {
Point p=(Point)arg1;
StringBuilder sb=new StringBuilder();
sb.append(p.getPointX()+","+p.getPointY());
return sb.toString();

}

}



2.3、struts.xml中action节点的配置信息(代码如下)
 <action name="convert" class="cn.zhuojingxinxi.web.ConvertAction">
<result name="success">/success.jsp</result>
<result name="input">/error.jsp</result>
</action>


2.4、action中的代码如下:
package cn.zhuojingxinxi.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.struts2.ServletActionContext;

import cn.zhuojingxinxi.entity.Point;

import com.opensymphony.xwork2.ActionSupport;

public class ConvertAction extends ActionSupport{

private Point point=null;



public Point getPoint() {
return point;
}


public void setPoint(Point point) {
this.point = point;
}


public String execute(){

System.out.println(point.getPointX()+"==========="+point.getPointY());
return "success";

}

}



值得注意的是:

1、文件上传的时候配置 <param name="allowedTypes">text/plain,image/jpeg,image/bmp</param>可以选择默认允许上传的文件类型。
2、错误页面必须配置 <s:fielderror></s:fielderror>才能显示错误信息


源码下载请点这里:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值