servlet笔记

HTTP协议
    请求头:
        格式 name :值

        1、请求行
            请求方式、协议版本。。。。
        2、请求头
            请求数据的编码方式、请求数据类型、请求时间、连接
            cookie、请求URL、端口号等
        3、空行
            将请求头跟请求数据分离开
        4、请求数据
            get :url地址上:url?name=值&name1=值
            post:param中
    
    响应头:
        格式 name :值
        1、状态行
            200 ok
        2、响应头
            响应数据编码,响应数据类型,响应时间....
        3、空行
            将响应头跟请求数据分离开
        4、消息体
            具体的响应数据
            json\xml\html\具体文本

    特征:
        1、支持浏览器、服务器模式
        2、简单快速
        3、传输数据灵活
        4、无连接
        5、无状态


    servlet:
        javaAPI
        1\读取客户端发送的显式和隐式数据     
        2\生成结果 
        3\向客户端发送显式数据(即文档)和隐式数据(HTTP响应数据) 

    web容器:
        1、通信支持 
        2、生命周期管理 
        3、多线程支持 
        4、JSP支持 
        5、处理安全性 
    
    web容器+servlet工作原理:
    1)客户端向Web服务器发起一个HTTP请求。
    2)HTTP请求被Web服务器接受,如果请求的是静态页面,则由Web服务器负责处理。如果请求的是Java Web组件(Servlet或者JSP),则移交给Web容器。Web容器可以在主机的同一个进程、不同的进程或其他的Web服务主机的进程中启动。
    3)Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象、response对象传给它。
    4)Servlet通过request对象知道客户端的使用者是谁,客户的请求信息是什么和其他的一些信息。Servlet处理完请求后把要返回的信息放入response对象返回到客户端。
    5)一旦Servlet完成了请求的处理,Web容器就会刷新response,把控制权返回给web服务器。

    
    servlet特征:
        1、web容器只会创建一个唯一的servlet对象,第一次调用servlet时创建
        生命周期:
            1、实例化serlvet对象
            2、调用初始化方法
            3、调用服务方法service()
            4、项目终止调用销毁方法
    URL映射:
    精确模式匹配。这种类型的模式用于将请求一对一映射到指定的Servlet。
    扩展名匹配“*.扩展名”。在这种情况下,所有以指定扩展名结尾的URL都转向指定的Servlet。
    路径映射。路径映射必须以'/'开始,以'/*'结尾,在这之间可以出现任意字符。路径匹配通常
    用于将对某个目录的所有请求转向一个指定的Servlet。
    默认的Servlet,'/'。默认的Servlet映射用于定义一个在没有给出路径信息时请求转向的Servlet。
    
    servlet初识话参数:
        每一个servlet都有一个与之对应ServletConfig对象,获取serlvet初始化信息
         <servlet>
                    <servlet-name>test</servlet-name>
                    <servlet-class>servlet.TestServlet</servlet-class>
                    <!--初始化参数-->
                   <init-param>
                            <param-name>name</param-name>
                            <param-value>张三</param-value>
                    </init-param>
            </servlet>

        ServletConfig sc = getServletConfig();
                String str = sc.getInitParameter("name");
                System.out.println("初始化参数:"+str);
    
    ServletContext对象(上下文对象,所有servlet共享):
        
        1、属于整个Web应用程序
        2、可以访问到Web应用程序资源的本地输入流 
        3、把资源的虚拟路径转换为物理路径 
        4、记录事件日志 
        5、绑定一个对象在整个Web应用程序中共享 

        上下文作用域,共享内存资源,可以存取数据
        
        
    请求对象HttpServletRequest:
        获取请求头的数据
        System.out.println("请求方式:"+req.getMethod());
                System.out.println("url"+req.getRequestURL());
                System.out.println("版本号:"+req.getProtocol());
                req.setCharacterEncoding("utf-8");//设置请求的编码格式
                String account = req.getParameter("account");
                String pwd = req.getParameter("password");
                System.out.println(account+","+pwd);
                String[] like = req.getParameterValues("like");
                for (String str:
                         like) {
                    System.out.println(str);
                }

    请求派发:
        RequestDispatcher
        
        每个客户的请求可以传递给很多Servlet、jsp、html以及Web应用程序中的其它资源
        整个过程完全是在服务器端完成
        不需要任何客户端浏览器的行为
        不需要在客户端浏览器和服务器端之间传递特殊信息

        请求派发有两个方法:
            将请求响应对象交给具体资源处理,处理完需要返回
            req.getRequestDispatcher().include();
            将请求响应对象交给具体资源处理,处理完直接响应,不需要返回
            req.getRequestDispatcher().forward();
            
    Response响应对象:
        1、设置响应头
            响应状态码设置
                    //resp.sendError(500,"代码有误");
            响应类型及编码格式设置        
            resp.setContentType("text/html");
                   resp.setCharacterEncoding("utf-8");
        2、响应动态页面的方式
            PrintWriter pw = resp.getWriter();
                     //响应动态页面
                     pw.print("<html>" +
                                 "<head>" +
                         "<meta charset='UTF-8'/>" +
                         "    <title>Title</title></head>" +
                         "<body>" +
                         "<h1>数据库中取出的数据</h1></body></html>

    3、关闭连接
             //关闭连接
                    pw.close();

        4、重定向
            第一次请求到服务器,服务器会响应一个请求地址,
            根据地址浏览器重新发送请求

        5、页面刷新
              resp.setHeader("Refresh", "2; URL=login.html" );
    
        重定向与请求派发的区别?
        
    
    状态管理
        http协议是无状态无连接的协议
        每次请求响应结束,连接断开,服务器不能记住用户登录、浏览的状态

        cookie


        session会话
        服务器可以为客户端创建并维护一个Session对象,用于存放数据。
        在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID
        服务器以Cookie的方式将SessionID存放在客户端。
        当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问 
        
        注意:第一次访问服务器,会话就开始

        会话结束:
            1\session.setMaxInactiveInterval(10);
            2\invalidate();
            3\ <session-config>
                        <session-timeout>1</session-timeout>
                    </session-config>
            4\浏览器清除缓存,会话没有结束,只是sessionID被删除,会话对象还存放在服务器
            5\重启服务器
        

    监听器
        监听谁?
        监听什么事儿?

        监听对象:web的四大作用域
            作用域:web运行过程中可以存取的内存空间
            request请求作用域\session作用域\Context上下文作用域\page当前页面

            request请求作用域:
                生命周期:一过去请求的过程有效
                用法:
                    setAttribute(String, Object)
                    getAttribute(Sting)
                    removeAttribute(String)

            session作用域:
                生命周期:在一个会话过程中有效
                用法:
                    setAttribute(String, Object)
                    getAttribute(Sting)
                    removeAttribute(String)

            Context上下文作用域:
                整个作用域所有servelt共享                    
                生命周期:程序启动到停止
                用法:
                    setAttribute(String, Object)
                    getAttribute(Sting)
                    removeAttribute(String)

        监听器:监听作用域数据的存取和作用域的生命周期,可以对其进行处理,例如:日志记录        
        
            配置:
                1、创建对应的监听器类

                2、web.xml配置监听器
                 <!--配置监听器-->
                    <listener>
                            <listener-class>listener.MySessionListener</listener-class>
                    </listener>

        过滤器:
            过滤请求响应数据,将满足的放行,不满足的退回

            1、字符编码过滤
                1)创建过滤器类,实现Filter接口
                2)从写filter的doFilter方法
                3)对请求对象编码处理
                4)放行,将请求交于servlet
                5)web.xml中配置
            <!--配置字符编码过滤器-->
                <filter>
                        <filter-name>charset</filter-name>
                        <filter-class>filter.CharSetFilter</filter-class>
                </filter>

                <filter-mapping>
                        <filter-name>charset</filter-name>
                        <url-pattern>/*</url-pattern>
                </filter-mapping>

    JSP
        实质就是一个servlet
        简化servlet生成动态页面的开发过程
        
        生命周期:
            1、将jsp文件翻译成java源文件  xx_jsp.java
            2、将Java源文件编译成字节码文件
            servlet生命周期:
                1、实例化serlvet对象
                2、调用初始化方法
                3、调用服务方法service()
                4、项目终止调用销毁方法


        jsp组成:
            元素(Element)和模板数据(Template Data)
            
            元素:输入输出、写java代码、表达式
            模板数据:静态资源,html\css、js

        三大元素:
            声明:<%! 声明 %>    ,创建全局变量
            脚本:<% 代码 %>    ,写java代码
            脚本表达式:<%= 脚本表达式 %>  输出

        JSP页面中可以插入三种不同类型的注释
            JSP注释,其语法结构为: <%--注释内容--%> 
            HTML注释 :<!--注释内容-->
            Java代码注释 

        JSP的三大指令、两个动作:
            指令:
            <%@ 指令名称 attribute1="value1" attribute2="value2" %>
            page指令为当前页面提供处理指令
            include指令用于把另一个文件包含在JSP中
            taglib指令指定如何包含和访问自定义标签库 
            动作:
            <jsp:include>、<jsp:forward>
            req.getRequestDispatcher("xxx").include(req,resp);
            req.getRequestDispatcher("xxx").forward(req,resp);
            
            使用:
                <jsp:include page="ok.jsp">
                        <jsp:param name="var" value="test"/>
                </jsp:include>    

        JSP九大隐式对象:
            request、response、pageContext、session、application、out、config、page、exception

        EL表达式:
            尽量使jsp页面干净,只有静态资源没有java代码
            格式:
                ${变量名}

        JSTL表达式:
            <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
            使用方式:
            <c:if test="${1<0}">
                        <c:out value="ok"/>
                </c:if>
                <c:otherwise>
                        <c:when test="${1<0}">
                </c:when>
                        <c:when test="${1<0}">

                        </c:when>
                        <c:when test="${1<0}">

                        </c:when>
                </c:otherwise>


    AJAX:
        局部刷新,只刷新修改的地方,页面不进行刷新
        减少客户端、服务器压力,提高用户体验度

        A Asynchronous [eI`sinkrenes] 异步
        J JavaScript    JavaScript脚本语言
        A And
        X XML 可扩展标记语言

        
    JSON字符串:
        响应Text:“1,zs,123;2,zs,123;3,zs,123”
        响应xml:<user><id>1</id><account>zs</account></user>
        json:'[{"id":1,"account":zs,"password":123},{"id":2,"account":"李四","password":123}]'
            js对象:
                {
                    id:值,
                    name:值
                }
            js提供了一个方法,可以直接将字符串转换成js代码直接运行
            对象.id
            对象.account
        
        json:
            服务器封装json格式:
                单组:'{"键":值,"键":值.........}'
                多组:'[{单组},{单组},{单组}....]'
            浏览器:
                接收json字符串,直接将字符串转换成js对象:
                单个对象:{
                    键:值,
                    键:值,
                    键:值
                         }
                多个对象:
                    前端数组(有后端数组+集合的功能):[]
                    [
                        {键:值,
                                    键:值,
                                     键:值},
                        {},
                        {}
                    ]
            12/5  2.4  
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值