首页编程java编程java中http有什么用(java有什么作用)

java中http有什么用(java有什么作用)

编程之家2023-10-14107次浏览

其实java中http有什么用的问题并不复杂,但是又很多的朋友都不太了解java有什么作用,因此呢,今天小编就来为大家分享java中http有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

java中http有什么用(java有什么作用)

java的TCP和HTTP有什么区别

TCP是传输层协议,定义数据传输和连接方式的规范。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

HTTP超文本传送协议(Hypertext Transfer Protocol)是应用层协议,定义的是传输数据的内容的规范。

HTTP协议中的数据是利用TCP协议传输的,特点是客户端发送的每次请求都需要服务器回送响应,它是TCP协议族中的一种,默认使用 TCP 80端口。

java中http有什么用(java有什么作用)

好比网络是路,TCP是跑在路上的车,HTTP是车上的人。每个网站内容不一样,就像车上的每个人有不同的故事一样。

HttpServletResponse这个类有什么用

HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法

HttpServletResponse对象可以向客户端发送三种类型的数据:

java中http有什么用(java有什么作用)

a.响应头(Response headers)

b.状态码(Protocol—Status code—Description)

c.实体数据(Entity body)

举例如下:

HTTP/1.1 200 OK

Server: Microsoft-IIS/4.0

Date: Mon, 5 Jan 2004 13:13:33 GMT

Content-Type: text/html

Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT

Content-Length: 112

<html><head><title>HTTP Response Example</title></head>....</html>

常用方法

addHeader(String name,String value)将指定的名字和值加入到响应的头信息中

encodeURL(String url)编码指定的URL

sendError(int sc)使用指定状态码发送一个错误到客户端

setDateHeader(String name,long date将给出的名字和日期设置响应的头部

setHeader(String name,String value)将给出的名字和值设置响应的头部

setStatus(int sc)给当前响应设置状态码

HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

response.setContentType("text/html;charset=utf-8");

setContentType(String ContentType)设置响应的MIME类型,页面的设置文本类型,获取或设置输出流的 HTTP MIME类型。输出流的 HTTP MIME类型。默认值为“text/html”。

MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

使用输出流输出一张图片的时候,比如做验证码图片的时候如果在Firefox中直接浏览验证码是乱码,放在<img>里面则不会

这时候就要事先指定Response.ContentType="image/jpeg";//设定MIME类型

response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”);页面的刷新

消息实体内容通过输出流对象进行设置,用以下两个方法:

Response.getOutputStream()字节输出流对象

Response.getWriter()字符的输出流对象

getOutputStream和getWriter方法的比较

(1)getOutputStream方法用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文。

(2)getWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。

(3)getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。要不会出现错误java.lang.IllegalStateException

(4)getOutputStream方法返回的是字节输出流对象的类型为ServletOutputStream,它可以直接输出字节数组中的二进制数据。

(5)getWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出流对象后返回,PrintWriter对象可以直接输出字符文本内容。

(6)Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。

(7)Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。

注:out.close();系统会自己释放,但一般写上

选择getOutputStream和getWrite方法的要点

(1)PrintWriter对象输出字符文本内容时,它内部还是将字符串转换成了某种字符集编码的字节数组后再进行输出,使用PrintWriter对象的好处就是不用编程人员自己来完成字符串到字节数组的转换。

(2)使用ServletOutputStream对象也能输出内容全为文本字符的网页文档,但是,如果网页文档内容是在Servlet程序内部使用文本字符串动态拼凑和创建出来的,则需要先将字符文本转换成字节数组后输出。

(3)如果一个网页文档内容全部为字符文本,但是这些内容可以直接从一个字节输入流中读取出来,然后再原封不动地输出到客户端,那么就应该使用ServletOutputStream对象直接进行输出,而不要使用PrintWriter对象进行输出。

向客户端写入中文

使用OutputStream向客户端写入中文:

String data="中国";

OutputStream stream= response.getOutputStream();//获取一个向Response对象写入数据的流,当tomcat服务器进行响应的时候,会将Response中的数据写给浏览器

stream.write(data.getBytes("UTF-8"));//此时在html页面会出现乱码,这是因为:服务器将"中国"按照UTF-8码表进行编码,得到对应的码值假设是98,99,服务器将码值发送给浏览器.浏览器默认按照GB2312进行解码,在GB2312码表中对应的字符已不是"中国"

正确代码如下:

response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响应头,设置浏览器的解码方式为UTF-8

String data="中国";

OutputStream stream= response.getOutputStream();

stream.write(data.getBytes("UTF-8"));

使用PrintWriter向客户端写入中文:

PrintWriter writer= response.getWriter();

writer.write("中国");

//同样会出现乱码,这是因为我们将"中国"写入response对象时,tomcat服务器为了将数据通过网络传输给浏览器,必须进行编码,由于没有指定编码方式,默认采用ISO8859-1,当浏览器接收到数据后,根据GBK解码必然出现乱码

正确代码如下:

response.setCharacterEncoding("UTF_8");//设置Response的编码方式为UTF-8

response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响应头,设置浏览器的解码方式为UTF-8,其实设置了本句,也默认设置了Response的编码方式为UTF-8,但是开发中最好两句结合起来使用,设置响应头,控制浏览器以指定的字符编码编码进行显示,

//response.setContentType("text/html;charset=UTF-8");同上句代码作用一样

PrintWriter writer= response.getWriter();

writer.write("中国");

在获取PrintWriter输出流之前首先使用"response.setCharacterEncoding(charset)"设置字符以什么样的编码输出到浏览器,如:response.setCharacterEncoding("UTF-8");设置将字符以"UTF-8"编码输出到客户端浏览器,然后再使用response.getWriter();获取PrintWriter输出流,这两个步骤不能颠倒

使用Response实现文件下载:

文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载

文件下载功能的实现思路:

1.获取要下载的文件的绝对路径

2.获取要下载的文件名

3.设置content-disposition响应头控制浏览器以下载的形式打开文件

4.获取要下载的文件输入流

5.创建数据缓冲区//缓冲区解释见下文

6.通过response对象获取OutputStream流

7.将FileInputStream流写入到buffer缓冲区

8.使用OutputStream将缓冲区的数据输出到客户端浏览器

案例1

private void downloadFileByOutputStream(HttpServletResponse response){

//1.获取要下载的文件的绝对路径

String realPath= this.getServletContext().getRealPath("/download/1.JPG");

//2.获取要下载的文件名

String fileName= realPath.substring(realPath.lastIndexOf("\\")+1);

//3.设置content-disposition响应头控制浏览器以下载的形式打开文件

response.setHeader("content-disposition","attachment;filename="+fileName);

//4.根据文件路径获取要下载的文件输入流

InputStream in= new FileInputStream(realPath);

int len= 0;

//5.创建数据缓冲区

byte[] buffer= new byte[1024];

//6.通过response对象获取OutputStream流

OutputStream out= response.getOutputStream();

//7.将FileInputStream流写入到buffer缓冲区 while((len= in.read(buffer))> 0){

//8.使用OutputStream将缓冲区的数据输出到客户端浏览器

out.write(buffer,0,len);

}

in.close();

}

案例2

@RequestMapping("/download")

public void download(HttpServletRequest req,HttpServletResponse res){

String fileName="plcdmb.xls";//要下载的文件名

//1.获取要下载的文件的绝对路径

String realPath= req.getSession().getServletContext().getRealPath("/wbms/download");

File file=new File(realPath+"/"+fileName);//设置content-disposition响应头控制浏览器以下载的形式打开文件

res.setCharacterEncoding("utf-8");

res.setContentType("application/octet-stream");

res.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode("批量出单模板.xls","UTF-8"));

InputStream inputStream=new FileInputStream(file);根据路径获取要下载的文件输入流

OutputStream out= res.getOutputStream();

byte[] b=new byte[1024];//创建数据缓冲区

int length;

while((length=inputStream.read(b))>0){把文件流写到缓冲区里

out.write(b,0,length);

}

out.flush();

out.close();

inputStream.close();

}

在编写下载文件功能时,要使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。

其他

在jsp嵌套的java代码中执行js

<%

//保存登录信息

Cookie[] cookies=request.getCookies();//从request中获得cookie对象的集合

String phone="";//电话号

String state="";//

if(cookies!=null){

for(int i=0;i<cookies.length;i++){

if(cookies[i].getName().equals("state")){

state=cookies[i].getValue();

if(state.equals("cont_failed")){

out.write("<script language='javascript'> alert('hello');</script>;");

}

}

}

}

%>

getWriter()输出js代码的案例

1.res.getWriter().write("<script language=\"javascript\">location.href='"+req.getContextPath()+"/wbms/ecm//init.action';</script>");//在原页面输出

res.getWriter().flush();

2.response.getWriter().write("<script language='javascript'>alert('请上传正确格式的文件!!!');window.history.back();</script>");

3.res.getWriter().flush();

如果不使用这种形式,传值用request.setAttribute()来传值跳转用重定向或者转发页面取值可以用jstl的$()取值可以在input标签的value中使用$()取值

java有什么作用

Java是一种编程语言,它本身的作用是通过编写应用程序

帮助人们解决日常工作、生活和学习遇到的问题

下面摘录的是“什么是Java"

或许对你的问题有所帮助

http://detail.zol.com.cn/product_param/index1777.html

Java是由Sun微系统公司所发展出来的程序语言,它本身是一种对象导向(Object-Oriented)的程序语言。JAVA目前在手机上应用最多的就是JAVA游戏。

Java也号称是能跨平台使用的语言,这主要是因为Java本身被编译之后,并不是直接产生可执行的码,而是产生一种中间码叫作 ByteCode,这种码必需在透过 Java的直译器来解读它,才能够真正的被执行,所以只要平台上装有这种Java的直译器,就能解读ByteCode也就能执行Java编译过的程序,故与 Java程序是在那种平台上被编译的,就完全没有干系了。Java写出来的程序可分为两类,分别是Java Applet与一般的Application,而Application这一类就与一般的程序如C++的作用是比较类似的,是一个独立可执行的应用程序,像HotJava是一个浏览器,且就是使用Java程序所发展出来的。最常见的Java程序包括应用程序和applets。应用程序是单独的程序,诸如HotJava浏览器软件就是用Java语言编写的。 Applets类似于应用程序,但是它们不能单独运行, Applets可以在支持Java的浏览器中运行。Applet主要是内置于HTML网页中,在浏览时发挥作用。

Java的目标是为了满足在一个充满各式各样不同种机器,不同操作系统平台的网络环境中开发软件。利用Java程序语言,可以在网页中加入各式各样的动态效果。可以放上一段动画,加入声音,也可以建立交互式网页等。

Java手机软件平台

Java手机软件平台采用的基本Java平台是CLDC(Connected Limited Device Configuration)和MIDP(Mobile Information Device Profile),是J2ME(Java 2 Micro Edition)的一部分,在中国一般称为“无线Java”技术。此前,有人把它叫做“K-Java”;其实,K-Java的叫法只是Sun公司在开发 KVM Java虚拟机时的项目代号,在该技术被正式命名为KVM后,就不再用K-Java了。

KJava即J2ME(Java 2 Micro Edition),是Sun公司专门用于嵌入式设备的Java软件。以KJava编程语言为手机开发应用程序,可以为手机用户提供游戏、个人信息处理、电子地图、股票等服务程序。J2ME(Java 2 Micro Edition)是致力于消费产品和嵌入式设备的最佳解决方案。J2ME在设计其规格的时候,遵循着“对于各种不同的装置而造出一个单一的开发系统是没有意义的事”这个基本原则。于是J2ME先将所有的嵌入式装置大体上区分为两种:一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA、手机);另外一种是运算能力相对较佳、并且在电力供应上相对比较充足的嵌入式装置(比方说冷气机、电冰箱)。因为这两种区分,所以Java引入了一个叫做 Configuration的概念,然后把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为Connected Device Configuration(CDC)规格。也就是说,J2ME先把所有的嵌入式装置利用Configuration的概念区隔成两种抽象的型态。

Java技术的开放性、安全性和庞大的社会已有资源,以及其跨平台性,即“编写一次,到处运行”的特点,使Java技术成为智能手机软件平台的事实标准。采用Java技术后,编写应用程序和提供服务的人就不必关心接受其服务的手机采用的是什么操作系统和芯片,只要按照Java的要求去写程序就好了;同样,生产手机的厂商也不必顾虑将来谁来提供增值服务。可以看出,采用Java技术,可以建立完整、高效的无线数据增值服务产业链,从而为用户提供灵活、个性化、内容方式多样的服务。

Java手机发展现状

到今年6月,全世界已经有大约1亿部Java手机在使用,除中国大陆外共有53个移动运行商正式推出了基于Java技术的无线数据增值服务。中国移动通信集团已经建立了无线Java增值服务体系,并推出了“百宝箱”等服务品牌,包括游戏百宝箱、娱乐百宝箱、商务百宝箱、生活百宝箱等,已经于2003年7月 10日开始正式商用。

中国联通公司也正在其CDMA 1X网络上建立无线Java增值服务体系,目前系统正在建设过程中,并且2003年9月26日中国联通、北京振戎融通公司和Sun公司在人民大会堂宣布联合发起成立“UniJa技术联盟”,三方将在联通CDMA 1X网络上的Java增值服务方面全面合作。

如果你还想了解更多这方面的信息,记得收藏关注本站。

在java用什么声明类 在java中,如何声明一个类安卓开发用到java什么内容 安卓和java有什么区别