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>
***************************************************************************************************