http协议
HTTP请求信息:
请求的组成部分:
(1).请求行:由3个标记方法组成,请求方法,请求URL和HTTP版本,用空格分隔
(2).请求头域:有关键字/值对组成,每行一对,关键字和值用冒号分开。
(3).空行:最后一个请求头标之后是一个空行
(4).请求数据:使用Post传送数据,最长使用的是Content-Type和Content-length头标
HTTP响应信息:
响应信息的组成部分:
(1).状态行:HTTP版本,响应代码和响应描述
(2).响应头标:像请求头标一样,他们指出服务器的功能,标识响应数据细节
(3).空行:最后一个响应头标之后是一个空行
(4).响应数据:HTML文档等
http是一种协议,那么它是有状态的还是无状态的呢?
HTTP无状态:浏览器和服务器之间不需要建立持久的联系,例如:上网看新闻,我打开了一个网页,发送了一次请求,给了我响应,但是并没有记录我看过新闻,这就是无状态
HTTP有状态:浏览器和服务器之间建立了持久的联系,也可以是一段时间的联系,例如,我到网上买东西,我把一件东西放到购物车中,记录我放入购物车里的东西,当我下次登录的时候还会看到购物车里的东西。这就是有状态。
HTTP请求方式:
(1)GET:客户程序通过这种请求方式,访问服务器上的一个文档,并由服务器把文档发送给客户程序,存储数据量小,不安全,传输快,地址栏长度有限制,最多2kb,编码格式不支持中文,ISO 8859-1
http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1
http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1
http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1
http的get请求方式不支持中文字符,因为其编码格式是ISO 8859-1
(1)POST:客户程序通过这种方式向服务器发送大量信息,在HTTP请求中除了包含要访问的文档的URL,还包括大量的请求正文,会包含HTTP表单数据,存储量大,安全,传输慢,地址栏长度在IE中最多为2G,编码格式为对应的网页的编码格式
(1)HEAD
(2)PUT
(3)DELETE
(4)OPTIONS
(5)TRACE
状态码:
1**:信息提示,表示临时的响应
2**:响应成功,表示服务器成功的接收到客户端的请求
3**:重定向
4**:客户端错误,表明客户端可能出现问题
5**:服务器错误,表明服务器由于遇到某种错误而不能响应客户端请求
常见的状态码:
200:响应成功
302:临时重定向
401:未经授权
400:错误的请求,客户发送的HTTP请求不正确
404:文件不存在,在服务器上没有客户要访问的文档(不允许请求的方法)
405:服务器不支持客户的请求
500:服务器内部错误
501:服务器不支持能够满足请求的功能
503:服务器不可用
URL和 URI的区别:(绝对路径和相对路径的区别)
URL:统一资源定位符(Uniform Resource Locator),用于完整的描述Inteernet上网页和其他资源的地址的一种标识方法
组成:协议+服务器地址(端口)+具体资源路径,如果端口号是该协议的标准端口号,可以省略端口号
例:hhtp://www.soccer.org.8080/laggue/spring200/html
URI:统一资源标识符(Uniform Resource Identifier),相对于URL是指资源相对于当前页面的地址,它包含从当前页面指向目标页面位置的路径
3种写法:(1).同一目录下只需要输入连接的文件名
(2).上一级目录在目录名和文件名前加“../”
(3).下一级目录输入目录名和文件名之间用“/”隔开
常见的端口号:21:ftp 80:http 8080:tomcat mysql:3306 1521:oracle
环境变量:
Path:指定机器中javac和java的路径,到jdk的bin路径
Classpath:寻找servlet相关所在的路径,到jdk中lib下的servlet-api.jar
Java_home:启动时需要找到jvm,到jdk
为了确保tomcat正常启动,必须配置java_home,其他两个可以没有,三个变量都配置的目的:为了正常开发web项目应用程序,并且能够发布访问web应用程序。
启动Tomcat: E:\姚璐\Java\apache-tomcat-6.0.36\bin\startup.bat
关闭Tomcat: E:\姚璐\Java\apache-tomcat-6.0.36\bin\shutdown.bat
Servlet的作用:
读取客户发送的所有数据,,查询HTTP请求中包含的任何其他请求信息,处理数据并生成结果,设置合适的HTTP响应参数,将响应信息回送给客户端
Javax.servlet包:
接口:ServletConfig ServeltContext RequestDispatcher Servlet ServletRequest ServletResponse
类:GenericServlet
Javax.servlet.http包:
类:HttpServlet 继承GenericServlet
接口:HttpServletRequest 继承ServletRequest
HttpServletResponse 继承ServletResponse
Servlet常用武器:
(1).请求对象:ServletRequest和HttpServletRequest,获取来自客户端的请求信息
(2).响应对象:ServletResponse和HttpServletResponse,生成响应结果
(3).Servlet配置对象ServletConfig,当容器初始化一个Servlet对象时会向servlet提供一个ServletConfig对象,通过该对象获取初始化参数信息以及ServletContext对象
(4).Servlet上下文对象,ServletContext,访问容器当前web应用提供的各种资源
Servlet运行在Servlet容器中,其生命周期由容器(如:Tomcat)来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init( )、service( )、destroy( )等方法来完成。
init(ServletConfig config):初始化Servlet对象,容器在创建好Servlet对象后就调用
service(ServletRequest req,ServletResponse res):响应客户请求,当容器接收到客户端要求访问特定的Servlet对象时就会调用
destroy():释放Servlet对象占用的资源,当servlet对象结束生命周期时,容器就会调用(服务器重启或者web项目重新加载时调用)
getServletConfig():返回ServletConfig对象,,在该对象中包含了servlet初始化信息
通过下图进一步理解Servlet的生命周期:
当客户端一个请求到来时,tomcat首先根据请求的URL得到相应的servlet,然后调用该servlet的service()方法,并根据是get还是post请求调用doget和dopost方法,这两个方法的输出作为响应内容发送给客户端。当我们要关闭tomcat时,tomcat在退出前,还要负责释放servlet所释放的资源。
Servlet中实现输出html页面
需要通过参数response来作出响应,可以通过HttpServletResponse中的方法来实现。
PrintWriter getWriter( ) 返回PrintWriter对象 PrintWriter可以向客户端输出字符。
通常我们习惯给这个类型的对象起名叫做out。
Servlet中代码实现
PrintWriter out=response.getWriter();
解决乱码问题
设置提交信息的字符编码,通过HttpServletRequest中的方法来实现:
,参数为”utf-8”时,设置提交字符编码为支持中文。
例:request.setCharacterEncoding("utf-8");
设置响应信息的字符编码,HttpServletResponse中的方法来实现:
例:response.setContentType("text/html; charset=UTF-8");
或
response.setCharacterEncoding("utf-8");
请求转发
HttpServletRequest中具有方法getRequestDispatcher,这个方法是ServletRequest中的方法,方法的返回值是RequestDispatcher类型的对象。
public RequestDispatcher getRequestDispatcher (java.lang.String path)
在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。
RequestDispatcher对象具有的public void forward(ServletRequest request, ServletResponse response) 这个方法能够实现将请求转发给另外的页面。
request.getRequestDispatcher("success.html").forward(request, response);
HttpServletRequest对象的生命周期:从一个请求开始,到这个请求处理结束。而且只要刷新页面,request也将失效。
请求转发的特点:
请求转发后,不会产生新的请求,会继续沿用原来的请求
请求转发后,地址栏显示的是原页面的URL
请求转发时用到的接口RequestDispatcher,在这个接口中定义了两个方法:
1)forward(ServletRequest request,ServletResponse response)
必须在响应提交给用户之前调用。
2)include(ServletRequest request,ServletResponse response)
3)区别:include()将请求转发给其他的Servlet,被调用的Servlet对该请求做出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应信息。
forward():将请求转发给其他的Servlet,将由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。
重定向
重定向就是指将用户的请求重定向给另外一个Servlet或页面,然后由它们进行处理并产生对请求的响应。
HttpServletResponse 类的public void sendRedirect(java.lang.String location) 能够实现重定向的页面跳转。但是与请求转发的原理不一样。
Response.sendRedirect(“success”);
重定向的特点:
重定向后,会产生一个新的请求
重定向后,地址栏显示的是目标页面的URL
2种跳转完成同样的功能,但是区别非常大:
在地址栏中,用重定向跳转后地址栏会显示目标页面。请求转发地址栏显示源页面
区别在于请求的次数:请求转发 请求没变;重定向 会产生新的请求
request.getRequestDispatch(“T2.jsp”).forward(request,response);相当于将本次的请求和响应转发给你
请求转发不能跳转到其他项目中,只能在本项目内跳转,重定向可以跳转到其他项目中
HTTP协议是无状态的协议,发送的请求不记录用户的状态,不记录用户的信息。就相当于它被访问了2次,不知道是哪两人访问的,或者是一个人访问两次。
正是因为HTTP协议的这一特点,用户的活动发生在多个请求和响应之中,作为web服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态。比如说我们平时上的qq.可以设置登录状态,记住密码,之后我们在一段时间内就可以不用输入密码直接输入,那么Http协议是无状态的,我们怎么可以让他记住我们的状态呢,就是通过会话跟踪技术
什么是会话:
就像我和一个人之间的对话
会话跟踪技术有哪几种?
Cookie Session 隐藏表单域(hidden) URL重写