JavaEE

本文详细介绍了JavaEE中的关键概念和技术,包括Servlet的生命周期、JSP的运行原理、动态和静态页面的区别、Tomcat容器的结构、HTTP请求方式、Session的使用以及Filter和Listener在web应用中的作用。此外,还讨论了页面跳转策略和Ajax的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#
JavaEE的三大技术:servlet、Filter、Listener

JavaEE运行环境

网站响应的过程:

在这里插入图片描述

动态页面和静态页面

在这里插入图片描述
静态页面:客户端得到的与服务器上是一样的。灵活不足,速度快。
动态页面:客户端得到的是服务器上的执行结果,页面需要服务器上运行,同一页面可以根据不同用户不同请求,可以运行出不同结果,速度慢。
前后端分离:前端只负责页面,后端只负责数据。

web容器-服务器的程序

web容器就是运行在服务器中,为用户提供web页面服务的软件。
例如:Apache、tomcat、JBoss、IIS

Tomcat容器

Tomcat是最常用的JavaWeb容器。
解压即使用,不要放在中文目录下。

  1. bin:放二进制的,可执行程序

     startuo.bat :运行Tomcate服务器程序
     shutdown.bar:关闭Tomcat服务器程序
    
  2. conf:配置文件
    在这里插入图片描述

  3. web:放库、Jar包

  4. logs:日志文件

  5. temp:临时文件

  6. webapps:部署web应用的目录,里面放的是一个个的 项目。

  7. work:工作目录,放jsp文件运行的中间文件。
    在这里插入图片描述

Servlet

运行在JavaWeb服务器容器中的一种类,实际上就是一个动态页面。
Servlet:需要又一个url来指向这个Servlet。

Servlet接口

如果一个类,想成为一个Servlet,必须实现Servlet接口。

  1. init

     对Servlet进行初始化。
     只会执行一次。当Servlet 对象创建之后
    
  2. service

     响应客户端的请求。客户端每一次访问,service方法都会执行一次。
    
  3. destroy

     对Servlet进行销毁。Tomcate正常关闭时,执行一次。
    
  4. getServletConfig

     获取Servlet的配置
    
  5. getServletInfo

     获取Servlet 的信息
    

前三个方法称为Servlet的生命周期

实现一个Servlet

  1. 创建一个类

  2. 实现Servet接口及方法

  3. 配置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. 请求转发
    在这里插入图片描述
    特点:
    1)使用request对象进行请求转发
    2)浏览器只会发送一次请求。页面的跳转发生在服务器的内部。
    3)在请求转发时,浏览器的地址栏不会发生变化,现实的还是第一次请求的地址。
    4)在请求转发时,多个页面共享同一对request和response对象,可以使用request在多个页面中进行数据的传递。

  2. 重定向
    在这里插入图片描述
    在这里插入图片描述

    特点:
    1)使用response对象进行重定向
    2)浏览器的地址栏会发生变化
    3)服务器指挥客户端完成,response向客户端发送302HTTP状态码,浏览器拿到指令后,找到location里面的地址,重新向这个地址发出请求。【有两次请求】
    4)有两个单独的请求,会生成两队独立的request和respond对象,因此不能使用request对象在两个页面中进行数据的传递。

如何页面跳转的方式

  1. 如果页面之间没有数据进行共享,则使用重定向。——优先使用
  2. 如果页面之间有数据共享,则使用请求转发。

HTTP请求方式

http的请求方式有:get、post、put、delete、head、option、trace
在HTTPServlet的Service方法中,根据不同的请求方式,调用不同的do方法

  1. get

     什么样的请求时get请求?-->  
     	1)在浏览器的地址栏中直接输入网址进行访问
     	2)超链接的跳转
     	3)表单的默认提交方式
     	4)使用ajax或者前端框架,默认情况下也都是get
     	请求。
    
  2. post

     1)当表单的method设置为post时,表单的调教就变成了post
     2)当ajax或前端框架,设置了请求方式为post
    
  3. get 与post的区别

     1)get的参数是使用?&拼接在URL的后面;post的参数是放在http请求的数据域中。
     2)get的参数必须是字符串;post的参数可以是字符串也可以是二进制。可以上传文件
     3)get的参数长度是有限的,收到浏览器URL的限制。【不同的浏览器URL长度限制是不一样的】;post的参数是没有限制的,只要服务器允许。
     4)get相对不安全;poet安全一些。
    

    在这里插入图片描述

Session

session是会话,它是一种请求保持技术。
请求保持:客户端浏览器,相服务器发出多次请求,服务器可以分辨出这是一个用户。

  1. Cookie:将信息保存在客户端的浏览器中。
    默认情况下:cookie的有效时间回到会话结束【浏览器关闭】。
    当设置了Cookie有效时间,即使关闭了浏览器,下次打开时依旧有效。
    在这里插入图片描述
    服务器读取来自客户端的cookie
    在这里插入图片描述

  2. session
    会话:一个客户端与服务器之间,在一段时间内,连续的多次请求。
    session将数据保存在服务器的内存中。
    在这里插入图片描述
    在这里插入图片描述
    session的底层还是基于Cookie,更安全,把用户的信息都保存在了服务器中。

    session的常用方法:
    1setAttribute(属性名,属性值);//向session中保存属性值
    2getAttribute(属性名);//获取session中的指定属性
    3removeAttribute(属性名);//删除session中的指定属性
    4invalidate();//让session失效【销毁当前session对象】
    session失效
    1)客户端的浏览器关闭,会导致Session失效:
    	因为session的这个cookie的有效期就是浏览器关闭
    2)服务器调用了session.incalidate(),原来的session对象就会被销毁。
    3)客户端与服务器之间,长时间没有请求。session会超时过期。tomcat下默认session超时时间为30分钟。
    

    在这里插入图片描述

  3. cookie与session
    1)cookie的数据是保存在客户端浏览器中,session的数据是保存在服务器的内存中。
    2)cookie只能保存简单的字符串数据,session可以保存对象。
    3)cookie安全性比较低,session安全性相对高一些。

  4. token
    session给服务器带来负担。
    cookie安全性低
    token:采用加密技术,将用户信息进行加密。以cookie的方式交给客户端。
    服务器拿到token时,通过解密算法就可以直接得到用户的信息。

JSP

什么是JSP

java Server Page:用java写的运行在服务器页面。
JSP与Servlet一样都是一种动态页面。

在 Servlet 中写HTML会很麻烦。JSP提供一种同时及逆行Java和前端代码编写的方法。

Jsp语法

  1. 前端代码

  2. 指令标签 <%@标签名 属性="值" %>

     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中会用到。
    
  3. 动作标签 <jsp:标签名 属性="值"></jsp:标签名>

     1)forward
     	作用:在JSP页面中进行请求转发。
     2)include
     	作用:动态地引入外部页面
     	在JSP页面执行时,嵌入另一个JSP页面执行的结果。
     	【JSP的运行原理:动态引入,是在执行时完成,静态引入是编译时进行】
     3)param
     	作用:可以在forward和include内部传递参数。
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  4. 内嵌Java代码<% 可以像在Java的方法中一样编写Java代码 %>
    局部变量,变量定义后才能使用。
    不能声明方法。
    1)输出表达式<%=Java的表达式>——将表达式值,输出到JSP页面中。
    2)声明片段<%! 可以像在类中一样编写代码 %>

    	全局变量,当前的JSP的任何地方都可以访问。
    	也可以声明方法
    

九大内置对象和四大作用域

  1. 九大内置对象【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的页面。
    
  2. 四大作用域
    九大内置对象的作用范围

     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)输出表达式<%=表达式%>

  1. 语法:${属性}
    EL表达式:也是向页面中输出内容,写法更简单。
    ${对象.属性}
    底层实际上是调用对象的get方法。
    ${集合[下标]}
  2. EL表达式隐含对象【scope域】
    pageScope、requestScope、sessionScope、applicationScope、param
    当没有使用隐含对象时,优先从request中取属性,如果取不到再去session中找,如果还没有,再去Application中取。如果都没有,啥也不输出。
  3. JSTL
    在这里插入图片描述

JSTL:JSP的标准标签库
想查询一下所有的项目信息会显示出来。
在JSP中内嵌Java代码会让页面结构很复杂。
1)先引入包

	core:核心模块,提供逻辑处理【if-else/foreach】
	fmt:format,格式化模块,提供日期、数字格式化方式
	function:函数模块,提供了一些常用的函数。
	xml:xml格式的模块
	sql:sql语句的模块
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e62403fdacc4370875c322eb51e17a9.png)

Servlet+JSP项目实现

设计时:从上往下

在这里插入图片描述

实现时:从下往上

  1. 数据库
    根据功能创建好相应的数据表。

  2. 实体类
    entity包下的类:
    1)实体类名与数据表名一致
    2)实体类的属性与数据表的字段一致
    名字一致
    数据类型要匹配:不要使用基本数据类型,而是使用包装类
    时间类型:java.util.Date;decimal:BigDecimal
    3)封装:属性私有化,提供getset方法——lombok
    4)实体类应该有无参构造方法(给反射创建对象),toString

  3. 持久层
    1)定义持久层接口
    在这里插入图片描述

    2)实现持久层接口
    实现Dao层接口,添加需要的实现方法
    声明DBUtil的属性,帮助操作数据库(合成复用)
    实现每一个方法:边下SQL,调用DBUtil的方法(增删改——update,查——query、queryone)

  4. 业务逻辑层
    在这里插入图片描述

  5. 控制层
    在这里插入图片描述

  6. 视图层
    在这里插入图片描述

ajax

在这里插入图片描述

Filter

概述

  1. init:
  2. doFilter:
    1)
    2)
  3. destory

实现Filter

  1. 写一个实现类
  2. 配置
    1)web.xml
  1. 注解

在这里插入图片描述

在这里插入图片描述

Filter的应用场景

  1. 用户登陆过滤
  2. 给所有的页面添加编码的处理
    同意给request和respnse对象添加编码处理
    1)客户端传递的参数:在BaseServlet中处理的
    2)服务器返回的数据

Listener

概述

监听器
监听三个对象:request、session、application
监听他们生命周期:创建、销毁
监听他们的属性变化:setAttribute,removeAttribute

六个接口

  1. request
    servletRequestListener 生命周期

    requestInitialized()
    requestDestoryed		//request对象的销毁
    

    servletRequestAttributeListener 属性变化

    监听添加属性 setAttribute
    修改属性 setAttribute
    删除属性 removeAttribute
    
  2. session
    HttpSessionListener 生命周期

    sessionInitialized()
    sessionDestory()
    

    HttpSessionAttributeListener 属性变化

    监听添加属性 setAttribute
    修改属性 setAttribute
    删除属性 removeAttribute
    
  3. application
    ServletContextListener 生命周期
    ``bash
    servletContextInitialized()
    servletContextDestory()

    
    ServletContextAttributeListener 属性变化
    ```bash
    监听添加属性 setAttribute
    修改属性 setAttribute
    删除属性 removeAttribute
    

使用Listener

统计当前登录的用户的数量
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值