您的位置:首页 > 编程语言 > Java开发

struts2_04 常见servlet对象的获取,文件上传

2015-12-16 16:39 525 查看
1、 常用Servlet对象的获取

public class ScopeAction extends ActionSupport implements Serializable {

// 向各大域范围存放点数据

@Override

public String execute() throws Exception {

// 这个就是ServletRequest中维护的map ServletRequest.setAttribute(key,value);

ActionContext ac = ActionContext.getContext();

ac.put("p","request_p");

// 这个就是ServletContext对象中维护的map ServletContext.setAttribute(key,value);

Map<String, Object> applicationMap = ac.getApplication();

applicationMap.put("p","application_p");

// 这个就是HttpSession对象中维护的map 相当于 HttpSession.setAttribute(key,value);

Map<String,Object> sessionMap = ac.getSession();

sessionMap.put("p","session_p");

return super.execute();

}

}

<body>

请求范围:${requestScope.p } <br/><br/>

会话范围:${sessionScope.p } <br/><br/>

应用范围:${applicationScope.p}

</body>

2. 演示servlet中常用对象的引用

public class WebObjAction extends ActionSupport implements Serializable,

ServletContextAware, ServletRequestAware, ServletResponseAware {

// 方式1: 常用

public String execute1() {

ServletContext sc = ServletActionContext.getServletContext();

System.out.println(sc);

ServletRequest request = ServletActionContext.getRequest();

System.out.println(request);

return SUCCESS;

}

// 方式2:通过实现不同的接口,实现不同的方法来创建servlet对象

private ServletContext context;

private HttpServletRequest request;

private HttpServletResponse response;

// 实现ServletContextAware接口,覆盖其setServletContext()方法

// 注: 如果动作类实现了该接口,就会自动调用该方法

public void setServletContext(ServletContext context) {

this.context = context;

}

// 实现ServletRequestAware接口,覆盖其setServletRequest()方法

// 注: 如果动作实现了该接口,就会自动调用该方法

public void setServletRequest(HttpServletRequest request) {

this.request = request;

}

// 实现ServletResponseAware接口,覆盖其setServletResponse()方法

// 注: 如果动作实现了该接口,就会自动调用该方法

public void setServletResponse(HttpServletResponse response) {

this.response = response;

}

public String execute2() {

System.out.println(context);

System.out.println(request);

System.out.println(response);

return SUCCESS;

}

}

3. struts2的文件上传

注: 自定义设置上传文件的总文件大小

<struts>

<constant name="struts.multipart.maxSize" value="5242880"></constant>

</struts>

1. 单个文件的上传

***************************************************************************************************

Action类:

public class UploacAction1 extends ActionSupport implements Serializable {

// 对应的是表单上传域名称 struts2框架会自动将表单中的字符串封装成File类型的文件

private File image;

// 格式: 表单上传域名称+FileName struts2框架封装好的文件名称

private String imageFileName;

// 格式: 表单上传域名称+ContentType struts2框架封装好的文件MIME类型

private String imageContentType;

// set/get属性

public String execute(){

try {

// 找到文件存储的真实路径

ServletContext sc = ServletActionContext.getServletContext();

String storePath = sc.getRealPath("files");

// 构件输入输出流

// OutputStream out = new FileOutputStream(storePath+"//"+imageFileName);

// InputStream in = new FileInputStream(image);

// int len = 0;

// byte[] b = new byte[1024];

// while((len=in.read(b))!=-1){

// out.write(b, 0, len);

// }

// out.close();

// in.close();

// 注: 上面的构建输入输出流的代码由org.apache.commons.io.FileUtils的copyFile(文件,new File(路径))方法封装好了

FileUtils.copyFile(image, new File(storePath+"//"+imageFileName));

ActionContext.getContext().put("message", "文件上传成功!");

return SUCCESS;

} catch (Exception e) {

e.printStackTrace();

return ERROR;

}

}

}

表单页面:

<body>

<!-- 访问地址: http://localhost:8080/struts2day02/upload/upload1.jsp -->

<form action="${pageContext.request.contextPath}/upload/upload1.action" enctype="multipart/form-data" method="post">

文件: <input type="file" name="image" /> <br/><br/>

<input type="submit" value="上传" />

</form>

</body>

***************************************************************************************************

2. 多个文件的上传

***************************************************************************************************

Action类:

public class UploacAction2 extends ActionSupport implements Serializable {

private File[] images;

private String[] imagesFileName;

// set/get属性

public String execute(){

try {

ServletContext sc = ServletActionContext.getServletContext();

String storePath = sc.getRealPath("files");

if(images!=null&&images.length>0){

for(int i=0; i<images.length; i++){

FileUtils.copyFile(images[i], new File(storePath+"\\"+imagesFileName[i]));

}

}

ActionContext.getContext().put("message", "多个文件上传成功!");

return SUCCESS;

} catch (Exception e) {

e.printStackTrace();

return ERROR;

}

}

}

表单页面:

<body>

<!-- 访问地址: http://localhost:8080/struts2day02/upload/upload2.jsp -->

<form action="${pageContext.request.contextPath}/upload/upload2.action" enctype="multipart/form-data" method="post">

文件1: <input type="file" name="images" /> <br/><br/>

文件2: <input type="file" name="images" /> <br/><br/>

文件3: <input type="file" name="images" /> <br/><br/>

<input type="submit" value="上传" />

</form>

</body>

***************************************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: