javaweb基本三层架构

JAVAEE分层模型

在这里插入图片描述

web应用程序基本架构

在这里插入图片描述
浏览器发送请求
大项目一般会进行前后端分离

  • UI层
    前端服务武器
  • 业务逻辑层
    后端服务器
  • 数据访问层
    DBMS

Domain Object

(领域对象)层:此层由一系列的POJO(Plain Old Java Object)组成,这些对象是该系统的Domain Object,往往包含了各自所需实现的业务逻辑方法。

Data Access Object

,数据访问对象)层:此层由一系列的DAO组件组成,这些DAO实现了对数据库的创建、查询、更新和删除(CRUD(增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)))等原子操作。{在经典JAVAEE应用中,DAO层也被改称为EAO层,EAO层组件的作用与DAO层组件的作用基本类似。只是EAO层主要完成对实体(Entity)的CRUD操作,因此简称EAO层。}

业务逻辑层

此层由一系列的业务逻辑对象组成,这些业务逻辑对象实现了系统所需要的业务逻辑方法。这些业务逻辑方法可能仅仅用于暴露Domain Object对象所实现的业务逻辑方法,也可能是依赖DAO组件实现的业务逻辑方法

控制器层

次层由一系列控制器组成,这些控制器用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现层组件

表现层

此层由一系列的JSP页面、Velocity页面、PDF文档视图组件组成,负责收集用户请求,并显示处理结果

java项目中对应的结构

表示层:接受页面上的参数、找对应的sevice ,执行对应的方法、跳转页面
逻辑层:接受表现层的参数,执行对应的业务逻辑(调用dao层方法),返回对应数据
持久层:就是对数据库做增删查

Servlet

简介

Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet

扫描二维码关注公众号,回复: 13715673 查看本文章

特点

1)普通的java类,继承HttpServlet类,覆盖doGet、doPost等方法。
2)Servlet类只能交给tomcat服务器运行

使用Eclipse开发Servlet

如何新建一个项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

1)编写一个servlet类,继承HttpServlet

在这里插入图片描述

windows-perfrence

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

部分代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		System.out.println("第一个servlet");
		String id = request.getParameter("id");
		System.out.println(id);
	}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如何跳转页面

新建一个HTML页面

有两种方式
【1】重定向
【2】转发

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost:8080/FirstServlet/Servlet,我的应用上下文是FirstServlet,容器会将http://localhost:8080/FirstServlet去掉,剩下的/Servlet部分拿来做servlet的映射匹配。
映射匹配步骤:
1)首先在web.xml文件中查找是否有匹配的url-pattern的内容(/Servlet)
2)如果找到匹配的url-pattern,则使用当前servlet-name的名称到web.xml文件中查询是否相同名称的servlet配置
3)如果找到相同名称的servlet配置,则取出对应的servlet配置信息中的servlet-class内容(zzuli.edu.cn.Servlet),然后通过servlet-class里的内容,反射构造Servlet的对象,调用Servlet对象里面的方法。

JSP获得变量

通过el表达式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

JSP
在这里插入图片描述

在这里插入图片描述

Servlet 注解

Servlet3.0以上可以使用注解@WebServlet自动映射,不用在web.xml中配置 < servlet> 和 < servlet- mapping>
使用方法:编写一个servlet类,继承HttpServlet,然后在servlet上面加上@webServlet即可。
我用的就是3

九大内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

简介

在jsp中,有一些对象即开发者不需要自己去创建对象(全部由系统创建好),就可以直接使用对象调用相应的方法,这些由系统创建的对象称为内置对象

四大作用域对象

request

javax.servlet.http.HttpServletRequest
请求对象
Request

session

javax.servlet.http.HttpSession
会话对象
Session

application

javax.servlet.ServletContext
应用程序对象
Application

pageContext

javax.servlet.jsp.PageContext
页面上下文对象
Page

两个输出

out

javax.servlet.jsp.JspWriter
输出对象
Page

response

javax.servlet.http.HttpServletResponse
响应对象
Page

三个打酱油

page

java.lang.Object
页面对象
Page

config

javax.servlet.ServletConfig
配置对象
Page

exception

java.lang.Throwable
例外对象
Page

对作用域的解释

Page域

只能在当前jsp页面使用(当前页面)。

Request域

只能在同一请求中使用(转发)。

Session域

只能在同一会话(session会话)中使用(私有的)。

Context(Application)域

只能在一个web应用中使用(全局)

解析各个内置对象

request 对象

该对象代表客户端的请求信息,主要用于接收通过HTTP协议传送到服务器的数据(包括请求头信息,系
统信息,请求方法以及请求参数等)。request对象的作用域为一次请求。
【1】常用方法:
getParameter(String name) :返回指定参数名称的数值,如果没有相对应的数值则返回null。
getParameterValues(String name):返回具有相同参数名称的数值的集合,返回String类型的数组。
getRequestDispatcher(String uripath):页面的转发,地址不会发生改变,因为针对客户端来说只发送一
次请求。

session 对象

session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对
象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据的,因此保
存数据的格式为“key/value”。
session对象的value可以使用复杂的对象类型,不仅仅局限于字符串类型。
【1】session对象就做会话:即每次浏览器访问网站,服务器就会给这个请求创建一个会话,存储到服
务器端,服务器根据每一个会话的ID区别每一个请求的用户。
【2】常用方法:
setAttribute(String key,Object obj):以key/value形式保存数据。
getAttribute(String key:通过key获取数据。
getId:获取session id。
invalidate():设置session对象失效。
setMaxInactiveInterval(int interval):设置session对象的有效期。
removeAttribute(String key):移除session中的属性。
【3】 Session过期时间的三种设置方式:

  1. 在tomcat服务器的web.xml文件中进行设置,tomcat默认时间为30分钟。
    web.xml文件在conf文件夹下,具体设置如下:(单位为分钟)
  2. 在项目中的web.xml文件中进行设置:
    设置方法如a,优先顺序b>a,也就是说b设置了,a就无效了。
  3. 在代码中设置:通过setMaxInactiveInterval()方法设置。

session 的销毁

< session-config> < session-timeout>30< /session-timeout> < /session-config>

  1. 设置的时长到了以后自动销毁,常见的情况就是你在一个页面长时间不进行操作就要重新登录。
  2. 调用invalidate()方法摧毁,常见的情况是注销登录。
    注意事项
    Session的存储类型可以是任意类型。存储位置在服务器端,安全性比较高。
    在同一台电脑中,不同的浏览器也认为是不同的用户,也会分配一个session id。
    session也会随着浏览器的关闭而失效。但请注意,session还会保留在服务器端,一直到设定的时间,
    才真正的被销毁。

cookie

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种
数据存储功能。
cookie由服务器生成,发送给浏览器,浏览器把cookie以 K-V 形式保存到某个目录下的文本文件内,下
一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一
些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

cookie 和session的关系

session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候
会话cookie消失,所以sessionid也就消失了,但是session的信息还存在服务器端,只是查不到所谓的
session,但它并不是不存在。所以session在服务器关闭的时候,或者是session过期,又或者调用了
invalidate(),再或者是session中的某一条数据消失调用session.removeAttribute()方法,session在通
过调用session.getsession来创建的。

JDBC

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来
访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是SunMicrosystems的商标。我们通常说的JDBC是面向关系型数据库的.
JDBC 是sun公司提供的一套接口
接口都有调用者和实现者,面向接口调用,面向接口写实现类,都属于面向接口编程
在这里插入图片描述

filter

过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应
如下图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器
中被处理掉
在这里插入图片描述

过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码
的重用,不必每个servlet中还要进行相应的操作

过滤器简单应用

1、新建一个class,实现接口Filter(注意:是javax.servlet中的Filter)。
2、重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。
3、在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错
在这里插入图片描述
< url-pattren> 处定义过滤器作用的范围。一般有以下规则:
1.作用与所有web资源:< url—pattern>/* < /url-pattern> 。则客户端请求访问任意资源文件时都要经过过滤器的过滤,通过则可以访问,否则不能访问。

2.作用于某一文件夹下所有文件:< url—pattern>/dir/* < /url-pattern>
3.作用于某一种类型的文件:< url—pattern>.扩展名 < /url-pattern> 。比如< url—pattern>.jsp< /url-pattern> 过滤所有对jsp文件的访问请求。
4.作用于某一文件夹下某一类型文件:<url—pattern>/dir/ * .扩展名
< /url-pattern> < filter> < filter-name>loginFilter< /filter-name>//过滤器名称
< filter-class>com.nnngu.filter.loginFilter< /filter-class>//过滤器类的包路径
<init—param> //可选
< param—name>参数名< /param-name>//过滤器初始化参数
< param-value>参数值< /param-value>
</init—pamm>
< /filter> < filter-mapping>//过滤器映射
< filter-name>loginFilter < /filter-name> <url—pattern>指定过滤器作用的范围
< /url-pattern>
< /filter-mapping>如果一个过滤器需要过滤多种文件,则可以配置多个
< filter-mapping> ,一个mapping定义一个urlpattern来定义过滤规则。如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_57379855/article/details/123651164