JavaEE

  • JavaEE

JavaSE标准版本、JavaME嵌入式、JavaEE动态网站

JavaEE三大核心技术:Servlet,Filter、Listener

动态页面都运行在服务器中。

1.1.1访问一个页面的过程

1.1.2动态页面和静态页面

静态页面:客户端得到的,与服务器上一致,灵活不足,速度快

动态页面:页面需要在服务器上运行,同一页面根据不同用户不同请求可以运行出不同的结果。很灵活但是效率低。

前后端分离:前端只负责页面,后端只负责数据

1.1.3Web容器-服务器程序

Web容器就是运行在服务器中,为用户提供Web页面服务的软件。

例如:Apache,tomcat,JBoss,IIS

1.1.4Tomcat容器

Tomcat是最常用的

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

start-up.bat 运行Tomcat服务器程序

shutdown.bat 关闭Tomcat

conf:配置文件

lib:库

logs:日志

temp:临时文件

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

work:工作目录,放jsp文件运行的中间文件

1.1.5IDEA创建tomcat项目

Java:放Java代码

Resources:放资源文件,通常都是一些配置文件

webapp:放jsp的动态页面

WEB-INF:当前项目需要依赖的库

web.xml:当前项目的配置文件,给Tomcat用

1.2Servlet

就是运行在JavaWeb服务器容器中的一种类,实际上就是一个动态页面。

Servlet如何执行?需要有一个url来指向这个servlet。

1.2.1Servlet接口

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

  1. init

对Servlet进行初始化,当Servlet对象创建之后,只会执行一次

  1. service

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

  1. destroy

对Servlet进行销毁,Tomcat正常关闭时,执行一次

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

  1. getServletConfig

获取Servlet配置

  1. getServeletInfo

获取Servlet信息

1.2.2实现一个Servlet

1.创建一个类
2.实现Servlet接口及方法

1.2.3配置Servlet的方法

1.web.xml

<!--配置一个Servlet-->
<servlet>
<servlet-name>
myServlet</servlet-name>
<servlet-class>
com.situ.demo0424.MyServlet</servlet-class>
</servlet>

<!--配置url映射-->
<servlet-mapping>
    <servlet-name>
myServlet</servlet-name>
    <url-pattern>
/my</url-pattern>
</servlet-mapping>

2.注解

Web3.0版本才开始支持注解

@WebServlet(“路径”)

1.2.4页面的跳转

1.请求转发

特点:

  1. 使用request对象进行请求转发
  2. 浏览器只发送一次请求。页面的跳转是发生在服务器内部的。
  3. 浏览器的地址栏不会发生变化,显示的还是第一次请求的地址。
  4. 多个页面共享同一对request和response对象,可以使用request在多个页面中进行数据的传递
2.重定向

特点:

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

3.如何选择页面跳转的方式呢?

1)如果页面之间没有数据需要共享,使用重定向

2)如果页面之间需要共享数据,使用请求转发

1.2.5HTTP请求方式

get、post、put、delete、head、options、trace

在HTTP servlet的service方法中,会根据不同的请求方式来调用不同的do方法。

  1. get
  1. 在浏览器的地址栏中直接输入网址,访问。
  2. 超链接的跳转
  3. 表单的默认提交方式也是get
  4. 使用ajax或前端框架,默认情况下也都是get请求。
  1. post
  1. 当表单的method设置为post时,表单的提交就变成了postqin请求
  2. 当使用ajax或前端框架,设置了请求方式为post。
  1. get和post的区别
  1. get的参数是使用?&拼接在URL后面

post的参数放在HTTP请求的数据域中

  1. get的参数必须是字符串

post的参数可以是字符串,也可以是二进制。可以上传文件。

  1. get参数的长度是有限的,受浏览器url的限制。不同的浏览器url长度限制不一样

post的参数是没有限制的,只要服务器允许

  1. get相对不安全,post相对安全

1.2.6 Session

session是会话,它是一种请求保持技术。

请求保持:客户端浏览器,向服务器发出多次请求,服务器可以分辨出这是一个用户

  1. cookie

默认情况,cookie的有效时间会到会话结束(浏览器关闭)。

当设置了cookie的有效时间,即使关闭了浏览器,下次打开时依然有效。

服务器让客户端保存cookie:

服务器读取来自客户端的cookie:

  1. session

一个客户端与服务器之间在一段时间里连续多次的请求。

session将数据保存在服务器的内存中。

保存在session:

读取session:

session底层还是依赖cookie,更安全,把用户的信息都保存在了服务器当中。

session的常用方法:

setAttribute(属性名,属性值);          向session中保存一个属性值

getAttribute(属性名);                       获取session中的指定属性

removeAttribute(属性名);                 删除session中的指定属性

invalidate();                                        销毁session对象,让session消失

session失效的三种形式

  1. 客户端的浏览器关闭,会导致Session失效。

因为sessionid,这个cookie的有效期就是浏览器的关闭。

  1. 服务器调用了session.invalidate(),原来的session对象就被销毁。
  2. 客户端与服务器之间,长时间没有请求。Session会超时过期。Tomcat下默认时间是30分钟。

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

采用加密技术,将用户信息进行加密。以cookie的方式交给用户。

服务器拿到token时,通过解密算法就可以直接得到用户的信息。

1.3JSP

1.3.1什么是JSP

Java Server Page:用Java写的运行在服务器的页面。

JSP与Servlet一样,都是一种动态页面。

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

1.3.2Java的语法

前端代码

  1. 指令标签

<%@标签名 属性 = “值” %>

  1. page

作用:配置当前JSP页面的属性

Language:配置当前jsp采用的内嵌语言类型,通常就是Java

contenType:设置当前页面的内容类型,“text/html;charset=UTF-8” 相当于response.setContextType();

pageEncoding:设置页面的保存格式

import:引入外部的类,相当于Java中的import关键字

isErrorPage:当前的JSP是不是一个错误处理页面。可以使用exception对象

errorPage:当前页面的错误处理页面,当当前页面抛出异常时,由哪个页面进行处理

  1. include

作用:静态地引入外部的页面。

会在JSP页面进行翻译时,将外部页面的代码直接复制过来。

  1. taglib

作用:引入JSP的自定义标签库

JSTL中会用到

language:设置语言,通常为Java

contentType:

  1. 动作标签

<jsp:标签名 属性=”值”></jsp:标签名>

  1. forward

作用:在jsp页面中进行请求转发

  1. include

作用:动态的引入外部的页面

在jsp页面执行时,嵌入另一个jso页面执行的结果

  1. param

作用:可以在forward和include内部传递参数。

<div>${param.username}</div>

  1. 内嵌Java代码
  1. Java代码片段

<%

可以像在Java方法中编写Java代码

%>

  1. 输出表达式

将表达式的值输出到JSP页面中

<%=Java表达式%>

  1. 声明片段

<%!

可以像在Java类中一样编写代码

%>

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

1.九大内置对象(JSP的隐含对象)

在JSP中,不需要声明,不需要定义,就可以直接使用的对象

  1. request

请求对象,HttpServletRequest类型的

提供来自客户端的数据:url、参数、客户端操作系统、浏览器、IP

获取服务器的信息:获取session,……

request.setAttribute(属性名,值)

request.getAttribute(属性名)

request.removeAttribute(属性名)

  1. response

响应对象,HttpServletResponse类型的

向客户端返回数据

  1. session

会话对象,HttpSession类型的

表示一个客户端与服务器一段时间内的多次请求

session.setAttribute(属性名,值)

session.getAttribute(属性名)

session.removeAttribute(属性名)

  1. application

应用对象,ServletContext类型的,Servlet的上下文。

应用对象代表的就是当前的一个项目。在当前项目的所有页面中都可访问到这一个application对象

App.setAttribute(属性名,值)

App.getAttribute(属性名)

App.removeAttribute(属性名)

  1. page

表示是当前的JSP页面。相当于this

  1. pageContent

表示当前页面的上下文,可以获取其他的8个内置对象

  1. config

表示当前页面的配置信息。相当于Servlet的config

  1. out

输出对象,可以向当前的JSP页面中输出信息。

Write()            输出的数据不能是null,如果为null则抛出空指针异常。

append()

println()

  1. exception

异常对象,用来表示上一个页面抛出的异常。

只存在于错误处理页面当中,也就是page的isErrorPage设置为true的页面。

2.四大作用域

九大内置对象作用范围

  1. Page作用域-页面作用域

范围是当前的JSP页面,页面发生变化,对象就会失效

对象:paeg、pageContext、config、out、exception

  1. Request作用域-请求作用域

范围是一次请求,请求结束后对象就会失效。

对象:request对象、response对象

  1. Session作用域-会话作用域

范围是当前会话。

对象:Session对象

  1. Application作用域-应用作用域

应用作用域是范围最大的作用域,在整个项目中都有效。

对象:Application对象。

 

  1. JSP的需要编译,Tomcat必须知道JDK安装在哪里,必须配置JAVA_H0ME变量。
  2. JSP翻译和编译的中单文件在哪?

JSP会被翻译成一个Java的类,继承自HttpJspBase,又继承自

九大内置对象就是JSP翻译后的类中的jspService方法的参数和局部变量。

1.3.5EL表达式

1.express language表达式语言

向JSP页面中输出内容:

  1. Out对象
  2. 输出表达式<%=表达式%>

语法

${属性}

EL表达式,也是向页面中输出内容,写法更加的简单。

${对象,属性}

底层实际上是调用对象的get方法。

${集合[下标]}

2.EL表达式的隐含对象

pageScope

requestScope

sessionScope

applicationScope

param

cookie

当没有使用隐含对象时,优先从request中获取属性,如果取不到再去session中取,如果还没有,再去Application中取。如果都没有则什么都不输出。

1.3.6JSTL

JSP的标准

想查询一下所有的项目信息,并且显示出来

在JSP中内嵌Java代码会让页面结构很复杂

  1. 先引入包

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->

<dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>jstl</artifactId>

    <version>1.2</version>

</dependency>

放到pom.xml文件中

  1. 在JSP页面中,引入JSTL

  1. JSTL模块
  1. Core:核心模块,提供逻辑处理
  2. Fmt:format,格式化模块,提供日期、数字格式化方式
  3. Functions:函数模块,提供了常用的函数
  4. xml:xml格式的模块。基本不用
  5. sql:sql语句的模块。基本不用

1.4Servlet+JSP项目实现

1.4.1设计时,从上往下

1.4.2实现时,从下往上

1.数据库

根据功能创建好相应的数据表

2.实体类

entity包下的类

1)实体类名与数据表名一致。

2)实体类的属性与数据表的字段一致。

名字要一样

数据类型要匹配:不要使用基本数据类型,而是使用包类

时间类型->java.util.Date;decimal-> BigDecimal

3)封装:属性私有化,提供公共的Get和Set方法,lombok

4)实体类应该有无参构造方法(给反射创建对象),toString(方便打印)

3.持久层

1)定义持久层的接口

规定需要实现的方法,也就是对数据库的操作。

2)实现持久层的接口

定义类实现Dao层的接口,添加需要实现的方法。

声明DBUtil属性,帮助操作数据库。(合成复用)。

实现每一个方法:编写SQL,调用DBUtil的方法(增、删、改调用update、查调用query、queryOne)。

4.业务逻辑层

1)定义业务层的接口

规定需要实现的方法,具体操作业务、业务流程。

2)实现业务层的接口

定义类实现service层接口,添加需要实现的方法。

声明Dao层的接口对象,调用数据库的操作

实现每一个方法:1.参数验证;2.访问数据库;3.逻辑处理。

5.控制层

1)定义Servlet。

配置Servlet对应的路径。

2)实现doGet和doPost方法。

3)为了让一个Servlet能够处理多个操作,这些操作应该都是面向同一功能的。利用反射封装了一个BaseServlet类,根据action参数的值调用不同的方法。

4)添加Service层的属性

5)实现具体的方法

1.参数获取:request.getParameter(“参数名”)

2.调用业务(Service层)

3.返回数据(跳转页面):请求转发(request传递数据),重定向。

6.视图层

1)显示数据的页面

表格,JSTL+EL

2)提供操作的页面

表单,action提交的页面,method一般为post。

1.5Ajax

Ajax(Asynchronous异步的)使用JS和XML实现的异步请求。

XML:传递数据的格式,可扩展的标签语言

表示一个学生:tom,18岁

<student>

<name>tom<name>

<age>18<age>

</student>

JSON:一种更加简洁的数据格式,使用键值对表示数据

表示学生:tom,18

{“name”:”tom”,”age”:18}

1.5.1客户端JS

使用jQuery的ajax方法。

$.ajax();

$.get();

$.post();

$.ajax({参数});

核心参数:
1.url

Ajax请求的路径。

2.data

传递的参数,也是一个JS的对象

3.type

请求方式:get、post、put、delete。。。

4.dataType

url返回的数据格式,可以是xml,json,html。。。

5.success

请求返回成功时的回调函数,服务端返回了dataType对应的格式的数据。

函数的参数就是返回的数据。

6.error

请求失败时的回调函数

$.ajax({

url:’dept.action’,

data:{id:1},

type:’get’,

datatype:’json’,

success:function(result){},

error:function(){}

})

1.6 Filter

1.6.1Filter

1.6.2 Filter接口

init:过滤器进行初始化

dofilter:对请求进行过滤操作

放行       FilterChain.doFilter()     执行过滤器链中的其他的过滤器。

拦截

destroy:过滤器进行销毁

实现一个Filter

1.创建一个类,实现Filter接口

2.配置Filter

1)

2)注解:@WebFilter

1.6.3Filter应用场景

1.用户登录过滤
2.给所有页面添加编码的处理

给Request和Response对象添加编码的处理。

客户端传递的参数:

客户端返回的数据:

1.7Listener

1.7.1什么是Listener?

监听器

监听三个对象:Request对象、Session对象、Application对象

监听他们的生命周期:创建、销毁

监听他们的属性变化:setAttribute,removeAttribute

1.7.2六个接口

1.Request

ServletRequestListener                      生命周期

requestInitialized:Request对象初始化完成

requestDestroyed:Request对象销毁完成

ServletRequestAttributeListener         属性变化

attributeAdded:添加属性setAttribute

attributeReplaced:修改属性setAttribute

attributeRemoveed:删除属性removeAttribute

2.Session

HttpSessionListener                           生命周期

sessionCreated:Session对象创建

HttpSessionAttributeListener              属性变化

attributeAdded:添加属性setAttribute

attributeReplaced:修改属性setAttribute

attributeRemoveed:删除属性removeAttribute

3.Application

ServletContextListener                       生命周期

Servlet

1.7.3使用Listener

1.创建一个类,实现某一个监听器的接口
2.配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值