- mvc三层架构的含义具体说一下这三层是什么意思?
m:model 模型层 v:view 视图层 ,比如html,jsp,vue c:controller 控制层
三层架构是指 视图层 view 、服务层 service 、持久层 dao 他们分别完成不同的功能
view层 :用于请求用户提交的代码在这里编写
service层:系统的业务逻辑主要在这里完成
dao层:直接操作数据库的代码在这里编写
为了降低各层间的耦合度,在三层架构设计中,采用面向抽象编程。即上层对下层的调用,通过接口实现的。但是下层对上层的真正服务提供者,是下层接口的实现类。服务标准(接口)是相同的,服务提供者(实现类)可以更换,层间解耦合实现了。
2.MVC
MVC model 模型 、 view 视图 及 controller 控制器。
view :视图 ,为用户提供页面,与用户直接进行交互。
model :模型,承载数据,并对用户提交请求进行计算的模块。一类称为数据承载bean:实体类,专门用户承载业务数据的,一类称为业务处理类,service或dao对象,专门用于处理用户提交请求的。
controller:控制器,用于将用户请求转发给相应的model进行处理,并根据model的计算结果向用户提供相应响应。
mvc架构程序的工作流程:
(1)用户通过view页面向服务端提出请求,可以是表单请求、超链接请求、ajax请求
(2)服务端controller控制器接收到请求后对请求进行解析,找到相应的model对用户请求进行处理
(3)model处理后,将处理结果再交给controller
(4)controller接收到处理结果后,根据处理结果找到要作为向客户端发回的响应的view页面。页面经渲染后,在发送给客户端。
Web交互的最基本单位为HTTP请求。每个用户从进入网站到离开网站这段过程称为一个HTTP会话,一个服务器的运行过程中会有多个用户访问,就是多个HTTP会话。作用域解释如下。
2.jsp的四种作用域范围
page,session,request,application
application :服务器启动到停止这段时间。application的作用范围在服务器一开始执行服务,到服务器关闭为止,application的范围最大,停留的时间也最久。application作用域上的信息传递是通过servletcontext实现的。(整个web工程内有效)
session:HTTP会话开始到结束这段时间。session的作用范围为一段用户持续与服务器连接的时间,一但与服务器断线,这个属性就无效。只要将数据存入session对象,数据的范围为session。(一次会话内有效,也就是打开浏览器访问服务器到关闭浏览器)
request:HTTP请求开始到结束这段时间。request的范围是指在一jsp网页发出请求到另一个jsp网页之间,随后这个属性就失效。设定request的范围是可利用request的对象中的setAttribute( )和getAttribute( );(一次请求内有效)
page:当前页面从打开到关闭这段时间(当前jsp页面范围内有效)
3.web开发中前端页面是如何跟后端服务器数据交互的
首先要明白一点,servlet需要容器的支持才能够运行,比如tomcat达到servlet的请求,需要servletrequest会对象和servletresponse对象去处理servlet在服务器中的运行
1.加载到内存->2.初始化init(())->3.调用servicedoget/dopost->4.销毁destory(())
4.servlet的生命周期
servlet的生命周期就是从servlet出现到销毁的全过程。主要分为一下几个阶段
加载类->实例化(为对象分配空间)->初始化(为对象的属性赋值)->请求处理(服务阶段)->销毁阶段
5.list和map集合的区别
1.list和set是存储单列数据的集合,map是存储键和值双列数据的集合。
2.list中存储的数据是有序的,并且允许重复;map中存储的数据是无序的,其键是不能重复的,值可以重复;set中存储的数据是无序的,且不允许有重复,但元素在集合中的位置是由元素的hashcode值决定的,位置是固定的(set根据hashcode进行数据存储,所以位置是固定的,但是位置不是用户能控制的,所以对于用户来说set中的元素还是无序的。)
6.map集合存储数据的顺序为什么是无序的?
map对于每个元素保存一份,是基于“键”的,是成对的数据结构,键值必须具有唯一性(键允许重复,值不允许重复)。
hashmap是基于哈希表的map接口实现,以key-value的形式存在,是map的一个实现类,hashmap是无序的,因为hashmap中的元素在数组中的位置是由元素的hash值决定的。
7.序列化是什么意思?
序列化:把对象转化为字节序列的过程称为对象的序列化
反序列化:把字节序列恢复为对象的过程称为对象的反序列化
对象序列化的目的就是传递和保存对象,保证对象的完整性和可传递性。
比如通过网络传输或者把一个对象保存成一个文件的时候,需要序列化
基于对象能够在程序不运行的情况下仍能存在并保存其信息的需求,对象的序列化功能孕育而生
通过什么方法进行序列化?
序列化是通过实现serializable接口,该接口没有需要实现的方法,implement Serializable只是为了标注该对象是可被序列化的,使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象,接着使用ObjectOutputStream对象的writeObejct(Object object)方法就可以将参数的obj对象到磁盘,需要恢复的时候使用输入流。
8.servlet的doget和dopost方法的区别与使用?
1.区别
在使用表单提交数据到服务器的时候有两种方式可供选择,一个是post一个是get。可在<form>中的method属性中指定提交的方式,如:<form action="inputForm" method="get"> 如果不指定,则默认get
不同点一 get和post都能够提交数据,那么他们有什么不同呢?
通过get方式提交的数据有大小的限制,通常在1024字节,而通过post方式没有数据大小的限制,理论上传送多少数据都可以
不同点二
通过get传递数据,实际上是将传递的数据按照"key,value"的方式跟在url后面,而post传递数据是通过http请求的附件进行的,在url中没有明文显示。
9.jsp和servlet的区别?
(1)servlet是服务器端的Java程序,他担当客户端和服务端的中间层
(2) jsp中文名叫Java服务器页面,其本质是一个简化的servlet设计。jsp是一种动态页面设计,它 的本质是把逻辑从servlet中分离出来
(3) jvm只能识别Java代码,不能识别jsp,jsp编译后变成了servlet,web容器将jsp的代码编译成jvm所识别的Java类(servlet)
(4) jsp有内置对象,servlet没有内置对象
10.jsp有哪些内置对象?作用分别是什么?
jsp九大内置对象:
1.pagecontext,页面上下文对象,相当于页面中所有功能的集合,通过它获取out,request,response,application,session
2.request,3.response,4.session,5.application ,应用程序对象,application实现了用户间的数据共享,6.page 就是jsp数据本身,7.exception ,8.out,out用于在web浏览器内输出信息,并且管理应用输出缓冲区,作用域为page,9.config,取得服务器的配置信息
11.forward和redirect的区别?
1.forward是直接请求转发;redirect是间接请求转发,又叫重定向。
2.forward,客户端和浏览器执行一次请求;redirect,客户端和浏览器执行两次请求。
3.forward,经典的MVC模式就是forward;redirect,用于避免用户的非正常访问。(例如用户非正常访问,servlet就可以将HTTP请求重定向到登录页面)。
4.forward,地址不变;redirect,地址改变。
5.forward常用方法:RequestDispatcher类的forward()方法;redirect常用方法:HttpServletRequest类的sendRedirect()方法。
12.什么是spring框架?spring框架有哪些模块?
spring是一个控制反转和横向切面的容器框架
spring有七大功能模块
core,aop,orm,dao,web,context,MVC
1.core模块是spring的核心类库,core实现了ioc功能
2.aop模块是spring的aop库,提供了aop机制,并提供了常见的拦截器,供用户自定义和配置
3.提供对常用orm框架的管理和支持,hibernate 、mybatis等
4.spring提供对jdbc的支持,对jdbc进行封装
5.context模块提供框架式的bean的访问方式,其他程序可以通过context访问spring的bean资源,相当于资源注入
6.mvc模块为spring提供了一套轻量级的mvc实现,即springmvc
13.spring 有几种配置方式?
1.xml配置文件
2.基于注解的方式
(1)bean的定义
@component、@controller、@service、@repository
(2)bean的注入
@Autowire
3.基于Java的方式
14.spring bean的生命周期?
1.通过构造器或工厂方法创建bean实例;
2.为bean的属性赋值;
3.调用bean的初始化方法;
4.使用bean;
5.当容器关闭时,调用bean的销毁方法;
15.springbean有哪些作用域?
singleton:bean在每个spring ioc容器中只有一个实例,也是spring中的默认配置
prototype:一个bean的定义可以有多个实例
request:每次http请求都会创建一个bean,故该作用域仅在基于web的spring applicationcontext下情况下有效
session:在一个全局的httpsession中,一个bean定义对应一个实例
global -session :在一个全局的httpsession中,一个bean定义对应一个实例
16.什么是aop以及作用?
aop就是横向切面编程。
aop的编程思想就是把业务逻辑和横切的问题进行分离,从而打到解耦的问题,使代码的重用性和使用率变高。
aop的作用是对业务逻辑的各个部分进行隔离,降低业务逻辑的耦合性,提高代码的可重用性和开发效率。
2.aop有哪些应用场景?
日志记录 权限校验和管理 缓存 事务
17.aop的实现原理?
aop是基于代理实现的,spring提供了两种方式来生成代理对象:
JDK动态代理:利用拦截器加反射机制生成一个实现代理接口的匿名类
CGlib:利用asm开源包修改字节码生成子类,且不支持final修饰的方法
18.spring事务的开启方式?
编程式事务:编程方式实现事务管理
声明式事务
可知编程式事务每次实现都要单独实现,但业务量大功能复杂时,使用编程式事务无疑是痛苦的,而声明式事务不同,声明式事务属于无侵入式,不会影响业务逻辑的实现。