JavaWeb技术栈
B/S架构:Browser/Server,浏览器/服务器架构模式,特点是客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可
好处:易于升级维护,服务器端升级之后,客户端无需任何部署就可以使用到新的版本
- 静态资源:HTML,CSS,javaScript,图像等,负责页面展示
- 动态资源:Servlet,JSP等,负责逻辑处理
- 数据库:负责存储数据
- HTTP协议:定义通信规则
- Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据
javaWeb项目结构
MVC 编程模式
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。
M即model模型是指模型表示业务规则。 在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。 它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
三层架构
JDBC
概念:JDBC(java DataBase Connectivity,数据库连接)就是使用java语言操作关系型数据库的一套API
大概步骤
-
创建工程,导入驱动jar包
-
注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 获取连接
Connection con = DriverManager.getConnection(url, usename, password);
- 定义SQL语句
String sql = "select……";
- 获取执行SQL对象
Statement st = con.createStatement();
- 执行SQL
st.executeUpdata(sql);
- 处理返回结果
JDBC的API详解
DIverManager
-
管理驱动
-
获取数据库连接
Connection
-
获取SQL执行对象
-
普通执行SQL对象
Statement createStatement();
-
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql);
-
-
管理事务
-
开启事务:
setAutoCommit(boolean autoCommit);/*true为自动提交事务,false为手动提交事务
-
提交事务:
commit();
-
回滚事务:
rollback();
-
Statement
-
执行SQL语句
int executeUpdate(sql);/* 执行DML,DDL语句*/ /*返回值:1)DML语句影响的行数 2)DDL语句执行后,执行成功也可能为0 */
ResultSet executeQuery(sql);/*执行DQL语句*/ /*返回值:ResultSet结果集对象*/
ResultSet
作用:封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql);//执行DQL语句,返回ResultSet对象
获取查询结果
- 光标的移动
boolen next();
/*
1)将光标从当前位置向前移动一行
2)判断当前行是否为有效行
*/
返回值(布尔类型):
- true:有效行,当前行有数据
- false:无效行,当前行没有数据
- 获取数据
String getString(int / String);
int getInt(int / String);
……
/*
参数:
int类型:列的编号,从1开始
String:列的名称
遍历结果的方法
-
步骤:
- 游标向下移动一行,并判断改行是否有效:next()
- 获取数据:getString(参数)
while(ResultSet.next()){ //获取数据 ResultSet.getString(参数); }
HTTP
**概念:**Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则
HTTP协议的特点:
-
基于TCP协议:面向连接,安全
-
基于请求-响应模型:一次请求对应一次响应
-
HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的
- 缺点:多次请求间不能共享数据。java中使用会话技术(Cookie,Session)来解决这个问题
- 优点:速度快
HTTP-请求数据格式
1. 请求数据结构:
-
请求行 :请求数据的第一行。其中GET表示请求方式,/表示请求资源的路径,HTTP/1.1表示请求协议版本
-
请求头: 第二行开始,格式为键值对
-
请求体: POST请求的最后一行,存放请求参数
2.常见的HTTP请求头:
- Host:表示请求的主机名
- User-Agent:浏览器版本
- Accept: 表示浏览器能接受的资源类型,如text/html
- Accept-Language: 表示浏览器偏好的语言
- Accept-Encoding: 表示浏览器可以支持的压缩类型
GET / HTTP/1.1
Host:www.baidu.com
Connection:keep-alive
Cache-Control:
User-Agent:
POST / HTTP/1.1
Host:www.baidu.com
Connection:keep-alive
Cache-Control:
User-Agent:
username=superbaby&password=123456
3.GET与POST请求的区别:
- GET的请求参数在请求行中,没有请求体。POST的请求参数在请求体中
- GET的请求参数大小有限制,POST没有
HTTP-响应数据格式
1.响应数据结构:
- 响应行: 响应数据的第一行,其中HTTP/1.1表示协议的版本,200表示状态码,OK表示状态码的描述
- 响应头: 第二行开始,格式为键值对
- 响应体: 最后一部分,存放响应数据
HTTP/1.1 200 OK
Serve:Tengine
Content-Type:text/html
Transfer-Encoding:chunked
<html>
……
</html>
2.常见的HTTP响应头:
- Content-Type:表示该响应内容的类型,例如text/html
- Content-Length:表示该响应内容的长度(字节数)
- Content-Encoding:表示该响应的压缩算法
- Cache-Control:指示客户端应如何缓存
3.状态码分类:
状态码分类 | 说明 |
---|---|
1xx | 响应中——临时状态码,表示请求已接受,告诉客户端应该继续请求或者如果它完成了就忽略它 |
2xx | 成功——表示请求已被成功接收,处理已完成 |
3xx | 重定向——重定向到其他地方:它让客户端再发起一个请求以完成整个处理 |
4xx | 客户端错误——处理发生错误,责任在客户端。 |
5xx | 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |
Web服务器
web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是“提供网上信息浏览服务”
Servlet
概述: Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。
一般使用其子类HttpServlet ,这里仅了解
1.快速入门
2.方法介绍
- 初始化方法,在Servlet被创建时执行,只执行一次
void init(ServletConfig config);
- 提供服务方法,每次Servlet被访问,都会调用该方法
void service(ServletRequest req, ServletResponse res)
- 销毁方法
void destroy();
- 获取ServletConfig对象(不常用)
ServletConfig getServletConfig();
- 获取Servlet信息
String getServletInfo();
3.生命周期
4.Request
Request获取请求参数的方法
方法 | 说明 |
---|---|
Map<String,String[]> getParameterMap() | 获取所有参数Map集合 |
String[] getParameterValues(String name) | 根据名称获取参数值(数组) |
String getParameter(String name) | 根据名称获取参数值(单个值) |
请求转发
5.Response
Cookie
**概念:**客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
Servelet中Cookie的基本使用:
-
创建Cookie对象,设置参数
Cookie cookie = new Cookie("key","value");
-
发送Cookie到客户端:使用response对象
response.addCookie(cookie);
-
获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
-
遍历数组获取每一个Cookie对象
for(Cookie cookie:cookies){ }
-
使用Cookie对象方法获取数据
cookie,getName(); cookie.getValue();
AJAX
概念: AJAX(Asynchronous JavaScript And XML)异步的JavaScript和XML
作用:
1. 与服务器进行数据交换,通过AJAX可以给服务器发送请求,并获取服务器响应的数据,使用的AJAX与服务器通讯,就可以使用HTML+AJAX来替代JSP页面了
2. **异步交互**:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想,用户名检验
同步与异步
JSON
**概念:**JavaScript对象表示法(JavaScript Obhject Notation),由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输
基础语法:
定义:
var 变量名 = {
"key1":value1,
"key2":value2,
……
};
示例:
var hy = {
"name":"hhm",
"age": 20,
"addr":["北京","广州","河源"]
};