回顾:

web相关概念:

web资源:
分类:
静态web资源
动态web资源
技术:
html css js ....
servlet jsp
软件架构:
B/S C/S
相同:
都是基于请求和响应
浏览器发送给服务器的内容叫请求---- request
服务器返回给浏览器的内容叫响应---- response
请求和响应是成对出现的,一次请求必须对应一次响应,先有请求后有响应.
不同:
web服务器: 将我们的web项目发布出去,这样一来别人就可以通过浏览器访问到我们服务器上的web资源了.
tomcat:
下载 和 安装
目录:
bin
conf
webapps
work: 存放jsp页面转成的java类和编译后的class文件
log:
temp:
lib:
启动和关闭:
外部启动: bin/startup.bat (批处理文件)
外部关闭: bin/shutdown.bat
访问:
格式: http://主机地址:端口
默认端口: 8080
常见问题:
一闪而过: 配置java_home
端口冲突:
修改tomcat端口号
端口取值: 0-65535 (0-1024不建议)
修改server.xml配置文件70行
http协议默认访问端口: 80

web项目:

                    项目名称:
|- html 

servlet:

本质上就是运行在服务器上的java类,通过浏览器可以直接访问

一个类若向通过浏览器被访问到,那么该类必须直接或间接实现servlet接口
接口: 指定规范

入门:br/>2.5:
1.编写一个类,实现servlet接口,重写抽象方法
2.在web.xml文件中配置servlet
a.注册servlet
b.给我们的servlet绑定浏览器访问的路径
3.0:
@WebServlet(name="",urlpattern="/访问路径")
API:
执行流程:

http协议-请求

协议:

规定内容的传输的格式

http协议:

用来制定互联网上数据的传输的格式

组成:

浏览器发送给服务器的内容  请求 (规定请求数据的格式)

服务器返回给浏览器的内容  响应 (规定响应数据的格式)

抓包:

通过浏览器的抓包就可以查看当前请求所包含的请求信息和响应信息.

请求的格式:

请求行 请求头 请求体

请求行:

    格式: 请求方式  请求资源  协议/版本

        eg:  GET /day03/index.html HTTP/1.1

    请求方式:

        get:

            请求参数会在地址栏上显示,提交数据量受限,不安全

        post:

            请求参数不会在地址栏上显示,提交数据量不受限制,相对安全

    在地址栏中直接输入请求资源  -- get请求

    超链接发送的请求是   --  get请求

    location.href = 路径  --  get请求

    form表单默认请求方式  -- get请求

    截至目前为止,我们所接触到的post请求只有一个 form 表单上method=post;

请求头: 约束请求参数的类型和格式

格式: key/values的格式 (values可以为多个值的)

常见的请求头:(了解)\

名称 说明
Accept 支持数据类型
Accept-Charset 字符集
Accept-Encoding 支持压缩
Accept-Language 语言环境
Host 访问主机
If-Modified-Since 缓存文件的最后修改时间
Referer ★ 来自哪个页面、防盗链
User-Agent ★ 用户代理
Cookie ★
Connection close/Keep-Alive --链接状态

重要的头:
Referer User-Agent Cookie

请求体:

存放post请求的参数,get请求方式没有请求体.

只有表单提交的时候明确了method="post"这时候是post请求,其他的都是get请求

响应的格式:(明天)

响应行 响应头 响应体

Request

操作request对象获取请求携带的数据:

请求来的时候,tomcat服务器会帮我们解析请求,并将请求航头条的信息封装到ServletRequest对象,
在HttpServlet中已经将ServletRequest转成了HttpServletRequest
    ServletRequest ---> HttpServletRequest 

HttpServletRequest: 查询javaEE API

操作请求行:

请求方式 请求路径 协议/版本

重要方法

        String getMethod(): 获取请求方式

        ★String getContextPath():   获取项目路径    /web_day03_request_01

        String getRemoteAddr(): 获取请求者的ip

        int getLocalPort():     获取端口 

了解的方法

/day03/row?username=tom&pwd=123

        String getRequestURI(): 获取请求资源(不带get请求的参数)

        String getQueryString():    获取get请求参数以一个字符串返回get请求的参数

        String getProtocol():   获取协议和版本

操作请求头:

重要方法:★

            String getHeader(String name):      以字符串形式返回一个请求头的值

了解的方法:

            Enumration getHeaderNames():    获取所有请求头的名称

常用的请求头:

            user-agent:用户代理

            referer:页面的来源   防盗链

操作请求体: 操作请求参数

post请求携带的参数信息,get请求没有请求体

tomcat7之前不论是get或post都会有乱码问题

tomcat8以后get请求不再有乱码问题

重要方法:

            String getParameter(String name):

                获取指定请求参数的值,如果不存在返回null

            String[] getParameterValues(String name)

                获取指定请求参数的多个值数组,如果不存在返回null

            ★ Map   getParameterMap():   Map

                获取所有的请求参数名称和值

请求的中文乱码

            request.setCharacterEncoding("utf-8");  

                处理post请求乱码问题
                ==Request作用域:==

request的生命周期:

    创建:  请求来的时候,tomcat为当前请求创建request对象

    销毁:  响应信息生成的时候

    作用范围: 当前请求中 

请求转发(Request):

    一次请求的延续,将请求交给其他servlet来处理

    请求链上的servlet共享Request对象

RequestDispatcher 请求转发器

        获取RequestDispatcher:

            request.getRequestDispatcher("/内部路径");

        方法:

            forward(request,response);

请求转发时浏览器地址栏显示的是第一个servlet的地址

请求转发发送的是1次

请求转发可以共享request作用域

request域对象API:

        setAttribute(string name,object o);

            设置相同属性名称的参数,就是修改

        getAttribute(name);

        removeAttribute(name);

今日案例:

案例1-防盗链的使用:
需求分析:
用户在下载时,如果是从download.html页面发送的下载请求,就允许用户下载
如果下载请求不是来自于download.html页面,那么就不允许下载
技术分析:
防盗链: referer


案例2-用户登录
需求分析:
当用户在登录页面上,输入完用户名和密码后,点击"登陆"按钮时,向服务器发送一个登录的请求,
服务器接收请求,并获取用户名和密码,处理登录的逻辑:
    处理结果:
        登录成功: 用户名和密码都对
        登录失败: 用户名或密码错误
        代码异常: 当前功能正在维护....

技术分析:
html:
表单
servlet:

JDBCTemplate:

步骤分析:
环境搭建:
1.创建数据库表
2.创建web项目和包结构
3.导入jar包
4.导入工具类
5.导入配置文件(修改)
6.导入前端页面

a.编写前端页面
    form:
        username:
        password:
    url: login
b.编写后台
    web: servlet所在的那一层
        1.编写loginServlet
        2.在servlet中获取用户名和密码
        3.调用service处理业务逻辑
        User user = service.login(username,password);
        4.判断执行结果,生成响应信息
    service: 处理业务逻辑
        login(username,password)
        {
            // 调用dao
            return dao.login(username,password);
        }
    dao: 持久层
        login(username,password){
            // 创建JdbcTemplate对象
            // 编写sql