javaEE http协议

来源:互联网 发布:软件成熟度模型下载 编辑:程序博客网 时间:2024/06/05 04:34

1、http协议

1.1. 概述

  • HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。
  • 客户端与服务端通信时传输的内容我们称之为报文。
  • 客户端发送给服务器的称为”请求报文 request“,服务器发送给客户端的称为”响应报文 response“

1.2. 请求方法

GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中。 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 向指定资源位置上传其最新内容。 DELETE 请求服务器删除Request-URI所标识的资源。 OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 TRACE 回显服务器收到的请求,主要用于测试或诊断。 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

1.3 响应码

  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 500:请求资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;

1.4 协议内容

POST提交的报文

POST /Hello/target.html HTTP/1.1Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*Referer: http://localhost:8080/Hello/Accept-Language: zh-CNUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateHost: localhost:8080Content-Length: 14Connection: Keep-AliveCache-Control: no-cacheCookie: JSESSIONID=774DA38C1B78AE288610D77621590345username=admin
  • POST请求是可以有体的,而GET请求不能有请求体。
  • Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
  • Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8的url编码用为“%E4%BC%A0%E6%99%BA”;
  • Content-Length:13:请求体的长度,这里表示13个字节。
  • keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。

2、web服务器

2.1. 概述

能够通过该应用发布网络服务的服务器,例如网站发布

2.2. 常用web服务器

  • Tomcat(Apache):当前应用最广的JavaWeb服务器;
  • JBoss(Redhat红帽):支持JavaEE,应用比较广;
  • GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广;
  • Resin(Caucho):支持JavaEE,应用越来越广;
  • Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
  • Websphere(IBM):要钱的!支持JavaEE,适合大型项目;

2.3. 下载安装

http://tomcat.apache.org/download-80.cgi

根据你的操作系统的版本来下载对应安装文件,其实就是压缩包,解压到某个目录,就完成安装

2.4. tomcat目录

2.5. tomcat启动,停止

window :

启动startup.bat停止shutdown.bat

linux :

启动startup.sh停止shutdown.sh

2.5. tomcat监听的端口

服务器启动时,默认监听8080,这个端口是可配置的,文件路径在:

conf/server.xml

2.6. tomcat默认访问的应用

例如:http://localhost:8080/后台对应的程序包就是ROOT,如果没有ROOT,就需要使用http://localhost:8080/+具体的应用名称

2.7. 创建和发布动态网页

创建动态网页必要条件

hello (动态网页服务名称)    WEB-INF(必须这个名字的目录)        web.xml (必须有这个名字的配置文件)    index.html

发布

把hello目录copy到webapps目下

一个完整的动态web服务的目录

webapps    |- hello        |-WEB-INF            |-web.xml            |-classes            |-lib    |- index.html

欢迎页面(配置在web.xml)

  <welcome-file-list>    <welcome-file>hello.html</welcome-file>  </welcome-file-list>

3. Servlet

3.1. 编写方式

1.实现Servlet接口
2.继承HttpServlet类

3.2. 编写步骤(实现Servlet接口)

1、实现Servlet接口    需要重写很多方法,最重要的是方法是service方法,是处理我们请求和响应的方法    service方法两个重要的参数ServletRequest req,ServletResponse resp2、实现Servlet所有的方法3、在web.xml配置servlet        <servlet>            <servlet-name>helloServlet</servlet-name>            <servlet-class>servlet.HelloServlet</servlet-class>        </servlet>        <servlet-mapping>            <servlet-name>helloServlet</servlet-name>            <url-pattern>/helloworld</url-pattern>        </servlet-mapping>4、发布工程    

3.3. 编写步骤(HttpServlet类)

1、继承HttpServlet类(专门处理http协议的请求和响应)    需要重写两个重要的方法:doGet和doPost    doGet和doPost方法两个重要的参数HttpServletRequest req,HttpServletResponse resp2、实现Servlet所有的方法3、在web.xml配置servlet        <servlet>            <servlet-name>helloServlet</servlet-name>            <servlet-class>servlet.HelloServlet</servlet-class>        </servlet>        <servlet-mapping>            <servlet-name>helloServlet</servlet-name>            <url-pattern>/helloworld</url-pattern>        </servlet-mapping>4、发布工程    

一般都使用继承HttpServlet的方式。

3.2. ServletConfig和ServletContext

3.2.1. ServletConfig

能够得到servlet的名字以及初始化的参数
能够得到ServletContext

3.2.2. ServletContext

每个应用对应一个ServletContext对象,所有的Servlet实例共享该对象

主要方法:

获取全局初始化参数
getInitParameter
获取服务器真实路径
getRealPath

3.3 HttpServletRequest和HttpServletResponse

3.3.1. HttpServletRequest

request获取和设置参数

1、根据参数名获取值(POST和GET):String 参数值 = request.getParameter("参数名");2、可以向request域设置参数reqeuset.setAttribute("user", user);3、可以从request与获取参数User user = (User)request.getAttribute("user");

问:reqeust.getParameger()和request.getAttribute()的

reqeust.getParameger()返回的stringrequest.getAttribute()返回是Object

服务器转发
request.getRequestDispather(“/转发的地址”).forward(req,resp);

3.3.1. HttpServletResponse

向浏览器输出内容

//通过PrintWriter对象向浏览器端发送响应信息PrintWriter writer = res.getWriter();writer.write("Servlet response");writer.close();//通过OutputStream对象向浏览器端发送响应信息OutputStream out = res.getOutputStream();out.write("html内容".getBytes());out.close();

重定向:

response.sendRedirect("/重定向的地址");

问:服务器转发和重定向的区别:

3.4 请求和响应乱码

3.4.1 请求乱码

1、可以在servlet里设置请求的编码格式(针对POST)req.setCharacterEncoding("utf-8");2、如果GET方式乱码GET请求:GET请求参数是在地址后面的。不能使用上述方法。我们需要修改tomcat的配置文件。需要在Server.xml文件修改Connector标签,添加URIEncoding="utf-8"属性。

3.4.2 响应乱码

解决方法:response.setContentType("text/html;charset=utf-8");或者使用这两句组合:response.setCharacterEncoding("utf-8")response.setHeader("Content-Type", "text/html;charset=utf-8"); 我们一般使用response.setContentType("text/html;charset=utf-8");
原创粉丝点击