关于Servlet(生命周期方法)
- 第一次被请求的时候会调用init()和构造方法,构造方法顺序在前
- tomcat终止时会调用destroy()
- 每一次被请求(不管是get还是post)会调用service(),很少用
jar包放在哪里
自动引入到工程里面WEB-INF/lib下
page和pageContext内置对象
page的作用域只在当前页面有效,如果jsp页面发生了请求转发的话,当前页面的page对象就不见了。<br />page就是this当前对象。<br />域对象的作用域:page<request<session<application
javax.servlet.jsp.PageContext<br /> [https://baike.baidu.com/item/pageContext/5022745?fr=aladdin](https://baike.baidu.com/item/pageContext/5022745?fr=aladdin)<br /> 作用<br /> 1,setAttribute(PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1596518/1623723546139-b02b5803-b11c-4792-be77-d7a07101a97d.png#align=left&display=inline&height=27&margin=%5Bobject%20Object%5D&name=image.png&originHeight=53&originWidth=1254&size=118670&status=done&style=none&width=627)<br /> 2,getOut() getRequest() getResponse() getServletContext() getSession()<br /> <br /> web.xml<br /> 在创建项目的时候生成(推荐)<br /> 首页的默认配置
参数乱码问题解决
先request.setCharacterEncoding(“utf-8”)后再获取数据
因为一般网站都有几十个页面,而网站都包含一个相同的头部和尾部,所以可以单独创建两个头部和尾部的页面,通过
在其他页面的头部和尾部中引入,这样所有页面的header和footer只需要维护一份。
路径问题
mvc分层架构
model 模型(数据模型,每一个类就是一个模型,每一个类对象代表一个完整的数据。比如User类里面包含了username password age这些组成了一个新的数据就是账号数据,这个User类就相当于一个数据模型。船或者车模表示一个船或者车有哪些部件,那一个数据模型比如账号类,就表示了账号数据有哪些数据组成)<br /> view 视图 jsp<br /> controller 控制 servlet
JavaEE分层架构
Web层 jsp/servlet<br /> Service层 服务层也叫做业务逻辑层<br /> Dao层 Data Access Object数据访问对象,这里的数据就是数据库中的数据,那数据访问对象就是用来访问数据的。<br /> 就是用来做增删改查的,所以对数据库的增删改查的相关类和方法放在dao层里面。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1596518/1624238670362-0410e07b-5595-4f60-91b7-8204a4bca588.png#align=left&display=inline&height=521&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1041&originWidth=2234&size=694616&status=done&style=none&width=1117)<br />总的架构图,并通过注册案例来分析。<br />使用jsp做一个列表显示,后台的商品列表
案例
———————————jstl和el表达式———————————
el表达式
https://baike.baidu.com/item/EL%E8%A1%A8%E8%BE%BE%E5%BC%8F/1190845?fr=aladdin
目的:是为了使JSP写起来更加简单
el能干什么
可以从域对象(request session application pageContext)中取得数据
el表达式语法结构
${expression}
${requestScope.key}
${pageContextScope.key}
${sessionScope.key}
${applicationScope.key}
${key}如果不指定域,那么会依次从域中搜索
例子
${username} 取得request里面名字为username的属性值(如果不存在返回空字符串)
${user.username}
${list[index]}
${map.key}
${pageContext.request.contextPath}
${10+89} 支持放置表达式运算
${age>10}
${empty user} 是否是null对象
jstl表达式
https://baike.baidu.com/item/JSTL
目的:让jsp写起来更加简单,优雅
(可以让jsp页面不写java代码,实现取数据)
jstl和el的关系
合作关系,一起使用让jsp写起来更加简单优雅
jstl是一个标签库
什么是标签库?可以只用一些自定义有自定义功能的标签。
下载地址
http://tomcat.apache.org/taglibs/standard/
要使用jstl提供的标签
要先引入jstl对应的标签库 taglib
如何引入jstl标签库
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core“ prefix=”c” %>
跟数据存储相关 set out remove
<%
// request.setAttribute(“username”, “123”);
%>
${username }
<%
request.removeAttribute(“username”);
%>
条件标签
if语句
你是成年人
if else语句
你是成年人
未成年
循环标签
${user.username }:${user.age }
${kv.key }:${kv.value }
(要给属性提供get方法)
———————————Ajax———————————
什么是Json
http://www.json.org/json-zh.html
作用:
在不进行页面跳转或者页面刷新的情况下,向服务器发起请求,并取得服务器响应的数据。
应用领域:
数据校验
优点:
1,用户体验比较好(不需要页面跳转,速度快)
2,服务器压力比较小
jQuery发起Ajax请求
$.ajax({
url:”xxxservlet”,
type:”post”,
data:{
key:value,
key:value
},
dataType:”json”,
success:function(msg){
msg.key;
}
});
其他参数和用法http://api.jquery.com/jQuery.ajax/
JavaScript发起Ajax请求
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(“GET”,”xxxservlet”,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
//成功后的处理
}
}
其他参数和用法http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp
———————————过滤器Filter———————————
水过滤器,可以过滤掉水中的杂质
java web中的过滤器
用来过滤请求,判断一个请求是否非法,并进行处理。可以对请求中的数据进行预处理。
应用:
后台页面访问过滤
中文参数处理(字符集编码处理)
过滤敏感词汇
过滤器可以做
请求的预处理
请求的后处理
创建过滤器
1,过滤器就是一个Java类,创建一个类
2,继承自Filter
3,配置过滤路径
配置文件
注解@WebFilter、
配置文件方式
如何给过滤器添加参数
过滤器的dispatcher(配置到servletmapping里面)
REQUEST INCLUDE FORWARD ERROR
———————————监听器Listener———————————
用来监听request session和 application
HttpServletRequest HttpSession ServletContext
request session application
应用
统计在线人数
web应用启动起来的时候做一些初始化的工作
创建监听器
1,监听器是一个类,创建类
2,实现监听器接口
javax.servlet.ServletContextListener
HttpSessionListener
ServletRequestListener
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
3,配置
或者注解方式
@WebListener
多个监听器的执行顺序
init按照配置的顺序
销毁的时候相反
监听的东西
1,对象的创建和销毁
2,属性的创建、替换和移除
setAttribute removeAttribute
session销毁时间配置
HttpSessionBindListener
监听某个对象被添加到session里面或者被移除
session.setAttribute(“user”,user);
session.removeAttribute(“user”);
———————————案例———————————
1,单点登录