问题是这样的:在a.jsp里面,是输入框,点击下面的button,转到Action里面处理业务逻辑,将传来的值写入cookie,然后在B.jsp里面调出cookie,读取相应的值,程序在A.jsp里面增删查改都正常,在B.jsp里面则读取不到,谁比较熟悉这个帮我看一下,A.jsp的逻辑代码如下public class PrintAction extends ActionSupport implements CookiesAware{         private static final String COOKIE_NAME = "print_sai";
private PrintModifyDto printModifyDto;

private String contractType;
private float leftOffset;
private float topOffset;
//.....get set 方法......
         public String execute1() throws Exception {

HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
UserDto user = (UserDto) session.getAttribute("User");//通过用户查找支持的卡单类别  暂留用

PrintModifyDto printModifyDto = new PrintModifyDto();
if(contractType!=null)
printModifyDto.setContractType(contractType);
if(printer!=null)
printModifyDto.setPinter(printer);
if(leftOffset!=0){
printModifyDto.setLeftOffset(leftOffset);
}else{
printModifyDto.setLeftOffset(0);
}
if(topOffset!=0){
printModifyDto.setTopOffset(topOffset);
}else{
printModifyDto.setTopOffset(0);
}

String requestType = request.getParameter("submit");
if(requestType.equalsIgnoreCase("修改")){
 modifyOffset(printModifyDto);
}else if(requestType.equalsIgnoreCase("增加")){
addOffset(printModifyDto);
}else if(requestType.equalsIgnoreCase("清除选定")){
//清除选定键值对   
delOffset();
}else if(requestType.equalsIgnoreCase("清除全部")){
//清除全部  貌似最好不用的
delCookie(COOKIE_NAME);
}else{
//reset  DO NOTHING 
}
return "SUCCESS";
}public boolean modifyOffset(PrintModifyDto printModifyDto) throws Exception {

HttpServletResponse response = ServletActionContext.getResponse();

// 新增一个同名的cookie 将要修改的添加 其余拷贝自原来  覆盖掉原来的cookie
Cookie cookie = getCookie(COOKIE_NAME); //必须执行的一句
String cookieValue =new String();
cookieValue = resolvCookieInfo(cookie, printModifyDto);
System.out.println("----------------完成后----------------------");
System.out.println(cookieValue);

Cookie cookie2 =new Cookie(COOKIE_NAME,java.net.URLEncoder.encode(cookieValue,"gbk"));
cookie2.setMaxAge(Integer.MAX_VALUE);
cookie2.setPath("/");
cookie.setDomain("localhost:8080");
response.addCookie(cookie2); return true;
}         private Cookie getCookie(String cookieName) throws Exception {

HttpServletRequest request = ServletActionContext.getRequest();

Cookie[] cookies = request.getCookies();
String defaulValue =contractType+"\n"+printer+"\n"+leftOffset+"\n"+topOffset+"*";

if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName() != null && cookie.getName().trim().equals(cookieName)) {
//在已有cookie中存在指定名字的cookie  则返回该cookie
return cookie;
}else{//在已有cookie中不存在指定名字的cookie 生成该名称的cookie
return creatCookie(COOKIE_NAME,defaulValue);
}
}
}else {//不存在cookie  生成该名称cookie
return creatCookie(COOKIE_NAME,defaulValue);
}

return null;
}private Cookie creatCookie(String cookieName,String defaulValue) throws Exception{ //建立新的Cookie
Cookie cookie = new Cookie(cookieName,java.net.URLEncoder.encode(defaulValue,"gbk"));
//该cookie 永久有效
cookie.setMaxAge(Integer.MAX_VALUE);
cookie.setPath("/");
return cookie;
}
//....其他增加等操作获取cookie的方式相同
}看网上说要设置cookie.setPath("/");  我设置了后 没见效果..

解决方案 »

  1.   

    在同一个Action里面的public PrintModifyDto findOffset(String contractType, String printer)throws Exception {
    // 获得cookie
    Cookie cookie = getCookie(COOKIE_NAME);
    // 解析cookie
    return parseCookieInfo(java.net.URLDecoder.decode(cookie.getValue(),"gbk"), contractType, printer);
    }
    //
    public PrintModifyDto findOffset(String contractType, String printer,HttpServletRequest request)throws Exception {
    // TODO Auto-generated method stub // 获得cookie
    Cookie cookie = getCookie(COOKIE_NAME,request);
    // 解析cookie
    return parseCookieInfo(java.net.URLDecoder.decode(cookie.getValue(),"gbk"), contractType, printer);
    }老觉的取不到值的原因是两个页面用的不是同一request的问题.......
      

  2.   


    public class PrintModifyDto implements Serializable{ private static final long serialVersionUID = -6576997812272154205L;

    private String ContractType;
    private String pinter;
    private float leftOffset;
    private float topOffset;// get  set 省略.....
    }

      

  3.   

    还真有点不想看,首先cookie和request没有必然联系,信息写进了cookie就成了临时文本,只要不关浏览器在一定时间内不会消失(当然除非你删除cookie),所以读不到可能有地方删除了cookie,或者key值不对