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





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>
    
      ***************************************************************************************************
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    
  
  
  
  
  
  
  
  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值