现有的一个读url的方法,但是读取时,jsp页面上的session都丢失了。
-------------------------------------------------------------------------------
/**
*输入url,取到此url下的页面内容
*/
public static String getUrlContent(String strUrl)
{
try{
URL url=new URL(strUrl);
BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream()));
String s="";
StringBuffer sb=new StringBuffer("");
while((s=br.readLine())!=null)
{
sb.append(s+"\r\n");
}
br.close();
return sb.toString();
}
catch(Exception e){
return "";
}
}
-------------------------------------------------------------------------------
/**
*输入url,取到此url下的页面内容
*/
public static String getUrlContent(String strUrl)
{
try{
URL url=new URL(strUrl);
BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream()));
String s="";
StringBuffer sb=new StringBuffer("");
while((s=br.readLine())!=null)
{
sb.append(s+"\r\n");
}
br.close();
return sb.toString();
}
catch(Exception e){
return "";
}
}
----------a.jsp--------------
<%
out.print("user:" + request.getSession("user"));
%>
用户登录后,在浏览器中访问a.jsp,就会显示“user:username”,但是如果用上面的方法getUrlContent("a.jsp")去读时,就会打出"user:null"值,说明这个方法读取时的session与当前用户的session相对独立。
用什么方法可以让getUrlContent()读出和浏览器访问一样的结果呢?
设置session:
request.getSession().setAttribute("user")="username";
读session:
out.print("user:" + request.getSession().getAttribute("user"));
大致登陆流程:login.jsp --> servlet --> a.jsp应在login.jsp中设置Session的值,然后才Servlet中将该Session去出,并将输出结果在a.jsp中输出
注意,在login.jsp中表单form 的输入框字段应有name="username"这一属性,来对应你的Session名把信息说清楚些吧
getJspClinetHtml("http://xxx/a.jsp") 返回 "user:username",
直接用out输出所有的信息(包括HTML相关代码)就行了
类似于,getJspClientHtml("http://xxx/a.jsp") ,可以在系统中任何地方调用
然后在JavaScript中在提交这个form之前
var oBody = document.body;
form1.fileContext.value = oBody.innerHTML;
然后提交
在Servlet中得到fileContext的值就是页面代码了
但是有个限制就是只有<body></body>中间的代码