欢迎使用CSDN-markdown编辑器

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

    属性
        
    注释
        
    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 list=root.elements()
获取子元素的文本节点
String text=ele.elementText(“子元素名称”)
扩展:xpath
api:
List selectNodes(“表达式”);
Element selectSingleNode(“表达式”);
///////////////////////////////
xml约束:
作用:规定文档中可以出现那些元素和属性 及他们出现的顺序
分类:
DTD和SCHEMA
DTD:一个xml文档中只能有一个dtd约束
只要在文档上面看到 就说明使用的是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','[email protected]','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)(setAttribute,getAttribute,removeAttribute)
3.获取文件资源
4.其他操作
获取servletcontext:
方式1:了解
getServletConfig().getServletContext()
方式2:
getServletContext()
常用方法:
1.了解
String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
在根标签下有一个 context-param子标签 用来存放初始化参数

encoding
utf-8

2.xxxAttribute
3.
String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
getRealPath(“/”):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
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的全限定名

绑定路径

给servlet起个名字 名字唯一
访问路径 目前都是以”/”开始

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
创建:
销毁:
//////////////////////////////

你可能感兴趣的:(学习笔记)