Java学习笔记-Java基础26(servlet)

1.servlet:sun公司制定的用于扩展web服务功能的组件规范,需要部署在servlet容器(如tomcat)中才能运行。浏览器与web服务器的通信过程如下:

    1)浏览器依据IP,端口号建立连接

    2)浏览器将数据打包,并发送给容器

    3)容器解析数据包,并将数据放入创建的request对象,同时创建一个response对象

    4)容器创建servlet对象,调用其service方法,将request和response作为参数传入。通过request获取请求参数,将处理结果赋给response

    5)容器读取response数据,然后将数据打包发给浏览器

    6)浏览器解析数据,生成对应的页面


2.状态码:服务器处理请求的一种状态,有以下几种

    1)404:服务器依据请求地址找不到资源。可能原因:地址错误、web.xml中的servlet-name内容不一致、服务未部署

    2)500:系统错误。可能原因:代码错误、类未继承HttpServlet、web.xml中的servlet-class指定出错

    3)405:找不到处理方法,service方法不规范

    4)200:一切OK,浏览器正常显示页面

    5)302:重定向状态码

3.浏览器请求方式:网上有很多,推荐一个(http://www.cnblogs.com/logsharing/p/8448446.html

    1)get方式:

        ---表单默认的提交方式、点击链接、直接输入网址访问,都是get方式

        ---会将少量的请求参数添加在请求路径后面,只能存少量的数据

        ---会将请求参数显示在浏览器地址栏,不安全

    2)post方式:

        ---设置表单的method="post",则浏览器会以post方式发送请求

        ---会将数据以实体的方式发送给服务器,可存放大量数据

        ---参数不会显示在浏览器地址栏,相对安全

4.中文乱码:

    1)servlet如不进行设置out.println输出时会按照“iso-8859-1”来编码,不认识中文(谁让标准是人家制定的),需要设置:

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

    2)表单默认的编码方式是“iso-8859-1”,同样不认识中文。有两种方法:

       ---第一种方法:

            需要在html的<head>中设置:<meta http-equiv="content-type" content="text/html" charset="utf-8"/>。

            然后在服务器端还需要设置解码的:request.setCharacterEncoding("utf-8");。不过该方式只对post方式有效。

       ---第二种方法:

            需要在html的<head>中设置:<meta http-equiv="content-type" content="text/html" charset="utf-8"/>。

            然后在服务器端指定解码的:String name = new String(name.getBytes("iso-8859-1"),"utf-8");

5.重定向:针对浏览器的请求,服务器返回一个302状态码和一个网址,然后浏览器去访问该网址。(我搞不定,你找他吧)

    1)如何设置重定向:

        ---response.sendRedirect(String url)

    2)重定向时浏览器端的地址栏会发生改变

    3)重定向的url是任意的

6.servlet的生命周期:容器如何创建servlet对象,如何初始化,如何调用其方法处理请求,及如何销毁的整个过程(从生到死)。一共有下面几个阶段:

    1)实例化:容器调用servlet的构造方法,创建servlet对象,只会创建一个对象。默认是容器收到请求后创建,但是可以在<servlet>中设置<load-on-startup>1</load-on-startup>,让容器启动后就创建对象。(数值是大于0的整数,数字越小越创建的早)

    2)初始化:容器调用servlet的init方法,只调用一次。如果想在init方法中实现别的功能可以重写init方法

    3)就绪:容器调用servlet的service方法处理请求。(开始干活了)

    4)销毁:容器在销毁servlet对象之前会调用servlet的destroy方法,只会调用一次。(又不是幻视)

        

猜你喜欢

转载自blog.csdn.net/JustDI0209/article/details/80565495