jsp概述&快速入门&原理
一、MVC模式
-
MVC是一种分层开发的模式,其中:
-
M:Model,业务模型,处理业务
-
V:View,视图,界面展示,调用模型和视图
二、MVC好处
-
职责单一,互不影响
-
有利于分工协作
-
有利于组件重用
三、三层架构
-
数据访问层:对数据库的CRUD基本操作— com.itheima.web/controller
-
业务逻辑层:对业务逻辑进行封装,组合数据访问层中的基本功能,形成复杂的业务逻辑功能—com.itheima.service
-
表现层:接受请求,封装数据,调用业务逻辑,响应数据—com.itheima.dao/mapper
四、案例:
1、完成品牌数据的增删改查操作
1.1、准备环境
-
创建新的模块brand_demo,引入坐标
-
创建三层架构的包结构
-
数据库表tb_brand
-
实体类Brand
-
MyBatis基础环境
-
Mybatis-config.xml
-
BrandMapper.xml
-
BrandMapper接口
-
1.2、添加
Dao层:在brandMapper中定义一个add方法,然后定义brand对象
Service层:提供一个add方法,直接调用brandMapper中的add中的add方法
web层:使用JavaScrip完成t单击事件的绑定
会话跟踪技术
-
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接会话结束,再一次会话中可以包含多次请求和响应
-
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多种请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
-
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
-
实现方式
-
客户端会话跟踪技术:Cookie
-
服务端会话跟踪技术:Session
-
一、Cookie的基本使用
1、Cookie的基本使用
-
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
-
Cookie的基本使用
发送Cookie
1.创建Cookie对象,设置数据 Cookie cookie = new cookie("key","value"); 2.发送Cookie到客户端,使用response对象 response.addCookie(cookie);
获取Cookie
3.获取客户端携带的所有cookie,使用request对现 Cookie[] cookies = request.getCookie(); 4.遍历数组,获取每一个Cookie对象:for 5.使用Cookie对象方法获取数据 cookie.getName(); cookie.getValue
二、Cookie原理
Cookie的实现原理是基于HTTP协议的
-
响应头:set-cookie
-
请求头:cookie
三、Cookie使用细节
Cookie存活时间
-
默认情况下,Cookie存储在浏览器内存中,当关闭浏览器,内存释放,则Cookie被销毁。
-
setMaxAge(int seconds):设置Cookie存活时间
-
正数:将Cookie写入浏览器所在的电脑的硬盘,持久化存储,到时间自动删除
-
负数:默认值,Cookie在当前浏览器内存中,当浏览器被关闭,则Cookie被销毁
-
零:删除对应Cookie
Cookie存储中文
-
Cookie不能直接存储中文
-
如需要存储,需要进行转码:URL编码
四、Session基本使用
Session
服务端会话跟踪技术:将数据保存到服务端
JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
使用:
1.获取Session对象
HttpSession session = request.getSession();
2.Session对象功能
void setAttribute(String name,Object o):存储数据到session域中
Object getAttribute(String name):根据key,获取值
void removeAttribute(String name):根据key,删除该键值对
五、Session原理
Session是基于Cookie实现的
六、Session使用细节
Session钝化,活话
服务器重启后,Session中的数据是否还在?
-
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
-
活化:再次启动服务器后,从文件中加载数据到Session中
Session销毁
-
默认情况下,无操作,30分钟自动销毁
<session-config> <session-timeout>30</session-timeout> </session-config>
-
调用Session对象的invalidate()方法
小结
-
Cookie和Session都是来完成一次会话内多次请求间数据共享的
区别:
-
存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
-
安全性:Cookie不安全,Session安全
-
数据大小:Cookie最大3KB,Session大小无限制
-
存储时间:Cookie可以长期存储,Session默认30分钟
-
服务器性能:Cookie不占用服务器资源,Session占用服务器资源
七、案例
登录注册案例
需求说明:
1.完成用户登录功能,如果用户勾选“记住用户”,则下次访问登陆页面,自动填充用户名密码
2.完成注册功能,并实现验证码功能
用户登录
三层架构
Web层:
Service层:
Dao层:
记住用户
如果用户勾选“记住用户”,则下次访问登陆页面自动填充用户名和密码
如何自动填充用户名和密码?
-
将用户名和密码写入Cookie中,并且持久化存储Cookie,下次访问浏览器会自动携带Cookie
-
在页面获取Cookie数据后,设置到用户名和密码框中
何时写Cookie
-
登录成功
-
用户勾选记住用户复选框
-
注册功能:保存用户信息到数据库
验证码功能:
-
展示验证码:展示验证码图片,并可以点击切换
-
校验验证码:验证码填写不正确,则注册失败
-
验证码就是使用Java代码生成的一张图片
-
验证码作用:防止机器自动注册,攻击服务器
校验验证码
-
判断生成的验证码和用户输入的验证码是否一样,如果不一样,则阻止注册
-
验证码图片访问和提交注册表单时两次请求,所以要将程序生成的验证码存入Session中
Filter
-
概念:Filter表示过滤器,是JavaWeb三大组件(Servlet,Filter,Listener)之一
-
过滤器可把对资源的请求拦截下来,从而实现一些特殊的功能
-
过滤器一般完成一些通用的操作,比如:权限控制,统一编码处理,敏感字符处理等等...
一、Filter快速入门
1.定义类,实现Filter接口,并重写所有方法
public class FilterDemo implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("FilterDemo..."); //放行 filterChain.doFilter(servletRequest,servletResponse); } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
2.配置Filter拦截资源的路径:在类上定义@WebFilter注解
@WebFilter("/*") public class FilterDemo implements Filter {}
3.在doFilter方法中输出一句话,并放行
//放行 filterChain.doFilter(servletRequest,servletResponse);
二、Filter执行流程
-
放行后执行对应资源,资源访问完成后,还会回到Filter中,
-
回到Filter中,将执行放行后逻辑
-
执行前逻辑——>放行——>访问资源——>执行放行后逻辑
三、Filter使用细节
1.Filter拦截路径配置
-
Filter可以根据需求,配置不同的资源拦截路径
-
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
-
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
-
后缀名拦截:*.jsp:访问后缀名为.jsp的资源,都会被拦截
-
拦截所有:/*:访问所有资源,都会被拦截
2.过滤器链
-
一个Web应用,可以配置多个过滤器链,这多个过滤器称为过滤器链
-
注解配置的Filter,优先级按照过滤器的类名(字符串)的自然排序
四、案例
登录验证
-
需求:访问服务器资源时,需要先进行登录验证,如果没有登录,则自动跳转到登录页面
Listener
-
概念:Listener表示监听器,是JavaWeb三大组件(Servlet,Filter,Listener)之一。
-
监听器可以监听就是在application,session,request三个对象创建,销毁或者往其中添加修改删除属性时自动执行代码的功能组件
-
Listener分类:JavaWeb中提供了8个监听器
监听器分类 | 监听器名称 | 作用 |
---|---|---|
ServletContext | ServletContextListener | 用于对ServletContext对象进行监听(创建、销毁) |
ServletContextAttributeListener | 对ServletContext对象中属性的监听 (增删改属性) | |
Session监听 | HttpSessionListener | 对Session对象的整体对象的监听(创建,销毁) |
HttpSessionAttributeListener | 对Session对象中的属性进行监听(增删改属性) | |
HttpSessionBindingListener | 监听对象属于Session的绑定和解除 | |
HttpSessionActivationListener | 对Session数据的钝化和活化的监听 | |
Requ监听 | ServletRequestListener | 对Requesst对象进行监听(创建、销毁) |
ServletRequestAttributeListener | 对Request对象中属性的监听(增删改属性) |
一、ServlerContextListener的使用
1.定义类,实现ServletContextListener接口
2.在类上添加@WebListener注解
@WebListener public class ContextLoaderListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { //加载资源 System.out.println("contextInitialized..."); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { //释放资源 } }
AJAX
-
概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML
-
AJAX作用:
1.与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
-
使用AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了
2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想,用户是否可以校验,等等...
一、AJAX快速入门
1.编写AjaxServlet,并使用response输出字符串
2.创建XMLHttpRequest对象:用于和服务器交换数据
二、案例
使用AJAX验证用户名是否存在
需求:在完成用户注册时,当用户名输入框失去焦点时,检验用户名是否在数据库已存在
三、Axion异步框架
四、JSON
-
概念:JavaScript Object Notation。JavaScript对象表示法
-
由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输
一、JSON基础语法
-
定义
value的数据类型为: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或false) 数组(在方括号中) 对象(在花括号在中) null
var 变量 = {"key1",value1, "key2",value2, ... };
示例:
var json = {"name":"zhangsan", "age":23, "addr":["北京","上海","西安"] };
-
获取数据:
变量名:key json.name
二、JSON数据金额Java对象转换
-
请求数据:JSON:JSON字符串转为Java对象
-
响应数据:Java对象转为JSON字符串
JSON数据和Java对象转换
Fastjson时阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可是实现Java对象和JSON字符串的相互转换
使用:
1.导入坐标
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
2.Java对象转JSON
String jsonStrings = JSON.toJSONString(obj);
3.JSON字符串转Java对象
User u = JSON.parseObject(jsonStr,User.class);
VUE
-
Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写
-
基于MVVM(Model-View-ViewModel)思想,实现数据的双重绑定,将编程的关注点放在数据上
-
官网:https://cn.vuejs.org
MVC:只能实现模型到视图的单向转换
MVVM:可以实现数据的双向绑定
一、Vue快速入门
二、Vue常用指令
指令:HTML标签上带有v-前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for...
常用指令:
指令 | 作用 |
---|---|
v-bind | 为HTML标签绑定属性值,如设置href,css样式等 |
v-model | 在表单元素上创建双向数据绑定 |
v-on | 为HTML标签绑定事件 |
v-if | |
v-else | 条件性的渲染其元素,判定为true时渲染,否则不渲染 |
v-else-if | |
v-show | 根据条件展示某元素,区别在于切换的是display属性的值 |
v-for | 列表渲染,遍历容器的元素或者对象的属性 |
三、Vue生命周期
生命周期的八个阶段:没触发一个生命周期事件,会自动执行一个生命周期方法(钩子)
状态 | 阶段周期 |
---|---|
beforeCreate | 创建前 |
created | 创建后 |
beforeMount | 载入前 |
mounted | 挂在完成 |
beforeUpdate | 更新前 |
update | 更新后 |
beforeDestroy | 销毁前 |
destroyed | 销毁后 |
Element
-
Element:是饿了么公司前端开发团队提供的一台基于Vue的网站组件库,用于快速构建网页
-
组件:组成网页的 部件,例如:超链接,按钮,图片,表格等等~
Element快速入门
1.映入Element的css,js文件和Vue.js
2.创建Vue核心对象
3.官网复制Element组件代码
Element布局
Element有两种布局方式
-
layout布局:通过基础的24分栏,迅速简便的创建布局
-
Container布局容器:用于布局的容器组件,方便快速搭建页面的基本结构
Element组件
综合案例
第一步:编写BrandMapper中的查询方法
第二步:编写service层
第三步:编写web层
一、新增案例
①先写dao层
在brand Mapper中书写添加方法 void add(brand)
②书写service层
在BrandService中添加add方法,然后调用brandMapper中的 添加方法void add(brand)
③在前端页面,点击提交按钮,发送ajax请求,携带表单数据,在web层,接收品牌数据,然后调用service添加,相应成功标识,然后响应给前端页面,前端页面获取数据,判断是否添加成功,关闭窗口,重新加载数据
二、批量删除
Dao层
在BrandMapper中定义方法deleteById(int[] ids)
Service层
定义deleteById方法,然后调用brandMapper中的deleteById(int[] ids)方法
前端页面
1.点击批量删除按钮,发送ajax请求,携带被选中的id数组,向服务器发送请求,在web层中,在BrandServlet中接收id数组,调用service删除,响应成功标识,最后给服务器发送响应数据
前端页面获取标识,判断删除是否成功。给出提示,重新查询数据