1、一个是传统的servlet包下的HttpSession,一个是Structs2中自己定义的Session

Servlet下的Session获取方法:ServletActionContext.getRequest().getSession(),需要servlet-api.jar包

2、Structs中的Session获取方法:Map m=ActionContext.getContext().getSession(),session以Map类的形式,其中值和HttpSession中的值是同步的。

package com.demo.action;

import java.util.Map;

import com.demo.Model.Product;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ProductAction extends ActionSupport {
    private Product product;

    public String show() {
        product = new Product();
        product.setName("iphone7");
        return "show";
    }

    public String add() {
    //通过session把name放进去
        Map m = ActionContext.getContext().getSession();
        m.put("name", product.getName());
        return "show";
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }
}

3、在show.jsp中通过EL表达式把session中的数据取出来

<%@page isELIgnored="false"%>
 
${product.name}
 
${name}<!--EL表达式可以直接从session中数据取出来-->

二、文件上传

1、准备upload.jsp

上传文件一定要为form表单加上enctype="multipart/form-data",表示提交的数据是二进制的,并且必须是method="post"

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8" isELIgnored="false"%>
 
<%@page isELIgnored="false" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
 
<html>
<body>

<form action="upload" method="post" enctype="multipart/form-data">

  上传文件 : <input type="file" name="doc" /> <br> 

    <!--使用structs的s:file标签表示上传文件框,name使用doc会和服务端的相应的代码匹配-->
    上传文件2:<s:file name="doc" label="upload"/>
  <input type="submit" value="上传">
</form>

</body>
</html>

2、准备UploadAction

由于在upload.jsp中file字段对应的name是doc,在Action中,必须准备三个属性:File doc;   String docFileName;  String docContentType;属性名字不能使用其他的,只能基于doc

package com.demo.action;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.structs2.ServletActionContext;

public class UploadAction{
    File doc;
    String docFileName;
    String docContentType;
    
    //属性的getter/setter方法
    public File getDoc(){
        return doc;
    }
    public void setDoc(File doc){
        this.doc=doc;
    }
    public String getDocFileName(){
        return docFileName;
    }
    public void setDocFileName(String docFileName){
        this.docFileName=docFileName;
    }
    public String getDocContentType(){
        return docContentType;
    }
    public void setDocContentType(String docContentType){
        this.docContentType=docContentType;
    }
    
    public String upload(){
        System.out.println(doc);
        System.out.println(docFileName);
        System.out.println(docContentType);
        return "success";
    }
}
View Code

相关文章: