服务器
简介
分类
B/S browser service
对带宽要求更高(即便都联网情况下,CS的图片等资源已经下载好,只需要很少流量资源)
C/S
C/S client service
对内存、硬盘存储容量要求高
画面更加精致
网络编程三要素
要素 | 特点 | 作用 | 注意事项 |
---|---|---|---|
ip | 唯一的 | 标识网络中的设备 | |
端口号 | 唯一的 | 标识设备上的应用 | 范围0~65535 系统应用通常是 0 ~1024 |
传输协议 | 网络中数据传输的规范 | 主要包括 http tcp udp |
服务器
服务器软件:tomcat 等(接收请求并响应)(tomcat是Apache的)
还有Oracle的webLogic 等
服务器:装有服务器软件的计算机
tomecat目录结构
bin可执行文件
webapps项目存放
lib依赖包
temp临时文件
logs日志文件
前后端交互基本流程
前后端交互TEST
1.配置
数据库依赖包
数据库连接驱动
c3p0依赖包
c3p0和web的xml文件
2.绘制前端
首页
功能页面
3.后端功能实现
JDBCutils,Dao,Daoimpl等
4.实现前后端连接
创建servlet类(继承HTTPservlet重写doget dopost方法 或 实现Servlet接口重写5个方法),调用Dao对象的不同对应方法,分别对应设置为各个表单页面的提交路径
Request 和 Response
HttpServletRequest
request对象/httprequest对象——服务器自动创建,可以直接使用;
请求行
getMethod
获取提交方式
getContextPath
获取虚拟目录(即项目名,不包括后面的服务器名和页面名)
用于jsp中动态获取虚拟目录,以防项目名更改后所有表单都要改action指向的路径
getLocaladdr
getProtocal
获取请求的版本和协议(如http 1.1)
getquerystring获取提交的数据
getremoteaddr获取访问服务器的地址
getUri
获取从虚拟路径直到访问的页面
URI:统一资源标识符(资源在本地的地址标识)
getUrl
获取从服务器地址到所访问的页面的完整路径
URL:统一资源定位符(网络中的资源定位,所会带地址)
请求头
getheader(键字符串)
获取请求头中某个类型的数据
主要的键:
referer 用于防盗链
如如果refer里不包含本官网即指定合作网站的信息,视为防盗链,设置禁止访问
user_agent 用于根据不同版本浏览器调整设置
getHeadNames()
获取所欲请求头中的键和值组成的枚举Enumeration对象
(可以通过迭代器 hasNextElement() NextElement方法遍历得到所有请求头的键值)
请求体(存取表单提交的数据)
getparameter(name)?
返回被提交过来的参数中键=name的的参数的值
getparameternames()
返回被提交过来的参数中的所有键
getparametervalues(name)
返回被提交过来的参数中的所有 键=name的参数的值
getparametermap()
返回被提交过来的 键=name,值=String[]的map集合
请求转发
- 使用方式
-
获取转发器
getRequestDispatcher(“内部资源地址,如HTML或另一个servlet”) -
执行转发
转发器.forward(request,response);
- 特点
- 转发器只能转发到项目内部资源(所以也不能写项目名,会自动在前面拼接项目名的)
浏览器访问服务器属于从外部访问(浏览器是外部资源)需要写项目名;服务器内的servlet之间或servlet到页面都是内部资源互相访问 - 请求转发地址栏的地址并不变化
从哪个页面开始转发,地址留在哪个页面,并不会跳转成转发到的页面/服务器地址;(无论请求转发多少次,请求都只执行一次,request对象也都是那一个)
request-域对象
四种域对象
- pageContext(jsp中的)
- ServletContext 一次服务器的运行(服务器开始到关闭)
- HTTPSession 一次会话(浏览器开启到关闭)
- HttpSerVletRequest 一次请求(地址栏回车一次请求(可以包含多次转发))
通用方法(域对象中存储的数据存取)
-
setAttribute(String,Object);
-
getAttribute(String);
如果键=String不存在(null),返回null -
removeAttribute(String);
HttpServletResponse
重定向(可以访问外部)
response.sendRedirect(“从项目名开始的完整虚拟目录的目标地址”)
- 特点
-
重定向可以访问外部资源
-
重定向地址栏的地址会变化
会变成重新定向到的页面/服务器地址;(每次都是原页面驳回并告知浏览器重定向至新资源,于是重新请求新资源;每次重定向,执行2次请求)
- 区别
请求转发 | 重定向 |
---|---|
只能访问内部资源 | 可以访问外部 |
访问资源不需要写虚拟目录 | 需要写虚拟目录 |
可以用request域、session域、 servletcontext域传值 | 只能用session servletcontext域传值 |
地址栏不变 | 地址栏变化 |
不重新请求 | 每次重新请求 |
服务器行为 | 客户端行为 |
性能优 | 性能相对差 |
java独有 | 其他语言也都有 |
request存的值,只能用请求转发传递,用request取
请求转发和重定向之后,response对象已经被提交,不能再进行请求转发/重定向;
请求转发和重定向之后,非请求转发/重定向的其他语句可以执行;
请求转发后写其他语句:执行完请求转发,才执行其他语句
重定向后写其他语句:执行完其他语句,再执行重定向
状态码
设置状态码response.setStatus()
-
4**
404 资源未找到:请求的路径存在错误
405 提交方式有误:提交方式没有对象的doXX方法 -
2** 成功
-
1** 客户端向服务器请求数据但没有完成
-
3**
304 访问缓存
302 重定向response.sendredirect(“重定向的地址”) 等价于 response.setStatus(302); response.setHeader("Location","重定向的目标地址")
-
5** 服务器异常
响应头 response.setHeader(“键”,“值”)
键 | 作用 | 值 | 简便写法 |
---|---|---|---|
location | 用于重定向 | 重定向的目标地址 | response.sendredirect(“重定向的地址”) |
contenttype | 用于告知浏览器内容的格式 | 一般为"text/html;charset=utf-8" | response.setContentType(“text/html;charset=utf-8”) |
status | 用于重定向 | 302 | response.sendredirect(“重定向的地址”) 等价于 response.setStatus(302); response.setHeader(“Location”,“重定向的目标地址”) |
响应行
响应体
session 和 servletContext
request
一般用于请求转发 ,存储页面跳转中的提示信息
servletContext
一般用于存储全局配置信息(不因用户而异的信息) 数据库路径、图标路径等
getrealpath
根据项目中的相对路径
获取文件的绝对路径
以便读写文件、配置信息
session
其他大部分场景(购物车、免登陆)使用
(因为可以设置超时时间,关了浏览器之后一定时间(可以很长)内都可以保存数据)