servlet(访问路径 登录次数)

xml:
    可扩展的标签语言
    标签可以自定义
    作用:配置文件
        声明 首行顶格写
        元素
            

        属性
            "value">
        注释
            --注释内容-->
        CDATA 原样输出
            

XML的解析:
    sax:逐行解析,只能查询
    dom:一次性将文档加载到内存,形成一棵树,可以进行crud操作

通过dom4j进行查询操作
    1、导入jar包
    2、获取document
        Document doc = new SAXReader().read(文件路径);
    3、获取根结点
        Element root = doc.getRootElement();
    4、获取其他结点
        获取属性节点
            String value = root.attributeValue("属性名");

        获取所有的子元素
            List list = root.elements();

        获取子元素的文本节点
            String text = ele.elementText("子元素名称")

扩展:xpath 需要引入jar包
    api:
        List selectNodes("表达式")
        Element selectSingleNode("表达式")

xml约束:
    作用:规定文档中可以出现哪些元素和属性及他们出现的顺序
    分类:
        DTD和SCHEMA
    DTD:一个xml文档中只能有一个dtd约束
        只要在文档上面看到说明使用的是dtd约束

    正则  *任意次 ?0次或1次 +至少1次 ,顺序 |或 ()分组

    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下
    改server.xml 
    改catlina

访问路径
    http://主机:端口号/项目名称/资源路径

http:
    超文本传输协议
        规定数据的格式
    浏览器往服务器发送---请求
    服务器往浏览器回显---响应

请求(request):
    组成部分:
        请求行 请求头 请求体
        格式:请求方式 访问的资源 协议/版本

    请求行:请求信息的第一行
        例如:GET /xxx/1.html HTTP/1.1
            get会把参数放在url的后面 post不会
            get参数大小有限制 post没有
            get请求没有请求体 post请求有请求体 请求参数妨碍请求体中
        1.0的http协议在请求一次产生一个链接 回来之后就断开 1.1会保留一段时间
    请求头:请求信息的第二行到空行结束
        格式:key/value(value可以是多个值)
        常见的请求头
            Accept:text/html,image/* --支持数据类型 text/html text/css text/javascript 大类型/小类型 mime类型
            Accept-Charset:ISO-8859-1 --字符集
            Accpet-Encoding:gzip --支持压缩
            Accpet-Language:zh-cn --语言环境
            Host:www.baidu.com   -- 访问主机
            If-Modified-Since:Tue,12 Jul 2018 10:10:11 GMT --缓存文件的最后修改时间
            Referer:https://developer.mozilla.org/zh-CN/docs/Web/HTTP --来自哪个网页、防盗链
            User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0 -- 浏览器内核 MSIE是ie 
            Cookie 
            Connection:close/keep alive --连接状态
            Date:Fri, 03 Aug 2018 01:41:42 GMT --时间

    请求体:空行以下的内容
        只有post才有请求体 get请求参数 http://xxx?username=to&password=11

响应(response):
    组成部分:
        响应行 响应头 响应体
    响应行:响应信息的第一行
        格式:协议/版本 状态码 状态码说明
        例如:HTTP/1.1 200 OK
        状态码:
            200 正常响应成功
            302 重定向
            304 读缓存
            404 用户操作资源不存在
            500 服务器内部异常
    响应头:从响应信息的第二行到空行结束
        格式:key/value(value可以是多个值) 
        常见的头
            Location:xxx --跳转方向 和302一起使用的
            Server:apache tomcat --服务器型号 不安全 一般不显示
            Content-Encoding:gzip --数据压缩
            Conent-Length:80 --数据长度
            Contetn-Language:zh-cn --语言环境
            Content-Type:text/html;charset=GB2312 --数据类型
            Last-Modified:Tue,12 Jul 2018 10:10:11 GMT --最后修改时间
            Refresh:1;url=xxx --定时刷新
            Content-Dispositiom:attachment:filename=xx.zip --下载
            Set-Cookie:SS=SS=SS_A;path=/search
            Expires:-1 --缓存
            Cache-Control:no-cache --缓存 
            Pragma:no-cache --缓存 
            Connection:keep-alive --连接
    响应体:空行以下的内容
        页面上展示的内容 

登录
在页面上输入用户名和密码,提交到服务器上,服务器用用户名和密码在数据库中查找有无此用户
    若有,则提示登录成功
    若无,则提示用户名密码不匹配

需要:
    表单
    servlet
    请求(request)
    响应(response)

表单:
    收集用户数据
    所有的字段要提交到服务器 需要有name属性
    提交的地址 action    
    请求方式:post
需要把tomcat的jar包整合进来(用config build path中的add library)
servlet
    动态的web开发技术,本质上就是一个类,运行在服务器端的一个java小程序
    处理业务逻辑(代码),生成动态的web资源
编写一个servlet步骤
    1、编写一个类
        a、继承HttpServlet
        b、重新doGet或者doPost方法
    2、编写配置文件(web-inf/web.xml)
        a、注册servlet
        b、绑定路径
    3、访问
        http://主机:端口号/项目名/路径

接受参数:key=value 
    String value = request.getParameter("key")
    例如: http://localhost/day02/hello?username=to
        request.getParameter("username")可以获取到to

回写内容
    response 
    response.getWriter().print("success");
    处理响应数据的中文乱码
        resp.setContentType("text/html;charset=utf-8");//建议放在第一行

1、有数据库和表
2、创建工程
3、复制页面
    给用户名和密码添加name属性
    修改表单的action属性
        action="http://localhost/day02/login"
    添加method属性
        methos="post"
4、导入jar包
    驱动 dbutils c3p0
5、导入工具类和配置文件
    datasourceUtils
    c3p0-config.xml(修改所需的)
6、创建servlet(LoginServlet:路径 /login)
    接受用户名和密码
    调用service层(UserService)完成登录操作
    提示信息
7、UserService
    login(username,password)
        调用dao
8、dao
    通过用户名和密码查询数据库


servlet的体系机构
    servlet:接口

    GenericServlet:抽象类

    HttpServlet:抽象类

    自定义servlet

    servlet常用方法
        void init(ServletConfig config):初始化
        void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
        void destory():销毁

        ServletConfig getServletConfig():获取当前servlet的配置对象
        String getServletInfo();返回关于servlet的信息 比如作者,版本和版权

    GenericServlet常用方法
        除了service方法没有实现,其他都实现了
        空参的init()若我们自己想要对servlet进行初始化操作,重写这个init()方法即可

    HttpServlet常用方法
        service做了实现,把参数强转,调用了重载的service方法
            重载的service方法获取请求的方式,根据请求方式的不同调用响应doXxx()方法
        doGet和doPost方法

    servlet 生命周期
        void init(ServletConfig config):初始化
             * 初始化方法
             * 执行者:服务器
             * 执行次数:一次
             * 执行时机:默认第一次执行
             * 不用调用super.init(config) 直接重写这个空参就可以完成在初始化的时候 添加所需
        void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
             * 服务
             * 执行者:服务器
             * 执行次数:请求一次执行一次
             * 执行时机:请求来的时候

        void destory():销毁
             * 服务
             * 执行者:服务器
             * 执行次数:一次
             * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候(重新载入)

        servlet是单实例多线程
            默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作,并调用一次service方法
            每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
            当servlet被移除的时候或者服务器正常关闭的时候,服务器调用servlet的destory方法实现销毁操作

        servlet的url-pattern与名字最相近的servlet响应
        后缀名匹配 *.jsp
load-on-startup 
    用来修改servlet的初始化时机
    取值:正整数 值越大 优先级越低

当配置文件里面没有指定配置的话会查找tomcat的web.xml
    若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理

路径的写法
    相对路径
        当前路径  ./或者 什么都不写
        上一级路径 ../
    绝对路径 
        带主机和协议的绝对路径(站外资源)
            http://www.xxx.com/xxx
            http://localhost:8080/day02/xxx
        不带主机和协议的绝对路径
            /day02/xxx 已经连接了主机带上了协议所以可以不用加

当登录失败,提示"用户名和密码不匹配"3秒后跳转到登录页面
    定时刷新 
常见的响应头-refresh
    响应头格式:
        refresh:秒数;url=跳转的路径
    设置响应头
        response.setHeader(String key,String value);设置字符串形式的响应头
        response.addHeader(String key,String value);追加响应头,若之前设置过这个,则追加,若没有设置过,则设置
    设置定时刷新:
        response.setHeader("refresh","3;url=/day02/login.html");

步骤分析:
    登录失败之后,修改业务逻辑
        打印之后添加一个头信息即可

统计登录成功的总人次
    在一个用户登录成功之后,获取之前登录成功总人次,将次数加一。在访问另一个servlet的时候,显示登录成功的总人次
    ServletContext

ServletContext(application)
    上下文(全局管理者|域对象)
    常用的方法:
        setAttribute(String key,Object value);//设置值
        Object getAttribute(String key);//获取值
        removeAttribute(String key);//移除值

获取全局管理者
    getServletContext();

1、在项目启动的时候,初始化登录次数
    在loginServlet的init()方法中获取全局管理者,将值初始化为0,放入servletContext上
2、登录成功后,在loginServlet中获取全局管理者,获取登录成功的总次数
3、然后将次数+1,然后将值设置后去
4、当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上调用出来即可

还需要在web.xml中加入<load-on-startup>2load-on-startup> 

修改web project settings 不然访问的是括号内的内容

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对象
        当项目被移除或者服务器关闭的时候这个对象销毁
    作用: 
        1、获取全局的初始参数
        2、共享资源(xxxAttribute)
        3、获取文件资源
        4、其他操作
    获取servletContext
        方式1 
            getServletConfig().getServletContext
        方式2(因为实现了servletConfig所以有getServletContext这个方法)
            getServletContext
    常用方法 
        1、tring getInitParameter(String key):通过名称获取指定的参数值
           Enumeration getInitParameterNames() :获取所有的参数名称
            在根标签下有一个context-param子标签 用来存放初始化参数
                  
                    encoding
                    utf-8
                  
        2、xxxAttribute
        3、String getRealPath(String path);获取文件部署到tomcat上的真实路径(带tomcat路径)
            getRealPath(""):G:\apache-tomcat-8.5.27\webapps\day02\

        InputStream getResourceAsStream(String path); 以流的形式返回一个文件 用于下载
        4、获取文件的mime类型 大类型/小类型
        String getMimeType(String 文件名称)
        servletContext.getMimeType("1.air")
         在tomcat\conf\web.xml有针对后缀名返回mime

域对象
    servletContext 
    当成map集合
        常用方法    
            xxxAttribute()
    servletContext创建和销毁
        当项目启动的时候,服务器为每一个web项目创建一个servletContext对象
        当项目被移除或者服务器关闭的时候这个对象销毁
    存放 
        共享的数据

获取文件的路径 
    通过类加载器获取文件:文件放在classes目录下
        类.class.getClassLoader().getResource("1.txt").getPath();  WEB-INF/classes 可以通过../../到WebContent目录

http:超文本传输协议
    请求
    响应 
servlet 
    本质上就是一个类,运行在服务器端的一个java小程序,生成动态web内容处理业务逻辑
编写servlet 
    1、编写一个类 继承HttpServlet 重写了doGet()或者doPost()
    2、编写配置文件 
        注册servlet 
             
                给servlet起个名字 名字唯一
                servlet的全限定名
              
        绑定路径
              
                给servlet起个名字 名字唯一
                访问路径 目前都是以"/"开始
              
    3、访问路径 
        http://主机:端口号/项目名/路径

servlet的体系机构 
    所有的servlet应该继承HttpServlet 简介的实现了Servlet接口
HttpServlet中的方法
    service(ServletRequest request,ServletResponse response):将两个参数强转,调用了重载service方法
    protected void service(HttpServletRequest req, HttpServletResponse resp) 获取请求的方式,根据请求方式的不同调用响应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 
    创建 
    销毁

你可能感兴趣的:(javaweb)