JavaEE
JavaEE的三大技术:servlet、Filter、Listener
JavaEE运行环境
网站响应的过程:
动态页面和静态页面
静态页面:客户端得到的与服务器上是一样的。灵活不足,速度快。
动态页面:客户端得到的是服务器上的执行结果,页面需要服务器上运行,同一页面可以根据不同用户不同请求,可以运行出不同结果,速度慢。
前后端分离:前端只负责页面,后端只负责数据。
web容器-服务器的程序
web容器就是运行在服务器中,为用户提供web页面服务的软件。
例如:Apache、tomcat、JBoss、IIS
Tomcat容器
Tomcat是最常用的JavaWeb容器。
解压即使用,不要放在中文目录下。
-
bin:放二进制的,可执行程序
startuo.bat :运行Tomcate服务器程序 shutdown.bar:关闭Tomcat服务器程序
-
conf:配置文件
-
web:放库、Jar包
-
logs:日志文件
-
temp:临时文件
-
webapps:部署web应用的目录,里面放的是一个个的 项目。
-
work:工作目录,放jsp文件运行的中间文件。
Servlet
运行在JavaWeb服务器容器中的一种类,实际上就是一个动态页面。
Servlet:需要又一个url来指向这个Servlet。
Servlet接口
如果一个类,想成为一个Servlet,必须实现Servlet接口。
-
init
对Servlet进行初始化。 只会执行一次。当Servlet 对象创建之后
-
service
响应客户端的请求。客户端每一次访问,service方法都会执行一次。
-
destroy
对Servlet进行销毁。Tomcate正常关闭时,执行一次。
-
getServletConfig
获取Servlet的配置
-
getServletInfo
获取Servlet 的信息
前三个方法称为Servlet的生命周期
实现一个Servlet
-
创建一个类
-
实现Servet接口及方法
-
配置Servlet
1)web.xml<Servlet> <Servlet-name>Servlet名字</Servlet-name> <Servlet-class>Servlet类的全名</Servlet-class> <Servlet> <!-- 配置URL的映射--> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/my</url-pattern> </servlet-mapping>
2)注解
web3.0版本才开始支持注解。
@WebServlet(“路径”)与web.xml的配置不同同时进行,要不会有冲突
页面跳转
-
请求转发
特点:
1)使用request对象进行请求转发
2)浏览器只会发送一次请求。页面的跳转发生在服务器的内部。
3)在请求转发时,浏览器的地址栏不会发生变化,现实的还是第一次请求的地址。
4)在请求转发时,多个页面共享同一对request和response对象,可以使用request在多个页面中进行数据的传递。 -
重定向
特点:
1)使用response对象进行重定向
2)浏览器的地址栏会发生变化
3)服务器指挥客户端完成,response向客户端发送302HTTP状态码,浏览器拿到指令后,找到location里面的地址,重新向这个地址发出请求。【有两次请求】
4)有两个单独的请求,会生成两队独立的request和respond对象,因此不能使用request对象在两个页面中进行数据的传递。
如何页面跳转的方式
- 如果页面之间没有数据进行共享,则使用重定向。——优先使用
- 如果页面之间有数据共享,则使用请求转发。
HTTP请求方式
http的请求方式有:get、post、put、delete、head、option、trace
在HTTPServlet的Service方法中,根据不同的请求方式,调用不同的do方法
-
get
什么样的请求时get请求?--> 1)在浏览器的地址栏中直接输入网址进行访问 2)超链接的跳转 3)表单的默认提交方式 4)使用ajax或者前端框架,默认情况下也都是get 请求。
-
post
1)当表单的method设置为post时,表单的调教就变成了post 2)当ajax或前端框架,设置了请求方式为post
-
get 与post的区别
1)get的参数是使用?&拼接在URL的后面;post的参数是放在http请求的数据域中。 2)get的参数必须是字符串;post的参数可以是字符串也可以是二进制。可以上传文件 3)get的参数长度是有限的,收到浏览器URL的限制。【不同的浏览器URL长度限制是不一样的】;post的参数是没有限制的,只要服务器允许。 4)get相对不安全;poet安全一些。
Session
session是会话,它是一种请求保持技术。
请求保持:客户端浏览器,相服务器发出多次请求,服务器可以分辨出这是一个用户。
-
Cookie:将信息保存在客户端的浏览器中。
默认情况下:cookie的有效时间回到会话结束【浏览器关闭】。
当设置了Cookie有效时间,即使关闭了浏览器,下次打开时依旧有效。
服务器读取来自客户端的cookie
-
session
会话:一个客户端与服务器之间,在一段时间内,连续的多次请求。
session将数据保存在服务器的内存中。
session的底层还是基于Cookie,更安全,把用户的信息都保存在了服务器中。session的常用方法: 1)setAttribute(属性名,属性值);//向session中保存属性值 2)getAttribute(属性名);//获取session中的指定属性 3)removeAttribute(属性名);//删除session中的指定属性 4)invalidate();//让session失效【销毁当前session对象】 session失效 1)客户端的浏览器关闭,会导致Session失效: 因为session的这个cookie的有效期就是浏览器关闭 2)服务器调用了session.incalidate(),原来的session对象就会被销毁。 3)客户端与服务器之间,长时间没有请求。session会超时过期。tomcat下默认session超时时间为30分钟。
-
cookie与session
1)cookie的数据是保存在客户端浏览器中,session的数据是保存在服务器的内存中。
2)cookie只能保存简单的字符串数据,session可以保存对象。
3)cookie安全性比较低,session安全性相对高一些。 -
token
session给服务器带来负担。
cookie安全性低
token:采用加密技术,将用户信息进行加密。以cookie的方式交给客户端。
服务器拿到token时,通过解密算法就可以直接得到用户的信息。
JSP
什么是JSP
java Server Page:用java写的运行在服务器页面。
JSP与Servlet一样都是一种动态页面。
在 Servlet 中写HTML会很麻烦。JSP提供一种同时及逆行Java和前端代码编写的方法。
Jsp语法
-
前端代码
-
指令标签
<%@标签名 属性="值" %>
1)page 作用:配置当前JSP页面的属性 language:当前JSP采用的内嵌语言类型【通常就是Java】 contentType:设置当前页面的内容类型,"text/html;charsetUTF-8",相当于response.setContentType(); pageEncoding:设置页面的保存格式。 import:引入外部的类,相当于Java中的import关键字。 isErrorPage:当前JSP是不是一个错误处理页面。可以使用exception对象。 errorPage:当前页面的错误处理页面,当前页面抛出异常时,由哪个页面进行处理。 2)include 作用:静态地引入外部的页面。 会在JSP页面进行翻译时,将外部页面的而代码直接复制过来。 3)taglib 作用:引入JSP的自定义标签库。 JSTL中会用到。
-
动作标签
<jsp:标签名 属性="值"></jsp:标签名>
1)forward 作用:在JSP页面中进行请求转发。 2)include 作用:动态地引入外部页面 在JSP页面执行时,嵌入另一个JSP页面执行的结果。 【JSP的运行原理:动态引入,是在执行时完成,静态引入是编译时进行】 3)param 作用:可以在forward和include内部传递参数。
-
内嵌Java代码
<% 可以像在Java的方法中一样编写Java代码 %>
局部变量,变量定义后才能使用。
不能声明方法。
1)输出表达式<%=Java的表达式>
——将表达式值,输出到JSP页面中。
2)声明片段<%! 可以像在类中一样编写代码 %>
全局变量,当前的JSP的任何地方都可以访问。 也可以声明方法
九大内置对象和四大作用域
-
九大内置对象【JSP的隐含对象】
在JSP中,不需要声明,不需要定义,就可以直接使用的对象 1)request: 常用方法:setAttribute(属性名,值)、getAttribute(属性名)、removeAttribute(属性名) 请求对象,HttpServletRequest类型 提供来自客户端的数据:url,参数,客户端操作系统、浏览器、IP地址。 获取服务器的信息:获取session 2)response: 响应对象:HttpServletResponse类型 向客户端返回数据。 3)session: 常用方法:setAttribute(属性名,值)、getAttribute(属性名)、removeAttribute(属性名) 会话对象,HttpSession类型 表示一个客户端与服务器一段时间内的多次请求。 4)application: 应用对象,ServletContext类型【Servlet的上下文】 应用对象代表的就是当前的一个项目。在当前项目的所有页面中都可以访问到这一个application对象 Servlet获取application对象,getServletContext(); 常用方法:setAttribute(属性名,值)、getAttribute(属性名)、removeAttribute(属性名)、 5)page: 表示当前JSP界面。相当于this。 6)pageContext: 表示当前页面的上下文,可以通过获取其它的8个内置对象。 7)config: 表示当前页面的配置信息。相当于Servlet的config。 8)out: 输出对象,可以向当前的JSP页面中输出信息。 write输出的数据不可为null。如果为null则抛出空指针异常。 方法:write()、append()、println()。 9)exception: 异常对象,表示上一个页面抛出的异常。 只存在于错误处理页面当中,也就是page的isErrorPage设置为true的页面。
-
四大作用域
九大内置对象的作用范围1)Page作用域——页面作用域 范围是当前的JSP页面,页面发生变化,对象就会失效 对象:page、pageContext、config、out、exception。 2)Request作用域——请求作用域 范围是一次请求,请求结束后对象会失效。 对象:Request对象、Response对象 3)Session作用域——会话作用域 范围是当前会话 对象:Session对象 4)Application作用域——应用作用域 应用作用域是范围最大的作用域,在整个项目中都有效。 对象:Application对象
JSP运行原理
1)JSP需要编译,所以tomcat 在运行JSP时,需要知道JDK安装在哪里,必须配置JAVA_HOME变量。
2)JSP翻译和编译的中间文件在
JSP会被翻译成一个Java的类,继承自HttpJspBase、又继承自HttpServlet,所以JSP就是一个Servlet。
九大内置对象就是JSP翻译后的类中的_jspService方法的参数和局部变量。
EL表达式
向JSP页面输出内容:
1)out对象。
2)输出表达式<%=表达式%>
- 语法:
${属性}
EL表达式:也是向页面中输出内容,写法更简单。
${对象.属性}
底层实际上是调用对象的get方法。
${集合[下标]}
- EL表达式隐含对象【scope域】
pageScope、requestScope、sessionScope、applicationScope、param
当没有使用隐含对象时,优先从request中取属性,如果取不到再去session中找,如果还没有,再去Application中取。如果都没有,啥也不输出。 - JSTL
JSTL:JSP的标准标签库
想查询一下所有的项目信息会显示出来。
在JSP中内嵌Java代码会让页面结构很复杂。
1)先引入包
core:核心模块,提供逻辑处理【if-else/foreach】
fmt:format,格式化模块,提供日期、数字格式化方式
function:函数模块,提供了一些常用的函数。
xml:xml格式的模块
sql:sql语句的模块

Servlet+JSP项目实现
设计时:从上往下
实现时:从下往上
-
数据库
根据功能创建好相应的数据表。 -
实体类
entity包下的类:
1)实体类名与数据表名一致
2)实体类的属性与数据表的字段一致
名字一致
数据类型要匹配:不要使用基本数据类型,而是使用包装类
时间类型:java.util.Date;decimal:BigDecimal
3)封装:属性私有化,提供getset方法——lombok
4)实体类应该有无参构造方法(给反射创建对象),toString -
持久层
1)定义持久层接口
2)实现持久层接口
实现Dao层接口,添加需要的实现方法
声明DBUtil的属性,帮助操作数据库(合成复用)
实现每一个方法:边下SQL,调用DBUtil的方法(增删改——update,查——query、queryone) -
业务逻辑层
-
控制层
-
视图层
ajax
Filter
概述
- init:
- doFilter:
1)
2) - destory
实现Filter
- 写一个实现类
- 配置
1)web.xml
- 注解
Filter的应用场景
- 用户登陆过滤
- 给所有的页面添加编码的处理
同意给request和respnse对象添加编码处理
1)客户端传递的参数:在BaseServlet中处理的
2)服务器返回的数据
Listener
概述
监听器
监听三个对象:request、session、application
监听他们生命周期:创建、销毁
监听他们的属性变化:setAttribute,removeAttribute
六个接口
-
request
servletRequestListener 生命周期requestInitialized() requestDestoryed //request对象的销毁
servletRequestAttributeListener 属性变化
监听添加属性 setAttribute 修改属性 setAttribute 删除属性 removeAttribute
-
session
HttpSessionListener 生命周期sessionInitialized() sessionDestory()
HttpSessionAttributeListener 属性变化
监听添加属性 setAttribute 修改属性 setAttribute 删除属性 removeAttribute
-
application
ServletContextListener 生命周期
``bash
servletContextInitialized()
servletContextDestory()ServletContextAttributeListener 属性变化 ```bash 监听添加属性 setAttribute 修改属性 setAttribute 删除属性 removeAttribute
使用Listener
统计当前登录的用户的数量