一、WEB开发概述
1.1、WEB资源介绍
WEB:网页 因特网开发/web开发/网站开发
Web资源:在浏览器上看到的任何资源(数据信息)都称作为web资源
作用:展示数据
分类:静态资源
源代码不变,展示效果不变(html/css/js 图片 视频)
动态资源
展示内容会根据数据的改变而改变(由程序来控制) servlet 、jsp
应用: 时间网页 微博热搜 天气网页
1.2、软件架构
目前市场上有两种流行的软件架构:
C/S架构:Client/Server 客户端/服务器。要求用户安装一个客户端程序。
常见应用:qq音乐、王者荣耀、网易云、消消乐、抖音、快手、头条
优点:
1.用户体验好,效果炫
2.对信息安全的控制较强
3.应用服务器运行数据负荷较轻,部分计算功能在客户端完成。
缺点:(客户端程序上)
1.占用硬盘空间
2.维护麻烦
3.安装使用依赖其他条件
B/S架构:Browser/Server 浏览器/服务器 。通过浏览器与服务器交互,不需要安装其他程序
常见应用:12306、淘宝、京东、去哪儿
优点:(没有客户端,直接使用浏览器即可)
1.维护和升级简单,无缝升级。
2.不用必须安装程序,操作系统内置了浏览器。大大减少了使用成本
缺点:(效果一般、体验一般、服务器压力极大)
1.动画效果受浏览器限制
2.对信息安全控制较差。例如:网银就需要使用U盾,在浏览器端加密。
3.应用服务器运行数据负荷较重。大部分计算都在服务器端,增加服务器压力。使用Ajax可以改善部分用户体验。
1.3、WEB通信模式 (B/S)
1、浏览器向服务器发送请求,去请求某些资源
2、服务器接收到请求之后,处理请求
3、寻找对应的资源,将对应资源响应给浏览器
4、浏览器拿到这些资源,负责解析,展示结果
请求和响应是成对出现的。 而且必须先有请求,再有响应 (类似与一问一答)
1.4、URL请求路径
URL (Uniform Resource Locator) ,统一资源定位符(器),是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。
用于标识互联网上某个资源的具体位置,相当于内网路径中的绝对路径
完整格式如下:
协议://域名:端口号/资源位置?参数=值
协议,http、https、ftp等 【必须写】
域名,域名或IP地址,都可以访问WEB资源【必须写】
端口号,程序必须使用端口号,才可以让另一个计算机访问
资源位置,用于描述WEB资源再服务器上的位置。
参数=值,浏览器和服务器交互传递的数据
例如:
https://www.baidu.com/
1.5、WEB服务器软件
服务器:在电脑上安装一个服务器软件,你的电脑就是一台服务器。
J2EE 企业级开发Java规范。标准规范包括:servlet、jsp、jdbc、xml、jta、javamail等。在java中规范就是接口。J2EE又称为JavaEE。
WEB服务器对JavaEE规范部分或全部支持(实现),也就是WEB服务器实现部分或全部接口。
常见的WEB服务器:
1.Tomcat:Apache组织提供一个免费的小型的服务器软件。支持Servlet和JSP规范。
应用范围最广
2.WebLogic:Bea公司的一个收费的大型的服务器软件,后被Oracle收购。支持EE的所有的规范
运算能力较强、稳定性较高
3.WebSphere:IBM公司的一个收费的超大型的服务器软件,支持EE的所有的规范。
数据库使用DB2,机器使用IBM系列
银行、金融、证券
运算能力无人出其左右,
稳定性极强
4.JBoss:是一个基于J2EE的开放源代码的应用服务器。JBoss是一个管理EJB的容器和服务器,JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。(总体均一般)
二、TOMCAT
2.1、概述
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
支持Servlet和JSP 规范,且最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。
2.2、Tomcat版本
tomcat 目前存在很多版本,希望大家了解tomcat的版本,从而知道自己的创建的项目使用的是几版本规范,不同版本的规范技术可能不同。
2.3、安装Tomcat
步骤一:.下载一个tomcat服务器软件
步骤二:解压下载好的zip文件.
将解压后的文件copy到一个没有中文和空格的路径下即可.(不要有中文路径和空格以及特殊符号)
2.4、Tomcat目录结构
2.5、Tomcat启动和访问、关闭
2.5.1、启动(双击)
2.5.2、访问
(访问http://localhost:8080/ 如果出现一只猫,代表启动成功)
2.5.3、关闭
2.5.3.1、 正常关闭
双击
2.5.3.2、 非正常关闭
Ctrl + c 进行关闭
点叉直接关闭
电脑关机(从任务管理器关闭)
2.6、Tomcat常见问题
2.6.1、JAVA_HOME的配置
问题:窗口一黑,一闪而过
解决:配置JAVA_HOME环境变量
2.6.2、端口号冲突
问题:端口号被占用
解决:
1.更换端口号
2.关闭已开启的服务器
2.7、web项目目录结构
在JavaEE规范中,WEB项目存在一定的目录结构,具体结构如下:
一个项目只要有classes才可能有动态WEB资源
只要WEB项目符合规范,放置在webapps目录中,服务器就会将其顺利发布网络
WEB-INF 是一个保护目录 浏览器不能去访问它下边的资源
2.8、eclipse & idea和tomcat整合
在开发中,都是使用eclipse或idea和tomcat整合使用,方便开发测试。
三、 Maven(后面会详细介绍)
3.1 什么是maven
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平 台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。读音是 ['me v( )n] 或 ['mevn]。
3.2 maven 的作用
可以对项目需要的jar包进行引入,并且进行统一化的管理;可以解决jar包之间的依赖;可以进行模块化的开发
3.3 maven 的使用(配置)
3.3.1 下载
官网
本地
1.环境变量配置:
变量名:M2_HOME 变量值:maven解压的文件的bin目录; 变量名添加到path;
2.修改jar包存放的路径:settting.xml: D:\ssm\maven\apache-maven-3.6.0\repository
全部确定,然后打开黑窗口,输入cmd——>mvn -v
出现如下证明安装成功
四、使用Servlet技术完成一个用户登录
4.1、需求说明
若用户名和密码正确,判定为登录成功,则控制台输出登录成功;
若用户名或密码错误,判定为登录失败,则控制台输出登录失败。
4.2、需求分析
4.3、知识讲解-Servlet
4.3.1、什么是Servlet
Servlet就是运行到服务器端的小程序
可以使用浏览器进行访问获取数据
入口:
用来接收浏览器的数据
Servlet它是JavaWeb三大组件之一(Filter 、 Listener)
4.3.2、Servlet的作用
作用:
相当于程序的入口
1、搜集页面提交过来的数据
2、然后进行一系列的逻辑处理
3、将结果响应给页面进行展示
4.3.3、Servlet的入门
4.3.3.1、准备工作
Servlet规范要求:Servlet程序需要编写实现类,并在web.xml进行配置。
实现类:通常继承javax.servlet.http.HttpServlet类,并复写doGet和doPost方法。
doGet()方法用于处理get请求。
doPost()方法用于处理post请求。
4.3.3.2、编写步骤
1、先创建一个类,让这个类继承HttpServlet
2、重写doGet和doPost方法
3、配置web.xml中的路径
注意:以上这三步缺一不可。
1、如果servlet没有继承HttpServlet,会报错
2、如果没有重写doGet和doPost方法
3、如果不配置web.xml中的路径
4.3.3.3、Servlet的执行的流程详解
问题:为什么访问该路径http://localhost:8080/servlet可以执行到Demo3 Servlet doGet方法?
3.0版本的servlet如何创建
(1)
(2)无需配置web.xml,只需在上面添加注解@WebServlet("/servlet")
即可
4.3.4、Request接收请求参数
4.3.4.1、Request接收请求参数的概述
请求参数:
Request对象的方法
方法名 | 描述 |
---|---|
String getParameter(String name) | 获得指定参数名对应的值。如果参数列表没有该参数, 返回值是null如果参数列表有同名的参数,返回值是第一次出现的参数值 |
4.4、登录流程分析
4.5、案例原型准备及代码实现
(1)sql准备:
CREATE DATABASES login;
use login;
CREATE TABLE USER(
uid VARCHAR(32) PRIMARY KEY,
username VARCHAR(100),
PASSWORD VARCHAR(100)
);
INSERT INTO USER VALUES ('001','Daniel','123'),('002','Jenny','123');
(2) 案例结构
(3)源代码
User 代码:
package com.zql.pojo;
import java.io.Serializable;
public class User implements Serializable{
private String uid;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String uid, String username, String password) {
super();
this.uid = uid;
this.username = username;
this.password = password;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + "]";
}
}
Userservlet代码:
package com.zql.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zql.pojo.User;
import com.zql.service.UserService;
@WebServlet("/login")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"--------------"+password);
UserService service = new UserService();
User user = service.login(username,password);
if(user != null) {
System.out.println(username+"22--------------"+password);
System.out.println("登录成功");
System.out.println(username+"33--------------"+password);
}else {
System.out.println("登录失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
UserService代码:
package com.zql.service;
import com.zql.dao.UserDao;
import com.zql.pojo.User;
public class UserService {
public User login(String username, String password) throws Exception {
UserDao dao = new UserDao(); User user = dao.login(username,password);
return user;
}
}
UserDao 代码:
package com.zql.dao;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.zql.pojo.User;
import com.zql.utils.C3P0Utils;
public class UserDao {
public User login(String username, String password) throws Exception {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from user where username=? and password=?";
Object [] param = {username,password}; User user = qr.query(sql, new BeanHandler<>(User.class),param); return user;
}
}
(4) 登录成功失败显示(后台)
五、Servlet发展史和生命周期
5.1 发展史
Servlet也是由复杂难用、功能单一,逐步发展到目前的操作简单,功能强大的。
Servlet的发展史,完全就是一部人类由猿人的进化史。
体系结构:
生命周期:
创建(出生):第一次请求servlet时被创建
工作:每次请求该servlet时都会被创建一次
销毁(死亡):服务器正常关闭时
5.2 url-pattern
问题: 一个servlet是否可以配置多个访问路径? 可以
匹配方式(2.5版本)
3.0版本 如何配置多个访问路径?
六、HTTP协议
6.1、HTTP协议的概述:
6.1.1、什么是HTTP协议
HTTP协议: 超文本传输协议 它是互联网运用最广泛的一种网络协议
HTTP协议: 专门用来进行超文本信息传输, 规定 和 规范 浏览器与服务器之间的数据传输格式
协议: 规范 规定 规则
6.1.2、HTTP协议的作用及特点
作用: 似的浏览器与服务器之间 请求-响应之间传递的 超文本数据信息 更加快捷 高效
特点:
1.简单快捷
2.灵活
3.无连接
4.无状态
6.1.3、HTTP协议的组成:
协议组成两种: 请求协议和响应协议
6.2、HTTP协议入门
请求协议: 请求行 请求头 请求体
请求行:
DemoServlet1
package com.zql;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/servlet")
public class DemoServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(111);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
Login:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/servlet" method="get">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
<hr/>
<form action="/servlet3/servlet" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
浏览器开发者模式查看(F12)
Get请求
Post请求
Get请求和Post请求的区别:
1.get请求数据在请求行上,Post请求在请求体中
2.Get请求安全性较低, Post请求安全较高
3.Get请求提交数据有限制(不能超过4KB), Post请求数据量无限制
6.2.1、HTTP请求的详解
请求头:由键值对组成
6.2.3、HTTP响应的详解
HTTP/1.1
状态码:
200: 响应成功
404: 路径找不到(检查路径)
500: 服务器内部代码出现异常(通过debug断点测试)
304: 缓存 (清除浏览器缓存)
302: 重定向 (后边讲)
405: 方法找不到
服务器缓存:(需要进行clean服务中缓存,然后进行重新发布)
响应体,传递的是请求需要查看的资源数据,数据量无限
响应体,就是服务器发送给浏览器的资源数据。
如果访问的是一个html页面,那么响应回来的就是一个页面
七、XML
7.1 什么是xml
HTML : 超文本标记语言 预定义好的标签
XML: 可扩展标记语言 可以随意定义 <哈哈></哈哈>
7.2 xml的作用
- 传输数据 (json格式)
- 存储数据 (有数据库存储数据)
- 作为配置文件(重点) (以注解为主, 2.5版本配置 已配置为辅)
7.3 如何书写xml
Xml 文件数据分为5个组成元素构成 分别是文档声明 元素element 属性 注释 CDATA区域
7.3.1 文档声明
<?xml version="1.0" encoding="UTF-8"?>
1.它是以<?xml 开头 , ?>结尾.
2.是放在文件的开头部分
3.两个属性:
(1)Version 代表 版本
(2)Encoding 编码格式