zoukankan      html  css  js  c++  java
  • Document

    回顾:
    xml:
        可扩展的标签语言
        标签可以自定义
        作用:配置文件
        xml组成:
            声明 首行顶格写
            元素 
                <xxx></xxx>
                <xx/>
                
            属性
                <xxx attr="value">
            注释
                <!--注释内容-->
            CDATA 原样输出
                <![CDATA[
                    ....
                ]]>
    xml的解析:
        sax:逐行解析,只能查询
        dom:一次性将文档加载到内存,形成一棵树,可以进行curd操作
    通过dom4j进行查询操作:
        1.导入jar包
        2.获取document
            Document doc = new SAXReader().read(文件路径);
        3.获取根节点
            Element root = doc.getRootElement();
        4.获取其他节点
            获取属性节点
                String value = root.attributeValue("属性名")
            获取所有的子元素
                List<Element> list=root.elements()
            获取子元素的文本节点
                String text=ele.elementText("子元素名称")
    扩展:xpath
        api:
            List<Element> selectNodes("表达式");
            Element selectSingleNode("表达式");
    ///////////////////////////////
    xml约束:
        作用:规定文档中可以出现那些元素和属性 及他们出现的顺序
        分类:
            DTD和SCHEMA
        DTD:一个xml文档中只能有一个dtd约束
            只要在文档上面看到<!DOCTYPE> 就说明使用的是dtd约束
            * ? + , | ()
        SCHEMA:一个xml文档中可以出现多个schema约束
            只要在xml文档中看到 xmlns
    //////////////////////
    tomcat
        web:网页或者资源
        资源有动态web资源和静态web资源
        动态的web开发技术:servlet和jsp 等等
        静态的web开发技术:html css等
    tomcat
        启动: bin/startup.bat
        退出: bin/shutdown.bat
        修改端口号: conf/server.xml
        存放项目目录:webapps
    web项目目录
        myweb
            |
            |--- html css 图片
            |
            |--- WEB-INF(特点:浏览器直接访问不到,通过java程序可以)
            |        |
            |        |--- lib
            |        |--- classes
            |        |--- web.xml(核心配置文件)
            |        |
    //////////////////////////////
    发布方式:
        方式1:将项目放在webapps下
    ///////////////
    访问路径:
        http://主机:端口号/项目名称/资源路径
    //////////////////////////
    /////////////////////////////////////////////////
    http:要求:掌握一些头信息
        超文本传输协议:
            规定数据的格式
        浏览器往服务器发送 ---- 请求
        服务器往浏览器回写 ---- 响应
        
    请求:(request)
        组成部分:
            请求行 请求头 请求体
            
        请求行:请求信息的第一行
            格式:请求方式    访问的资源 协议/版本
            例如:GET /day0801/1.html HTTP/1.1
            请求方式:get和post
                get会把参数放在url的后面 post不会
                get参数大小有限制,post请求却没有限制
                get请求没有请求体;post请求有请求体 请求参数放在请求体中
        请求头:请求信息的第二行到空行结束
            格式:key/value (value可以是多个值)
            常见的请求头:
                Accept: text/html,image/bmp        --支持数据类型    text/html text/css text/javascript 大类型/小类型 mime类型
                Accept-Charset: ISO-8859-1    --字符集
                Accept-Encoding: gzip        --支持压缩
                Accept-Language:zh-cn         --语言环境
                Host: www.itcast.cn:80        --访问主机
                If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT      --缓存文件的最后修改时间
                Referer: http://www.itcast.com/index.jsp     --来自哪个页面、防盗链
                User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
                Cookie
                Connection:Keep-Alive       --链接状态
                
            掌握的头信息:
                Referer User-Agent Cookie If-Modified-Since
        请求体:空行以下的内容
            只有post才有请求体  get请求参数 http://xxxx?username=tom&password=123
            格式:username=tom&password=123
        ////////////////////
    响应:(response)
        组成部分:
            响应行 响应头 响应体
        响应行:响应信息的第一行
            格式:协议/版本 状态码 状态码说明
            例如:HTTP/1.1 200 OK
            状态码:
                200 正常响应成功
                302 重定向
                304 读缓存
                404 用户操作资源不存在
                500 服务器内部异常
        响应头:从响应信息的第二行到空行结束
            格式:key/value(value可以是多个值)
            常见的头
                Location: http://www.it315.org/index.jsp     --跳转方向 和302一起使用的
                Server:apache tomcat            --服务器型号
                Content-Encoding: gzip             --数据压缩
                Content-Length: 80             --数据长度
                Content-Language: zh-cn         --语言环境
                Content-Type: text/html; charset=GB2312         --数据类型
                Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT    --最后修改时间
                Refresh: 1;url=http://www.it315.org        --定时刷新
                Content-Disposition: attachment; filename=aaa.zip    --下载
                Set-Cookie:SS=Q0=5Lb_nQ; path=/search
                Expires: -1                    --缓存
                Cache-Control: no-cache              --缓存
                Pragma: no-cache                   --缓存
                Connection: Keep-Alive               --连接
            掌握的头信息
                Content-Type Location  Last-Modified Refresh Content-Disposition Set-Cookie
        响应体:空行以下的内容
            页面上展示的内容
    //////////////////////////
    案例1-完成登录案例.
    需求:
        在页面上输入用户名和密码,提交到服务器上,服务器拿着用户名和密码去数据库中查找有无此用户
            若有用户,则提示登录成功
            若无此用户,则提示用户名密码不匹配
    技术分析:
        表单
        servlet
        请求(request)
        响应(response)
    ////////////////////////////////////
    表单:
        收集用户数据
        所有的字段要想提交到服务器必须 有name属性
        提交的地址 action
        请求方式:post
    //////////////////////////////////////
    servlet:
        动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序
        处理业务逻辑,生成动态web内容
    编写一个servlet步骤:
        1.编写一个类
            a.继承HttpServlet
            b.重写doGet或者doPost方法
        2.编写配置文件(web-inf/web.xml)
            a.注册servlet
            b.绑定路径
        3.访问
            http://主机:端口号/项目名/路径
    接受参数:  格式:key=value
        Sting value=request.getParameter("key")
        例如: http://localhost/day09/hello?username=tom
            request.getParameter("username")就可以获取tom值
    回写内容:
        response
        response.getWriter().print("success");
        处理响应数据中文乱码:
            resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行
    '///////////////////////////////////////////'    
    步骤分析:
        1.先有数据库和表
        
            create database day09;
            use day09;
            create table user(
                id int primary key auto_increment,
                username varchar(20),
                password varchar(20),
                email varchar(20),
                name varchar(20),
                sex varchar(10),
                birthday date,
                hobby varchar(50)
            );
            insert into user values (null,'tom','123','tom@126.com','tom','1','1988-01-01',null);
        2.创建工程
        3.复制页面
            修改login.html
                给用户名和密码添加name属性
                修改表单的action属性
                    action="http://localhost/day0901/login"
                添加method属性
                    method="post"
        4.导入jar包:
            驱动 dbutils c3p0
        5.导入工具类和配置文件
            datasourceUtils
            c3p0-config.xml(注意修改数据名称)
        6.创建servlet(LoginServlet: 路径 /login)
            接受用户名和密码
            调用service层(UserService)完成登录操作
            提示信息
        7.UserService
            login(username,password)
                调用dao
        8.dao
            通过用户名和密码查询数据库
            
    //////////////////////////
    serlvet总结:
    servlet的体系结构:(了解)
        Servlet:接口
            |
        GenericServlet:抽象类
            |
        HttpServlet:抽象类
            |
        自定义servlet
        
        servlet常用方法:
            void init(ServletConfig config):初始化
            void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
            void destroy():销毁
            
            ServletConfig getServletConfig() :获取当前servlet的配置对象
        
        GenericServlet常用方法:    
            除了service方法没有显示,其他都实现了
            空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
        
        HttpServlet常用方法:
            service做了实现,把参数强转,调用了重载的service方法
                重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
            doGet和doPost方法
        ////////////////////////////////
    servlet生命周期 ★★★
        void init(ServletConfig config):初始化
         * 初始化方法
         * 执行者:服务器
         * 执行次数:一次
         * 执行时机:默认第一次访问的时候
        void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
         * 服务
         * 执行者:服务器
         * 执行次数:请求一次执行一次
         * 执行时机:请求来的时候
        void destroy():销毁
         * 销毁
         * 执行者:服务器
         * 执行次数:只执行一次
         * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
         
         serlvet是单实例多线程
         默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
         每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
         当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.
    /////////////////////////////
    url-pattern的配置:★
        方式1:完全匹配  必须以"/"开始 例如: /hello /a/b/c
        方式2:目录匹配  必须"/"开始  以"*"结束   例如: /a/*  /*
        方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp  *.do  *.action
        
        优先级:
            完全匹配>目录匹配>后缀名匹配
     练习:
        有如下的一些映射关系:
            Servlet1 映射到 /abc/* 
            Servlet2 映射到 /*
            Servlet3 映射到 /abc 
            Servlet4 映射到 *.do 
        问题:
        当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet1。
        当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet3。
        当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet1。
        当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet2.
        当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet2。
    ////////////////////
    在servlet标签有一个子标签 load-on-startup
        作用:用来修改servlet的初始化时机
        取值:正整数  值越大优先级越低
    ///////////////////////
    当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
        若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息
    ///////////////////////////////////////
     路径的写法:
        相对路径:
            当前路径    ./ 或者 什么都不写
            上一级路径 ../
        绝对路径:(我们使用)
            带主机和协议的绝对路径(访问站外资源)
                http://www.itheima.com/xxxx
                http://localhost:80/day09/hello
            不带主机和协议的绝对路径
                /day09/hello(经常使用)
    /////////////////////////////
    案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面
    技术分析:
        定时刷新
    常见的响应头-refresh
        响应头格式:
            refresh:秒数;url=跳转的路径
        设置响应头:
            response.setHeader(String key,String value);设置字符串形式的响应头
            response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置
        设置定时刷新:
            response.setHeader("refresh","3;url=/day0901/login.htm");
    步骤分析:
        登录失败之后,修改业务逻辑
            打印之后添加一个头信息即可
            
    ///////////////////////////
    案例3-统计登录成功的总人次,
    需求:
        在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次
    技术分析:
        ServletContext
    ///////////////////////
    ServletContext:
        上下文(全局管理者)
        常用的方法:
            setAttribute(String key,Object value);//设置值
            Object getAttribute(String key);//获取值
            removeAttribute(String key)://移除值
    获取全局管理者:
        getServletContext():
    /////////////////////////////////
    步骤分析:
        1.在项目启动的时候,初始化登录次数
            在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
        2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
        3.然后将次数+1,让后将值设置回去
        4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可
    
    ///////////////////////////
    ServletConfig:(了解)
        servlet配置对象
        作用:
            1.获取当前servlet的名称
            2.获取当前servlet的初始化参数
            3.获取全局管理者
        方法:
            String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
            
            String  getInitParameter(String key):通过名称获取指定的参数值
            Enumeration getInitParameterNames() :获取所有的参数名称
                初始化参数是放在 web.xml文件 
                    servlet标签下子标签 init-param
                    
            ★getServletContext():获取全局管理者
        servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象
        传递给servlet,由servlet的getServletConfig方法获取
    ////////////////////////
    ServletContext:理解
        上下文(全局管理者)
        一个项目的引用.代表了当前项目.
        当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
        当项目被移除的时候或者服务器关闭的时候servletcontext销毁
        作用:
            1.获取全局的初始化参数
            2.共享资源(xxxAttribute)
            3.获取文件资源
            4.其他操作
        获取servletcontext:
            方式1:了解 
                getServletConfig().getServletContext()
            方式2:
                getServletContext()
        常用方法:
            1.了解
                String  getInitParameter(String key):通过名称获取指定的参数值
                Enumeration getInitParameterNames() :获取所有的参数名称    
                 在根标签下有一个 context-param子标签 用来存放初始化参数
                    <context-param>
                        <param-name>encoding</param-name>
                        <param-value>utf-8</param-value>
                    </context-param>
            2.xxxAttribute
            3.
                String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
                    getRealPath("/"):D:javaToolsapache-tomcat-7.0.52webappsday09
                InputStream getResourceAsStream(String path):以流的形式返回一个文件
            4.获取文件的mime类型  大类型/小类型
                String getMimeType(String 文件名称)
            
    //////////////////////////////////////////
    域对象:★★★
        servletcontext
        当成map集合
            常用方法:
                xxxAttribute()
        servletcontext创建和销毁:
            当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
            当项目被移除的时候或者服务器关闭的时候servletcontext销毁
        存放:
            共享的数据
    ////////////////////////
    ////////////////////////
    ////////////////////////
    ////////////////////////
    获取文件的路径:
        通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以
            类.class.getClassLoader().getResource("2.txt").getPath()
            
            
            
            
    ////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////
    上午回顾:
    http:超文本传输协议
        请求:
        响应:
    servlet:★
        本质上就是一个类,运行在服务器端的一个java小程序,生成动态web内容处理业务逻辑.
    编写servlet:
        1.编写一个类 继承了HttpServlet 重写了doGet()或者doPost()
        2.编写配置文件 
            注册servlet  
                <servlet>
                    <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                    <servlet-class>servlet的全限定名</servlet-class>
                </servlet>
            绑定路径
                <serlvet-mapping>
                    <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                    <url-pattern>访问路径 目前都是以"/"开始</url-pattern>
                </serlvet-mapping>
        3.访问路径:
            http://主机:端口号/项目名/路径
    servlet的体系结构:
        所有的servlet应该继承HttpServlet 间接的实现了Servlet接口
    httpServlet中的方法:
        service(ServletRequest request,ServletResponse response):在这个方法中 将两个参数强转,调用了重载service方法
            service(HttpServletRequest request,HttpServletResponse response):获取请求的方式,根据请求方式的不同调用相应doXxx方法
        doGet和doPost方法:用来处理我们自己业务逻辑
    
    servlet的生命周期 ★★★
    
    url-pattern的配置:
        完全匹配>目录匹配>后缀名匹配
        
    load-on-startup:修改servlet的初始化时机
    
    若我们自己的项目处理不了请求,服务器上有一个默认的servlet会帮我们处理
    
    /////////////////////////////
    servletConfig:
        servlet的配置对象:
        获取servlet名称 初始化参数
        获取全局管理者★ getServletContext()
    ////////////////
    servletContext:
        上下文
        作用:
            1.获取全局的初始化参数    
                getInitParameter("key")
            2.共享资源(域对象)
                xxxAttribute()
            3.获取资源
                getRealPath("/1.txt"):获取项目发布到服务器上位置的根目录
                getResourceAsStream("/1.txt"):以流的形式返回一个文件
            4.获取文件mime类型
                getMimeType(文件名称)
    域对象:
        servletcontext
        创建:
        销毁:
    //////////////////////////////
                
            
        
  • 相关阅读:
    【bzoj1901】dynamic ranking(带修改主席树)
    一堆乱七八糟绝不正经的排序算法
    bzoj2588 Spoj10628. count on a tree
    poj2104 K-th Number
    【bzoj 3595】: [Scoi2014]方伯伯的Oj
    bzoj1926: [Sdoi2010]粟粟的书架
    P3168 [CQOI2015]任务查询系统
    进程和线程
    History of AI
    es6
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/9966207.html
Copyright © 2011-2022 走看看