实现浏览器上的一个功能,无法解决

haoweishow01 2009-09-04 05:50:17
想实现的功能就是,该桌面应用 可以访问网页,能够获取网页上的信息,现在可以直接读取该叶面,并将网页的源文件读

到。还有个功能是:比如说一个注册页面,上面有个form表单,有action的配置,我现在的程序可以直接通过该action的配

置,比如说: http://www.xxxxx.com/register?name=123&&password=369程序可以直接发送这样的请求,就可以完成注册功能。

但是现在我的功能不只这样,比如我发送一个http://www.xxxxx.com/listAll的请求想返回一些信息,但是这样的话只能得到

String 类型的信息,也就是说服务器返回来的数据我还是只能当作读取叶面一样来处理。因此获取到的数据还是string的。

我就想实现那个类似浏览器的功能,最重要的是session的功能,这样我服务器端可以返回更多的数据(更多的对象)给我自己的客户端。

我做这个没别的恶意想法,希望大家能够帮帮我。

或者提供一些解决这样问题的思路,其实我自用文字描述起来都比较困难,不知道各位能否理解。
...全文
373 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoweishow01 2009-09-13
  • 打赏
  • 举报
回复
感谢大家的回复,从你们的回复中,我学到了不少东西。

对于前面谈到的我最初的目的是这样的。
我想做一个数据库存储的东西,放在免费的服务器上(googleappengine)。然后别的web应用,可以给我的系统发送servlet请求,可以完成数据的存储,数据的存储我是通过form表单传递参数的。参数传递到我的系统中,我获取参数然后存储。

最关键的是在外部系统访问我的数据存储系统是,获取数据的时候,因为我的数据存储系统返回的只能是字符流(不知道这样说正确不)。开始的想法是在我的系统中,将数据组装好到String中,然后发送给者求着,但是在请求者这边,小的数据还好,数据多了处理起来就比较麻烦了。

第二想法是,在服务端将对象序列化,然后把序列化后的数据发送出来,在请求者这里反序列化。这个没成功。

第三个想法是这样的,通过一个开源的项目Digester.在服务端把Java对象转换成xml格式,然后发送给请求者,请求者在它这里将该xml文件在转换成Java对象。还没有开始实现,也不知道能否实现。




冰思雨 2009-09-11
  • 打赏
  • 举报
回复
首先楼主要弄清楚,客户端是没有Session.Attribute一说的,客户端严格来说,只保存Cookie。
Cookie里面有本次会话的SessionId,与服务端每次的交互,也是通过这个SessionId来唯一标示
某个客户端的。
至于那个Session.Attribute,是保存在服务端的数据,除非服务端把相关的数据写入到客户端的
Cookie里面,否则,客户端是无法直接拿到这些数据的(当然,直接显示到页面上这种情况除外)。
服务端每次交互,是通过客户端每次传过来的SessionId来识别是那个客户端的会话,然后,通过这
个SessionId再找到对应的Session对象,并且在程序上,也会传递到Servlet、JSP的上下文环境中
以方便编程。
HTTPClient默认情况是自动维持这个SessionId的,也就是说,每次向服务端提交请求,都会自动的
将Coockie中的SessionId传递个服务端。所以不必过于担心这些。
其他的操作也非常简单,google一下,网上相关的代码多得是。
平淡面对 2009-09-10
  • 打赏
  • 举报
回复
其实lz的问题用json对象就可以很容易的解决。
24K純帥 2009-09-09
  • 打赏
  • 举报
回复
好复杂。。
haoweishow01 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 popfei3707 的回复:]
Java codepublicclass test {
URL url;
String parameters;
HttpURLConnection conn;
Permission prm;public String login(String url,String parameters)throws IOException{this.url=new URL(url)¡­
[/Quote]
明白你的意思,这样做可以通过程序控制浏览网页的行为。就象你的例子一样,可以发贴。但是我更想实现的功能是,服务端能返回给用户一个对象,这样可以方便用户来进行后面的操作。

是否可以在服务端将对象序列化,然后printwriter 的write(byte)方法返回给客户端,再客户端进行反序列化,这样是否能得到对象呢?
popfei3707 2009-09-06
  • 打赏
  • 举报
回复
public class test {
URL url;
String parameters;
HttpURLConnection conn;
Permission prm;
public String login(String url,String parameters) throws IOException{

this.url=new URL(url);
this.parameters=parameters;
conn=(HttpURLConnection) this.url.openConnection();

conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(false);
//conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("User-Agent","Internet Explorer");

BufferedOutputStream buf=new BufferedOutputStream(conn.getOutputStream());
buf.write(parameters.getBytes(),0, parameters.length());
buf.flush();
buf.close();

String cookie=conn.getHeaderField("Set-Cookie");
String sessionId=cookie.substring(0, cookie.indexOf(";"));
System.out.println("sessionId:"+sessionId);


conn.disconnect();
return sessionId;
}


public void publish(String cookie,String url,String parameters) throws IOException{
this.url=new URL(url);
this.parameters=parameters;
conn=(HttpURLConnection) this.url.openConnection();


conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.addRequestProperty( "Cookie", cookie);
this.parameters=parameters;

BufferedOutputStream buf=new BufferedOutputStream(conn.getOutputStream());
buf.write(parameters.getBytes("UTF-8"),0, parameters.length());
buf.flush();
buf.close();

conn.disconnect();
}



public static void main(String[] args) {
test push = new test();
try {
//登陆并获取sessionid
String cookie=push.login("http://10.220.11.62/TMBGWeb/validate.jsp","username=lufei");
/*将sessionid,写到head的cookie属性中,保持会话,然后做你想做的操作,我下面做的是在一个论坛发布一篇文章
*我写的publish方法,cookie代表sesionid,第二个参数是代表,
*你要访问的地址即action地址,第三个参数:就是你要post的参数用&符号连接起来*/
push.publish(cookie,"http://10.220.11.62/TMBGWeb/sysadmin.do?&event=savePublicNotice"
,"title=小明的一天" +
"¬icetype=班组动态" +
"&status=评选中" +
"&order_by=3" +
"&summary=enen" +
"&content=随便写点内容");

} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}

}
popfei3707 2009-09-06
  • 打赏
  • 举报
回复
呵呵,这个问题啊,我上周刚做过这个联系,给你个我写的例子.
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.Permission;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

public class test {
URL url;
String parameters;
HttpURLConnection conn;
Permission prm;
public String login(String url,String parameters) throws IOException{

this.url=new URL(url);
this.parameters=parameters;
conn=(HttpURLConnection) this.url.openConnection();

conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(false);
//conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("User-Agent","Internet Explorer");

BufferedOutputStream buf=new BufferedOutputStream(conn.getOutputStream());
buf.write(parameters.getBytes(),0, parameters.length());
buf.flush();
buf.close();

String cookie=conn.getHeaderField("Set-Cookie");
String sessionId=cookie.substring(0, cookie.indexOf(";"));
System.out.println("sessionId:"+sessionId);


/***************************************
//读出流数据并打印出来
ByteArrayOutputStream baos =new ByteArrayOutputStream();
InputStream in=conn.getInputStream();
byte[] buff=new byte[1024];
int len =-1;
while((len=in.read(buff))!=-1){
baos.write(buff,0,len);
}
String result = new String(baos.toByteArray());
in.close();
baos.close();


System.out.println("登陆返回HTTP状态码:"+conn.getResponseCode());
System.out.println("result:"+result);
*************************************/

conn.disconnect();
return sessionId;
}


public void publish(String cookie,String url,String parameters) throws IOException{
this.url=new URL(url);
this.parameters=parameters;
conn=(HttpURLConnection) this.url.openConnection();


conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.addRequestProperty( "Cookie", cookie);
//conn.setInstanceFollowRedirects(true);
this.parameters=parameters;

BufferedOutputStream buf=new BufferedOutputStream(conn.getOutputStream());
buf.write(parameters.getBytes("UTF-8"),0, parameters.length());
buf.flush();
//buf.close();

/*******************************************/
ByteArrayOutputStream baos =new ByteArrayOutputStream();
InputStream in=conn.getInputStream();
byte[] buff=new byte[1024];
int len =-1;
while((len=in.read(buff))!=-1){
baos.write(buff,0,len);
}
String result = new String(baos.toByteArray());
in.close();
baos.close();
System.out.println("发布返回HTTP状态码:"+conn.getResponseCode());
System.out.println("result:"+result);
/***************************************/
//System.out.println("发布返回HTTP状态码:"+conn.getResponseCode());
conn.disconnect();
}



public static void main(String[] args) {
test push = new test();
try {
String cookie=push.login("http://10.220.11.62/TMBGWeb/validate.jsp","username=lufei");

push.publish(cookie,"http://10.220.11.62/TMBGWeb/sysadmin.do?&event=savePublicNotice"
,"title=小明的一天" +
"¬icetype=班组动态" +
"&status=评选中" +
"&order_by=3" +
"&summary=enen" +
"&content=随便写点内容");

} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}

}
jayqean 2009-09-06
  • 打赏
  • 举报
回复
来看下!
haoweishow01 2009-09-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 norwolfli 的回复:]
服务器也就是tomcat或者jboss一类的支持servlet和jsp的服务器解析servlet和jsp,产生html字节流response给浏览器,浏览器解析的是html和js.

浏览器所接收到的消息体就是 右键-->查看源代码 显示的文本.根本就没得到什么对象.
[/Quote]

明白你的意思了,JSP响应的页面其实都是在服务器上做好了才发给浏览器的,发给浏览器的也就是一些html代码,这些代码交给浏览器来解析,然后浏览器还原出整个页面。
南南北北 2009-09-06
  • 打赏
  • 举报
回复
服务器也就是tomcat或者jboss一类的支持servlet和jsp的服务器解析servlet和jsp,产生html字节流response给浏览器,浏览器解析的是html和js.

浏览器所接收到的消息体就是 右键-->查看源代码 显示的文本.根本就没得到什么对象.
haoweishow01 2009-09-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 norwolfli 的回复:]
引用 15 楼 haoweishow01 的回复:
我的描述有些混乱,好了现在我们撇开sesssion ,cookies不谈。

就说我想实现的功能:比如我的页面端发一个查询的请求,服务器端查询数据库,数据保存在一个list里,然后我的页面端要获取这个list对象,J2EE的做法很明显,服务端用session.setAttribute(......);在页面端用session.getAttribute(...)就可以获取了。
这个动作大家都明白吧。

我的功能其实跟浏览器的差不多,但我需要的不是一个浏览器。


不用想了,你不可能得到session,也得不到对象,你得到的就是html代码.可以看一看http协议,了解一下请求与响应.
[/Quote]

那JSP的那种实现方法是怎么做到的?IE浏览器是如何实现的,协议方面我不懂,但是任何一个浏览器都能得到对象呢?
南南北北 2009-09-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 haoweishow01 的回复:]
我的描述有些混乱,好了现在我们撇开sesssion ,cookies不谈。

就说我想实现的功能:比如我的页面端发一个查询的请求,服务器端查询数据库,数据保存在一个list里,然后我的页面端要获取这个list对象,J2EE的做法很明显,服务端用session.setAttribute(......);在页面端用session.getAttribute(...)就可以获取了。
这个动作大家都明白吧。

我的功能其实跟浏览器的差不多,但我需要的不是一个浏览器。
[/Quote]

不用想了,你不可能得到session,也得不到对象,你得到的就是html代码.可以看一看http协议,了解一下请求与响应.
ddyouyue 2009-09-06
  • 打赏
  • 举报
回复
java对象序列化技术
haoweishow01 2009-09-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sgcl 的回复:]
httpclient在clinet端,所以session的内容是用cookies来维护的。httpclient的缺省配置可以帮你维持cookies,不需要特别的配置。
[/Quote]

看到HttpClient的示例代码里有关于cookies的操作,我想问下,是不是服务器端进行:session.setAttribute("list",list);这样的操作之后,IE拿到的返回页面里,这个session就被cookies维护着?session里的list对象也是可以通过cookies获取到?
平淡面对 2009-09-05
  • 打赏
  • 举报
回复
httpclient在clinet端,所以session的内容是用cookies来维护的。httpclient的缺省配置可以帮你维持cookies,不需要特别的配置。
haoweishow01 2009-09-05
  • 打赏
  • 举报
回复
用Session的想法是这样的,在服务器端可以将对象保存在session里。

ArrayList list = new ArrayList();
list.add(...);
list.add(...);
list.add(...);
HttpSession session = request.getSession();
session.setAttribute("list",list);


在页面端可以通过ArrayList list = (ArrayList)session.getAttribute("list");
这样来获取该对象。

HttpClient怎么才能完成这样的功能呢?在这里session和cookies应该没啥关系吧?
wxzyydy 2009-09-05
  • 打赏
  • 举报
回复
帮楼主顶顶,顺便拿点分,谢谢。呵呵
haoweishow01 2009-09-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 preferme 的回复:]
用HttpClient吧,它能方便的模仿浏览器的一些功能,尤其是Session的保持和Coockie的处理。
[/Quote]
我用了一下HttpClient,可是Session的功能就是没找到,就缺这个??

麻烦你能详细说一下怎么用吗?或者指点一。

感激不尽
haoweishow01 2009-09-05
  • 打赏
  • 举报
回复
我的描述有些混乱,好了现在我们撇开sesssion ,cookies不谈。

就说我想实现的功能:比如我的页面端发一个查询的请求,服务器端查询数据库,数据保存在一个list里,然后我的页面端要获取这个list对象,J2EE的做法很明显,服务端用session.setAttribute(......);在页面端用session.getAttribute(...)就可以获取了。
这个动作大家都明白吧。

当然现在HttpClient或者Java自己的HTTPURLClient都可以获取到String类型的响应。也就是说,在服务端,我可以把查询出来的数据,放在List里,然后遍历该list,生成一个String得数据作为响应发往页面端。

这样也是可以的,但是从使用的角度来说,如果这个list保存了大量的数据,这种做法显然不合适,而且在页面端,处理这样的String也比较麻烦吧。

我的功能其实跟浏览器的差不多,但我需要的不是一个浏览器。
ddyouyue 2009-09-05
  • 打赏
  • 举报
回复
session是保存在服务器端的,跟客户端关系不大(或者没关系),不过要想保存在服务器端得session有效(正常工作),那么客户端还要对cookie的支持。应为一般服务器为了保持与客户端的联系,都在客户端的cookie里面放了一个以session id为值的变量(当然URL重写技术不是这个原理)
如果lz真的要实现类似浏览器的功能,会话保持应该有点难度
加载更多回复(8)
内容概要:本文档是一份针对初学者的Spring框架整合学习笔记,系统介绍了Spring Framework的核心基础与Spring MVC的开发应用。内容涵盖IOC(控制反转)的基本概念、配置方式与注解使用,详细讲解了bean的生命周期、作用域、依赖注入方式及自动装配机制;深入阐述AOP(面向切面编程)的XML与注解实现,包括切点、通知、织入等核心概念;全面演示Spring MVC的环境搭建、请求处理、参数绑定、视图解析、文件上传、RESTful风格支持、JSON返回、异常处理与拦截器开发;同时包含表单验证、国际化、与Struts2对比以及Spring IOC与MVC整合等实用知识点。; 适合人群:具备Java基础和基本Web开发经验,正在学习或刚进入企业级Java开发领域的初级程序员、应届毕业生及转行人员。; 使用场景及目标:①掌握Spring核心机制如IOC、AOP的原理与实际配置;②能够独立搭建Spring MVC项目并实现常见Web功能如参数接收、响应处理、文件上传、异常统一管理等;③理解Spring生态中各注解的作用与最佳实践,为后续学习Spring Boot和微服务打下坚实基础。; 阅读建议:此资源以理论结合实操为主,建议边阅读边动手搭建项目,重点理解配置背后的运行机制,尤其是bean生命周期、AOP织入过程和MVC请求流程,配合调试加深理解。
内容概要:本文围绕2026年高教社杯全国大学生数学建模竞赛A题“药材的烘干问题”提供完整的数学建模解决方案,涵盖问题分析、模型构建、算法实现与论文撰写等全套资源。文档不仅深入解析药材烘干过程中的传热传质机理,建立优化模型以提升干燥效率与品质,还系统整合了Matlab、Python等多种编程语言的代码实现方案,并附有高质量论文模板与写作指导。此外,资源包扩展覆盖无线电干扰源定位、微网电力调控、时频冲突消解、SEM广告投放策略等多个赛题,以及信号处理、电力系统优化、车间调度、路径规划、图像处理等多领域科研技术支持,配套提供大量仿真代码、算法模型与网盘资源链接,形成面向数学建模竞赛与科研实践的一站式学习与应用平台。; 适合人群:全国大学生数学建模竞赛参赛者,具备一定数学建模、编程基础的本科及研究生层次学生,以及从事智能优化、信号处理、电力系统、路径规划等相关领域的科研人员与工程技术人员。; 使用场景及目标:①辅助完成数学建模竞赛题目,特别是药材烘干过程的建模与优化求解;②学习多领域典型问题的建模方法与算法实现技巧,如优化算法、机器学习、控制仿真等;③获取标准化论文写作框架与优秀范例,提升科研表达能力与竞赛成绩。; 阅读建议:建议结合文档中提供的代码与论文范例进行实操复现,重点掌握建模逻辑、算法选型与结果分析方法;充分利用网盘资源拓展学习广度,针对自身研究方向深入钻研相关技术细节,全面提升综合实践与创新能力。
内容概要:本文系统阐述了基于矩方法的工程不确定度快速评估策略,重点突出其在迭代设计优化中的计算效率与稳定性优势,并配套提供了完整的Matlab代码实现。该方法通过提取输入变量的高阶矩信息,结合最大熵原理进行概率分布重建,从而实现对输出响应不确定性的高效传播分析,有效克服了传统蒙特卡洛方法计算成本高昂的弊端。研究深入对比了最大熵方法与Pearson分布系统在处理单峰及多峰分布尾部估计时的性能差异,验证了前者在扩展不确定度评估中的更高精度与更强鲁棒性,尤其适用于航空航天、高端装备等对可靠性要求严苛的复杂工程系统。; 适合人群:具备概率统计、随机过程及数值计算基础,从事工程设计、可靠性分析、不确定性量化或优化研究的科研人员、工程师及高年级研究生。; 使用场景及目标:①解决复杂工程系统中因材料、制造、载荷等多源不确定性引发的性能波动评估难题;②在迭代式设计优化流程中嵌入高效的不确定度传播模块,提升优化过程的稳定性与收敛性;③替代计算耗时的抽样方法(如蒙特卡洛),实现快速风险评估与可靠性分析;④应用于高维、非线性系统的尾部风险预测与安全边界划定。; 阅读建议:建议读者结合提供的Matlab代码,重点研读高阶矩计算、矩约束构建、熵最大化优化求解及概率密度函数重建等关键模块的实现细节,通过复现文中的对比实验,深入理解不同方法在尾部估计上的差异,并尝试将其应用于自身的工程案例中以掌握其适用边界与调参技巧。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 【JAVA 个人版电影院售票管理系统】是一项依托于NetBeans开发平台构建的应用项目,其目标在于模仿现实中的电影院售票过程,致力于提供高效且方便的票务管理解决方案。该系统全面包含了电影排期安排、座位预定管理以及购票支付处理等一连串功能,为使用者和管理者提供了直观易用的交互平台。 1. **Java编程语言**:该系统的核心构建工具是Java,它作为一种跨操作系统的面向对象编程语言,拥有丰富的类库资源和卓越的性能表现,非常适合用于开发此类桌面应用程序。 2. **NetBeans IDE**:NetBeans是一个开源性质的集成开发工具,能够支持Java、C++等多种编程语言的开发工作,提供了从代码编写、调试、测试到部署的全方位服务,有效简化了项目的构建与维护流程。 3. **MVC设计模式**:模型-视图-控制器(Model-View-Controller)的设计理念被广泛采纳于该系统中,实现了业务逻辑、数据操作和用户界面的分离处理,从而形成了条理清晰的代码架构,便于后续的维护和功能扩展。 4. **数据库管理**:系统可能运用了SQLite或MySQL这类关系型数据库来储存电影资讯、演出时间表、座位可用状态以及购票历史等数据,达成了数据的持久化保存和高效率查询的目标。 5. **用户界面**:系统需具备视觉吸引力且操作简便的用户界面,涵盖电影信息列表呈现、场次挑选、座位分布图示、订单确认及支付环节等,这些界面通常借助Java Swing或JavaFX库来实现视觉呈现。 6. **数据验证**:在用户输入信息阶段,系统将执行数据校验操作,保证输入的电影名称、演出场次、座位...

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧