servlet and jsp 小结

servlet小结

(1)Servlet基础

1)什么是Servlet?

    sun公司制定的一种用来扩扩展web服务器功能的组件规范。
        (1)扩展web服务器功能
            注:
                早期的web服务器只能处理静态资源的请求,即需要事先将
                html文件准备好,并存放到web服务器上面。不能够处理
                动态资源的请求(需要计算,动态生成html)。
                早期使用CGI(Common Gateway Interface)应用程序来扩展。
                CGI程序使用perl,c/c++等语言来编写,编写繁琐,不方便
                移值,性能也不是很好,现在用得很少了。
                浏览器将请求发送给web server,如果是动态资源的请求,
                web server会将请求转交给servlet容器来处理,由容器来
                处理网络相关的问题,由servlet处理业务逻辑。
         (2)组件规范 
        1)什么是组件?
        符合规范,实现部分功能,并且需要部署到相应的容器里面才能
        运行的软件模块。
        servlet就是一个组件,需要部署到servlet容器里面才能运行。

2)什么是容器?

    符合规范,提供组件运行环境的程序。
    servlet容器为servlet提供运行环境。

3)如何开发一个Servlet?

    step1,写一个java类,实现servlet接口或者继承HttpServlet抽象类。
        注:建议继承HttpServlet抽象类。
    step2,编译
    step2,打包。
        创建一个具有如下规范的文件夹:
            appname(应用名)
                WEB-INF
                    classes   (.class文件)
                    lib           (可选 .jar文件)
                    web.xml   (部署描述文件)
    step4,部署。
        将step3创建的文件夹拷贝到容器里面。
        注:
            可以使用jar命令将step3创建的文件压缩成".war"结尾的文件,然后再拷贝。
    step5,启动容器,访问Servlet
        http://ip:port/appname/servlet-pattsrn
        注:servlet-aptter在web.xml当中定义。
3)什么是Servlet容器?

4)http协议(了解)

    a.什么是http协议?
            是一种网络应用层协议,规定了浏览器与web服务器之间如何
    通信以及数据包的结构。
    1)如何通信?
            step1. 先建立连接。
            step2. 发送请求数据包。
            step3. 发送响应数据包。
            step4. 关闭连接。
            即 一次请求,一次连接。
    b.特点
            web服务器可以利用有限的链接为尽可能多的客户请求服务。
    c.数据包的结构
            1)请求数据包
            a.请求行  (请求类型 请求资源路径 协议和版本)
            b.若干消息头
                注:消息头是一些键值对(键和值之间使用": "分隔),
                浏览器和服务器之间可以利用消息头传递一些特殊的信息。
                比如,浏览器可以发送"user-agent"告诉服务器,浏览器
                的类型和版本。
            c.实体内容
                如果请求类型是get,实体内容为空。
    2)响应数据包
        a.状态行 (协议和版本 状态码 状态描述)
            注:状态码是一个三位数字,表示服务器处理请求的状态。
        b.消息头
            服务器同样也可以将一些消息头发送给浏览器。比如
            可以通过设置content-type消息头,告诉浏览器,服务器
            返回的数据类型。
        c.实体内容
            程序处理的结果。浏览器会解析实体内容中的数据,然后
            展现。 
    d.状态码,消息头
            (1)500是状态码,表示系统错误。
                1)产生的原因;
                    a,web.xml文件配置错误。
                        比如将类名写错。
                     b,源代码写错
                        比如,没有继承HttpServlet。
                2)
            (2)404是状态码,表示依据请求路径找不到对应的资源。
                1)产生的原因
                    a,没有部署运用
                    b,访问地址写错
            (3)405状态码,表示找不到处理方法。
                1)产生的原因
                    a.service方法签名错误(方法名,参数类型,异常类型,返回类型写错)           
    e.get/post请求
            1)get请求
        a.哪一些情况下,浏览器会发送get请求?
            a1.直接输入某个地址
            a2.点击链接
            a3.表单默认提交方式
        b.特点
            b1.会将请求参数放到请求行里面,只能提交少量的数据。
                注:因为请求行大约只能存放2k左右的数据。
            b2.会将请求参数显示在浏览器地址栏,不安全。
                注:比如有些网络设备(路由器)会记录这些地址。
    2)post请求
        (1)那一些情况下,浏览器发送post请求
            设置表单的method=“post”
        (2)特点
            a,不会将请求参数显示在浏览器地址,相对安全
            注:并不会对请求参数加密。
            b,会将请求参数添加到实体内容里面。
5)Servlet是如何运行的?
    比如,在浏览器地址栏输入http://ip:port/servlet-day01/hello
    step1,浏览器依据ip,port建立链接(即与web服务器之间建立网络链接)。
    step2,浏览器需要将相关数据打包(即,按照http协议要求,制作一个请求数据包,包含了一
        些数据,比如请求资源路径),并将请求数据包发送出去。
    step3,web服务器将请求数据包解析出来,并将这些数据 添加到request对象中,同时
        还会创建response对象。
    step4,web服务器创建servlet对象,然后调用该对象的service方法(会将request和response
        作为参数)
        注:
            在service方法里面,通过request获得请求相关的数据,比如请求参数,
            然后将处理结果写到response对象。
    step5,web服务器将rseponse中的数据取出来,制作响应数据包,然后发送给浏览器。
    step6.浏览器解析响应数据包,然后展现。

(2)Servlet核心

1)读取请求参数值
(1)request提供的getParameter方法。
    string getParamater(String parametename);
    注:
        a,如果请求参数名写错,会返回null值。
        b,如果不添任何数据,会获得空字符串。
(2)request提供getParameterValues方法。
    string[] getParameterValues(String paramname);
    注:
        a,当有多个参数请求名相同时,用该方法。
        b,多选框,如果不选择任何选项,浏览器不会发送任何数据给服务器。
2)处理表单中文参数值乱码问题
    (1)为什么会有乱码?
    表单提交时,浏览器会对中文参数值进行编码。服务器端
    默认会使用iso-8859-1来解码。
    注:
        会使用表单所在的页面打开时使用的字符集来编码。
   (2)如何解决?
    1)情形1 表单提交方式为post
        request.setCharacterEncoding("utf-8");
        注:要加到所有的request.getParameter方法前面。
    2)情形2 表单提交方式为get
        设置 <Connector URIEncoding="utf-8"/>
        注: 只针对get请求有效。

3)Servlet输出中文乱码问题
    (1)为什么会乱码?
        out在输出时,默认使用iso-8859-1来编码。
    (2)如何解决?
        response.setContentType("text/html;charset=utf-8");
            这行代码的作用:
            作用1.返回content-type消息头,告诉
                浏览器,服务器返回的数据类型。
            作用2:另外,out在输出时,会使用指定的
                字符集来编码。

4)转发与重定向
    (1)什么是转发?
        一个web组建将未完成的任务交给另外一个web组建继续做。
        转发的本质:一个web组件通知容器另外一个web组件。
        注:
            a,web组件指定是servlet或者jsp。
            b,一个servlet将数据转发给一个jsp,有jsp将数据以合适的方式展现出来。
    (2)如何获得转发?
        step1,将数据绑定到requset。
            request.setAttribute(String name,object obj);
        step2,获得转发器。
            RequestDispatcher rd=requesr.RequestDispatcher(String url);
            注:url转发的目的地。
        step3,转发
            rd.forward(request,response);
    (1)什么是重定向?
        服务器通知浏览器,向一个新地址发送请求。
    注:
        服务器可以发送一个302状态码以及一个location消息头(
        值是一个地址,称之为重定向地址)给浏览器,浏览器收到之
        后,会立即向重定向地址发送请求。
(2)如何重定向?
    response.sendRedirect(String url);
    注:url就是重定向地址。
         重定向之前,容器会清空response对象上存放的所有数据。
    也就是说,实体内容里面是没有任何数据的。
  (3)重定向特点
    a.重定向地址是任意的。
    b.重定向之后浏览器地址会发生变化。  
5)Servlet的生命周期
    1)什么是Servlet的生命周期?
            容器如何创建servlet对象,如何对其进行初始化处理,
        如果调用其方法来处理请求,以及如何销毁该对象的整个过程。
        (即容器如何管理servlet)。
    2)分成哪几个阶段?
        a.实例化 (load-on-startup) 单例
            (1)什么是实例化?
                容器创建servlet对象。
            (2)什么时候实例化?
                情况1;容器收到请求之后才会创建。
                情况2;容器启动之后立即创建(需要而外配置)。
            注:容器默认情况下只会创建一个实例。
        b.初始化 (一次,overrid init方法)
            (1)什么是初始化?
                实例化之后,容器会调用该实例的init方法。
                注:该方法只会执行一次。
            (2) GenericServlet的init方法是如何实现的?(了解)
             将容器传递过来的ServletConfig对象保存下来了,
            并且提供了getServletConfig方法。
    (3)如何实现自已的初始化处理逻辑?
        override GenericServlet的init方法(不带参的那个)。
    (4)初始化参数
          step1.配置初始化参数
          step2.调用ServletConfig提供的方法
                    String getInitParameter(String paramName)   
  c.调用/就绪 (doGet,doPost)
    (1)什么是就绪?
        容器收到请求之后,会调用servlet实例的service方法。
    (2)HttpServlet的service方法是如何实现的?
        依据请求类型,分别调用对应的doxxx方法(比如。get请求就调用doGet方法)。
  d.销毁
    a.什么是销毁?
            容器在删除servlet实例之前,会调用该实例的destroy方法。
            该方法只会执行一次。
     b.可以override GenericServlet提供的init方法来实现
            自已的销毁处理逻辑。
    3)相关的接口与类 (Servlet,GenericServlet,HttpServlet)
    1)Servlet接口
            a.init(ServletConfig config)
            b.service(ServletRequest req,ServletResponse res)
            注:
          ServletRequest是一个接口,HttpServletRequest
          是其子接口。ServletResponse与之类似。
            c.destroy()
    2)GenericServlet抽象类
             实现了Servlet接口的init和destroy方法。
    3)HttpServlet抽象类
             继承了GenericServlet,实现了service方法。
6)Servlet上下文
7)线程安全问题
8)容器如何处理请求资源路径?
9)如何让一个Servlet处理多种请求?
10)路径问题 

(3)状态管理

1)什么是状态管理?
2)如何进行状态管理?
3)Cookie
    a.什么是Cookie?
    b.工作原理 (set-cookie消息头,cookie消息头)
    c.如何添加Cookie?   
    d.三个问题(编码问题,生存时间问题,路径问题)
    e.如何读取Cookie?
    f.Cookie的限制
4)Session
    a.什么是Session?
    b.工作原理
    c.如何获得Session对象 (request.getSession)
    d.绑订数据
    e.Session超时
    f.删除Session     

(4)数据库访问

dao 

(5)过滤器与监听器

1)什么是过滤器?
2)如何写一个过滤器?
3)初始化参数
4)优先级
5)优点(了解)
6)什么是监听器?
7)如何写一个监听器?

(6)案例

员工管理
登录/注册
session验证
验证码

3. jsp

(1)什么是jsp?

.jsp(html + java代码) —>Servlet

(2)如何写jsp?

1)html (css,js): 直接写
2)java代码:
a.java代码片断: <% %>
b.jsp表达式: <%= %>
c.jsp声明: <%! 变量或者方法 %> (a1.jsp)
3)隐含对象
a.什么是隐含对象?
b.为什么可以使用这些隐含对象?
c.有哪些隐含对象?
out,request,response,session,application
pageContext(page上下文):
c1. 容器会为每一个jsp实例创建唯一的一个符合
PageContext接口要求的对象。

            注: 一个jsp实例对应一个pageContext,另外,
                只要jsp实例还在,pageContext就在。
        c2. 作用  (a2.jsp)
                作用1:绑订数据 (setAttribute,getAttribute,removeAttribute
                注:可以将pageContext看作是一个“钱包”,
                    绑订到pageContext上面的数据,只有对应的
                    jsp实例才能访问。
                作用2:获得其它隐含对象 
    exception(了解)
    config(了解 a4.jsp): ServletConfig
    page(不用): jsp实例本身(jsp对应的servlet实例)

4)指令
a.什么是指令?
b.指令的格式 <%@ 指令名 属性=值 %>
c.有哪些指令?
c1. page指令
import属性
pageEncoding属性
contentType属性
c2. incude指令
file属性

(3)执行过程

step1. jsp转换成Servlet
html——-> service方法,使用out.write输出。
<% %> —-> service方法 ,照搬。
<%= %> —> service方法,使用out.print输出。
<%! %> —> 为Servlet增加新的属性和方法。
step2. 调用Servlet

猜你喜欢

转载自blog.csdn.net/carrots_vegetables/article/details/80415173