Java Web
1、基本概念
静态web:html、css等文件,提供的数据是静态的(所有人看到的都是一样)
- 无法和数据库交互(数据无法持久化)
- 无法和数据库交互(数据无法持久化)
动态web:看到的数据时刻发生变化
- 技术栈:Serverlet/JSP、(微软ASP)
在java中方,动态web资源开发技术统称为JavaWeb
- web应用程序:可供浏览器访问的程序
- web应用组成:
- html、css、js
- jsp、serverlet
- java程序
- jar包
- 配置文件(properties)
- web应用组成:
2、web服务器
2.1 技术栈
- ASP(微软):最早,页面混乱,维护成本高
- PHP:开发速度快,功能强,跨平台,代码简单(WP),无法承载大访问量
- JSP/Serverlet:B/S浏览器服务器架构,可承载三高问题,基于Java
2.2 Tomcat
==注意:==启动前先配置好java环境变量,tomcat环境变量,否则会闪退!
配置:server.xml
- 改端口:
1 | <Connector port="8080" protocol="HTTP/1.1" |
- 改主机名localhost(127.0.0.1):
1 | <Host name="localhost" appBase="webapps" //网站存放应用位置webapps |
2.3 发布web网站
基于Tomcat的网站结构:
1 | --webapps :Tomcat的web目录 |
3、Maven
包管理工具。
- 核心思想:约定大于配置!
下载安装—>配置环境变量—->更改配置文件(镜像地址和本地仓库地址)
4、==IDEA中的Maven==
!!!!注意:IDEA版本和Maven的版本要适配,2021版的idea勿用maven3.8!!!(3.6.3可用)
新建maven项目时发现archetype很少—->先关闭当前项目,再新建项目,则会加载很多模板!
- 新建的mavenweb文件结构如下:
- IDEA标记文件夹功能
==未来可能遇到的问题:==由于maven的约定大配置,我们之后可能遇到我们的配置文件,无法被导出或者生效的问题
==解决方案:==在pom.xml中加入如下配置文件:
1 | <build> |
5、Maven仓库的使用
6、Servlet
6.1 Servlet简介
- sun公司开发动态web的一门技术
开发Servlet只需要完成如下两个步骤:
1. 编写一个类,实现Servlet接口
1. 把开发好的Java类部署到web服务器中
把实现了Servlet接口的Java程序叫做:Servlet
6.2 构建Servlet
步骤:
- 构建一个普通的Maven项目,删掉src目录,将该工程作为主工程(Maven父子工程)
父项目中ppom.xml新增以下内容:
1 | <modules> |
父项目中的jar包子项目可以直接使用,反之不可
- maven环境:
修改web.xml为最新(可以在tomcat里面找到)
将maven的web结构设置好
编写Servlet接口实现类,继承HttpServlet
1 | package com.pans.servlet; |
- 编写Servlet映射
为何需要映射:我们写的java程序,需要通过浏览器访问,而浏览器需要链接web服务器,所以需要在web服务器中注册我们的Servlet!
1 | <!--注册Servlet--> |
- 配置Tomcat
注意项目发布路径
- 启动
在访问编写的java文件路径时出现了一个问题:
经过百度发现时Tomcat10之后包名不再是”javax.servlet”,则是改为”jakarta.servlet”
解决方案时:
- Tomcat版本改为10以下的版本
- “javax.servlet”改为”jakarta.servlet”
1 | <dependency> |
6.3 Servlet原理
6.4 Servlet 的Mapping
1 | <!--映射路径--> |
- 一个Servlet可以指定一个映射路径
- 一个Servlet可以指定多个映射路径
- 一个Servlet可以指定通用映射路径
- 指定后缀或者前缀等。。
注意:指定的固有映射路径优先级大于默认路径。
6.5 ServletContext
web容器在启动的时候,它会为每个web程序创建一个对应的ServletContext对象,它代表当前web应用;(类似Context是个全局对象,为所有Servlet共享(一个Servlet对应一个映射路径))
作用:(几乎都会被替代)
- 共享数据(会被Session或者request替代)
- 获取初始化参数
- 请求转发(由request替代)
- 读取资源文件(由
类加载
或者反射来实现)
6.6 HttpServletResponse
应用:
- 下载文件
- 验证码功能
- 重定向!!(一定要注意路径问题)
example:登录界面重定向
index.jsp
1 | <html> |
login
1 | package com.pans.servlet; |
success.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
6.7 HttpServletRequest
7、Cookie、Session
客户端
服务端
服务端给客户端一个信件,客户端下次访问时带上信件(cookie)
服务端登记你来过,下次你来我匹配你(session)
7.1 保存会话的两种技术
cookie:保存在客户端
- 客户端技术
session:存储在服务端
- 服务器技术,可以保存用户的会话信息,把信息或者会话放在Session中
应用:用户登录状态
- 从请求中拿到cookie
- 服务器响应给客户端cookie
1 | Cookie[] cookies = req.getCookies(); //获得cookie |
7.2 ==Session(重点)==
- 服务器为每一个用户(浏览器)创建一个Session对象
- 一个Session独占一个浏览器,只要浏览器没关,Session就存在
Cookie与Session区别:
- Cookie是把用户的数据写到用户浏览器,浏览器保存(可以多个)
- Session 把用户的数据写到用户独占Session中,服务器端保存
- Session对象由服务器创建
使用场景:
- 保存一个登录用户信息
- 购物车信息
- 在整个网站中中经常会使用的数据,保存在Session中
8、JSP(Java Server Page服务器端页面)
和Servlet一样用于开发动态页面。
在IDEA编写的jsp文件,可以去IDEA中的工作目录下的tomcat找到当前工作项目,发现jsp底层仍然是java文件:
因此,jsp本质上就是servlet。
浏览器向服务器发送请求,不管在访问什么资源(文件),其实都是在访问Servlet!
9、JavaBean
实体类
JavaBean特有写法:
- 必须要有一个无参构造
- 属性必须私有
- 必须有对应的get/set方法
一般用来和数据库的字段做映射:==ORM==
ORM:对象关系映射
- 表—>类
- 字段—>属性
- 行记录—->对象
10、MVC三层架构
Model(模型) View(视图) Controller(控制器)
Model
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD(DAO)
View
- 展示数据
- 提供链接发起Servlet请求
Controller(Sevlet)
- 接收用户请求:(req:请求参数,Session信息)
- 交给业务层处理对应的代码
- 控制视图跳转
登录--->接收用户登录请求---->处理请求(获取用户参数)---->交给业务层处理登录业务(判断用户)---->Dao层查询用户名密码----->查数据库
11、==Filter过滤器==
用于过滤网站数据(乱码,过滤文字,权限拦截)
添加过滤器步骤:
- 导入相关依赖(pom.xml)
- 编写过滤器,实现(implements)Filter接口里面的方法
- 在web.xml中配置过滤器(和sevlet类似)
1 | <filter> |
12、监听器
编写监听器方法,pom.xml注册监听器
13、JDBC
==项目中实践。。。未完待续。。。==