web 服务器接收客户端的请求并将结果返回客户端
结果: html 页面, 图片, 文件,......
Web 客户端
Web 客户端可以使用户向服务器提出请求, 并向用户展现请求的结果
浏览器知道如何与服务器通信, 并能够解释 HTML 代码并展现 Web 页.
HTML 和 HTTP
请求 / 响应方式
HTML 告诉浏览器怎样为用户显示内容
HTTP 是客户端和浏览器在 Web 上通信的协议
服务器使用 HTTP 向客户端发送 HTML
HTML
HTTP
基于 TCP/IP 协议
HTTP 请求包括: HTTP 方法(执行的动作), 访问的页面 URL, 表单参数
HTTP 1.1 method
告诉服务器请求的类型, 剩余的消息是如何被格式化的
GET, PUT, POST, TRACE, DELETE, OPTIONS, HEAD, CONNECT
GET
是最简单的请求, 它向服务器获取一个资源并将之发回
可以用 HTTP GET 向服务器发送少量的数据
一个 GET 例子
POST
向服务器请求资源, 同时可以发送一些表单数据
一个 POST 例子
发送数据用 POST 不用 GET 的理由
数据大小: GET 中的字符量按服务器不同有限制
安全性: 用 GET 发送的数据被附加到 URL 后面, 任何人可以看到. 不适于发送敏感数据
HTTP 响应包括: 状态码(请求是否成功), 内容类型(text/picture/HTML,etc), 内容(实际的 HTML, image, etc)
动态 Web 编程
常见的两种动态 Web 需求
动态内容
在服务器上储存数据
基本原理
初识 Servlet & JSP
First servlet, let's do it!
建立文件目录结构
编写 FirstServlet.java 代码, 并放到 src 目录中
编写部署描述符文件 Web.xml, 放在 etc 目录中
每个 Web 应用都有一个部署描述符文件(DD)
一个 DD 可以定义多个 servlets
- <servlet-name>
- 将
- < servlet>
- 元素绑定到
- < servlet-mapping>
- 元素
- <servlet-class>
- 是 Java 类
- <url-pattern>
- 是客户端用于请求 servlet 的名字
编写部署描述符文件 Web.xml, 放在 etc 目录中
在 tomcat 目录下建立目录树
在 project1 目录下, 编译 servlet
拷贝 FirstServlet.class 至 Web-INF/classes 拷贝 Web.xml 至 Web-INF 中
启动 Tomcat
打开浏览器到如下网址: http://localhost:8080/ch1/Serv1
How to... if JSP
Servlet container
servlet 没有 main()方法, 被容器控制
容器将 HTTP 请求和响应传给 servlet, 并调用 servlet 上的方法, 如 doPost()或 doGet()
servlet 容器提供的服务
通信支持
Servlet 可以通过容器与 Web 服务器通信
程序员不需自己建立 ServerSocket, 监听端口, 创建流等
寿命周期管理
容器控制 servlet 的 "生死"
容器负责加载类, 实例化和初始化 servlet, 调用 servlet 方法, 对 servlet 实例进行垃圾回收等工作
多线程支持
容器根据对 servlet 的请求, 自动创建 Java 线程
开发者仍要处理线程安全问题
声明式安全
用 xml 部署描述符配置安全, 无需硬编码
JSP 支持
将 JSP 转化成 Java 代码
The Code
容器怎样找到 servlet
Servlet-- 狡兔三窟
客户端名: URL
....../register/registerMe
部署名: 内部保密
EnrollServlet
真实名: 文件
SignUpServlet.class
Servlet 映射机制提高了应用程序的柔性和安全性!
The DD
DD 的好处
基本不需要修改经过测试的代码
可以利用 DD 优化应用程序性能, 甚至不写任何代码
使应用程序能够适应不同的资源, 如数据库, 不需要重新编译和测试代码
使得维护动态安全性变得非常容易, 如 ACL 和安全角色
可以让非程序员修改和部署 Web 应用程序, 而程序员关注更重要的事
MVC 设计模式初步讨论
模式说明
特点
MVC 将业务逻辑从 servlet 中分离, 放到模型 (Model) 中. 模型是可复用的 POJO, 是业务数据 (如购物车状态) 和操作这些数据的方法 (规则) 的组合.
多个视图可共享一个模型
控制器可以连接不同的模型与视图
增强了软件健壮性和复用性
来源: http://www.jianshu.com/p/7a61d982ee82