1.BS与CS
*CS:客户端服务器架构模式
优点:充分利用客户端机器的资源,减轻服务器的负荷
缺点:需要安装;升级维护成本较高
*BS:浏览器服务器架构模式
优点:客户端不需要安装,维护成本较低
缺点:所有计算和存储任务都是放在服务器端尽心的,服务器负荷较重;在服务器端计算完成之后把结果再传给客户端,因此客户端和服务器端会进行非常频繁的数据通信,从而网络负荷较重
2.Tomcat简介
*Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
*部署(deploy):把一个项目放到web容器里,项目的名字是context root
*Tomcat目录结构:
bin:可执行文件目录
conf:配置文件目录
lib:存放lib的目录
logs:日志文件目录
webapps:项目部署的目录
work:工作目录
temp:临时目录
*配置java环境变量,双击bin目录下的startup.bat启动Tomcat
(启动成功)
*http://localhost:8080/,访问Tomcat主页,确定启动成功
3.IDEA下操作Tomcat
(1)新建项目/模块->右键,add Framework Support->选择Web Application->ok
(2)在web下新建html文件,文件与WEB-INF同级:
(3)部署到Tomcat上
首先在IDEA上配置Tomcat,点击Add
点左上角加号,找到Tomcat Server-local
选择Tomcat文件位置,到bin上一级,点击Apply
选择Deployment,点击+,点击Artifact,找到要部署的项目
可以任意修改项目名,点击Apply
热部署,Apply
(4)debug测试
点击右上角的debug进行测试
4.Servlet入门
(1)add.html
(2)写AddServlet类,继承HttpServlet,HttpServlet是外部类,需要导入Tomcat依赖:
(3)在WEB-INF下的web.xml里写入映射关系
(4)创建DAO、Bean、连接数据库
(5)在servlet里写入相应操作
5.servlet中文乱码
6.Servlet继承关系
*HttpServlet->GenericServlet->Servlet
*Servlet中的核心方法:init()、service()、destory()
*service()方法:
当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)
在HttpServlet中会分析请求的方式:get/post/head/delete···,再决定调用哪个do开头的方法
自己创建的子类一定要重写doxxx方法,否则会出现405页面
7.Servlet生命周期
*生命周期:从出生到死亡的过程,对应Servlet中的三个方法:init()、service()、destroy()
*默认情况下:
第一次接收请求时,Servlet会进行实例化(调用构造方法)、初始化、服务
从第二次请求开始,每次都只调用服务
当容器关闭时,其中的所有servlet实例会被销毁,调用销毁方法
*可以通过<load-on-startup>来设置servlet启动的先后顺序,数字越小启动越早,最小值是0
*Servlet在容器中是单例的、线程不安全的
8.HTTP协议
*HTTP:超文本传输协议
*客户端向服务器端发送http请求,请求包含三个部分:
请求行、请求头(请求消息头)、请求体
*请求行包含三个信息:
请求的方式、请求的url、请求的协议(一般都是HTTP1.1)
*请求消息头中包含了很多客户端要告诉服务器的信息,比如浏览器型号、版本、接收内容的类型
*请求体分三种情况:
get方式,没有请求体,但有一个queryString
post方式,有请求体,form data
json格式,有请求体,request payload
*响应也包含三个部分:
响应行、响应头、响应体
*响应行包含三个信息:
协议、响应状态码(200正常响应、404找不到资源、405请求方式不支持、500服务器内部错误)、响应状态
*响应头包含服务器的信息
*响应体响应的实际内容
9.session
*HTTP无状态:服务器无法判断两次请求是否来自于同一个客户端
*通过会话跟踪技术解决无状态问题
*会话跟踪技术:
客户端第一次给服务器发送请求时,服务器获取session获取不到,则创建新的响应给客户端
客户端再次给服务器发送请求时,会把session带给服务器,服务器判断这次和上次的session一样,则为同一个客户端
常用的API:
request.getSession()->获取当前session,如果没有则创建一个
session.getId()->获取session的id
session.isNew()->判断当前session是否是新的
session.getMaxInactiveInterval()->session的非激活间隔时长,默认1800秒
session.setMaxInactiveInterval()->
session.invalidate()->强制性让会话失效
*session测试:
访问两次:
输出结果:
10.session保存/获取作用域
*常用的API:
session.setAttribute(k,v)//设置作用域
session.getAttribute(k)//获取作用域
removeAttribute(k)//删除作用域
11.服务器内部转发以及客户端重定向
*服务器内部转发:
*客户端重定向: