问题是这样的:在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("/"); 我设置了后 没见效果..
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("/"); 我设置了后 没见效果..
// 获得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的问题.......
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 省略.....
}