文章目录
- 强化历程3-JavaWeb及SSM,SpringBoot系列(2023.6.22第一次更新)
- 习题汇总
- 1 JSP页面内容组成?
- 2 cookie和session的区别?
- 3 web应用中如何利用session来维持客户端和服务端的关系?
- 4 session销毁的方式?
- 5 请求转发和重定向的区别?
- 6 什么是servelt?
- 7 Get和Post请求区别?
- 8 如果客户端禁止 cookie 能实现 session 还能用吗?
- 9 什么是过滤器?
- 10 什么是拦截器?
- 11 什么是Spring?
- 12 Spring的IOC?
- 13 依赖注入的方式
- 14 与依赖注入的相关注解?
- 15 Spring的Aop?
- 16 Aop相关注解?
- 17 Spring对象的创建时机
- 18 Spring的受管对象作用域
- 19 当把对象设置为prototype(原型模式)时,这些对象还受spring管理吗?
- 20 spring注解?
- 21 声明式事务的传播特性?
- 22 什么是SpringMVC?
- 23 SpringMVC工作流程?
- 24 SpringMVC常用注解?
- 25 @SpringBootApplication
强化历程3-JavaWeb及SSM,SpringBoot系列(2023.6.22第一次更新)
习题汇总
1 JSP页面内容组成?
答:
- 静态内容:
HTML/CSS/JavaScript
- 指令
<%@ 指令名%>
: 指令名一般用于设置页面- 小脚本
<%java代码%>
:用于编写java代码,除了不能定义方法和属性可以写任意java代码- 表达式
<%=表达式%>
:用于向页面输出java内容- 声明
<%!声明内容%>
:用于在页面中声明方法- 注释
<%–JSP–%>
:JSP注释- 标准动作
< jsp:动作名/>
:用于在JSP页面中执行一个功能
2 cookie和session的区别?
答:
存储位置不同:
Cookie是由浏览器存储在客户端本地的小文本文件,而Session是由服务器存储在内存或者硬盘上的数据结构。
安全性不同:
因为Cookie存储在客户端,所以它们对安全性更加敏感,容易被黑客攻击和窃取。Session则相对更加安全,因为它们存储在服务器端,并且可以使用加密算法来保护数据。
存储内容不同:
Cookie可以存储少量的数据,例如用户名、喜好设置等;而Session则可以存储更多的数据,例如用户的购物车、浏览历史、登录信息等。
有效期不同:
Cookie可以设置过期时间,从而使得它们可以在某个日期之前保持有效;而Session则只有在用户关闭浏览器或者超时后才会失效。
使用方式不同:
在使用上,Cookie通常用于识别用户和跟踪他们的浏览行为,例如记录用户喜好、广告投放、统计分析等;而Session则通常用于验证用户身份、存储用户的会话状态、保护用户隐私等。
3 web应用中如何利用session来维持客户端和服务端的关系?
答:
通过sessionId维持
① 当客户端第一次访问服务端,服务端是否存在对应sessionId,若不存在则是第一次访问
② 服务端创建一个session对象生成一个唯一的sessionId,将该sessionId保存到服务端并响应到客户端
③ 客户端浏览器接受到该sessionId,会自动将该sessionId保存下来(临时存储)
④ 客户端每次向服务端发送请求时都会将sessionId自动发送到服务端
⑤ 服务端接收到sessionId检测该sessionId是否有效,同时可以从session对象中获取数据
4 session销毁的方式?
答:
- 服务端手动销毁,使用session.invalidate();销毁
- 超时,当客户端在一定时间内未向服务端发送任何请求,服务端会认为该session失效自动销毁(tomcat的默认超时时间为30分钟)
- 服务器关闭或重启
5 请求转发和重定向的区别?
答:
① 请求转发只向服务器请求一次,后在服务器内部跳转,不会再次发送请求
重定向是在向服务器发送一次请求响应后又向目标服务发送一次请求
② 请求转发地址栏显示的是源地址
重定向地址栏显示的是目标地址
③ 请求转发在实现跳转可以使用"url传参"的形式项目地址传递数据,还可以将"请求对象"传递到目标地址
重定向在实现跳转可以使用"url传参"的形式项目地址传递数据
④ 请求转发只能跳转服务器内部地址
重定向可以跳转任意地址
⑤请求转发的效率要高于重定向
6 什么是servelt?
答:
- servelt类是运行在服务端的一个Java类,该类有resquest(请求对象),response(访问对象),和访问地址;
- 获取客户端请求并进行响应;
7 Get和Post请求区别?
答:
- get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。- get因为参数会放在url中,所以隐私性,安全性较差,由于在浏览器地址栏中传参,请求的数据长度是有限制的,
不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;- get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
- get请求可以被缓存,post请求不会被缓存。
- get请求会被保存在浏览器历史记录当中,post不会。
get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。- get请求只能进行url编码(appliacation-x-www-form-urlencoded),
post请求支持多种(multipart/form-data)等。
8 如果客户端禁止 cookie 能实现 session 还能用吗?
答:
- 可以,我们可以在url中存储sessionId
- 或者使用localStorage 等其他客户端存储方式存储sessionId;
9 什么是过滤器?
答:
在实际应用中,我们不可能将所有页面都开放给不同用户,因此就有了过滤器,防止用户随便访问其他用户的数据
过滤器是特殊的servlet,过滤器配置路径后无需调用,当前请求这些配置的路径时,过滤器自动调用
当请求访问系统时,首先过滤器收到请求并进行处理,处理结束后,该请求传递到下一个过滤器或Servlet
10 什么是拦截器?
答:
- 如果说过滤器过滤的是整个页面,拦截器则是拦截某个具体方法,或是某些数据;
- 我们可以使用拦截器做一些通用功能,如日志记录,权限验证等;
11 什么是Spring?
答:
- 是一种企业级的Web框架,可以轻松整合其他组件
- Spring在整合其他框架的过程中,将一些通用的功能、各组件间的依赖关系自动管理起来,让开发者从这些繁琐重复的代码中解脱出来,从而实现“优雅编程”(开发者只需编写个性化和业务相关的代码),让开发变得更简单、更方便。
12 Spring的IOC?
答:
- 控制反转,将对象的创建及对象的依赖交给spring管理;
- 我们通常使用依赖注入方式实现,所谓依赖注入,就是将一个对象注入到另外一个对象
13 依赖注入的方式
答:
- set注入(自动装配)、构造器注入
14 与依赖注入的相关注解?
答:
@AutoWired
:根据类型注入@Qualifier
: 按照类型的基础上在根据id进行匹配注入,必须搭配@Autowired
使用。@Resource
:直接按照id注入;@Value
:用于注入基本数据类型和String类型,也可以用于获取配置文件数据
15 Spring的Aop?
答:
- AOP就是把系统中重复的代码抽取出来,单独开发 ,在系统需要时,使用动态代理技术,在不修改源码的基础上,将单独开发的功能通知织入(应用)到系统中的过程,完成完整的代码逻辑
16 Aop相关注解?
答:
@Aspect
:当一个类使用了@Aspect
注解该类就成为了一个切面类@Pointcut
:将连接点切入到哪个方法@Before
(切入点):前置通知,通过切入点名字指定当前通知的连接点,当执行哪些方法方法时执行哪些通知@AfterReturning
:后置通知@AfterThrowing
:异常通知@After
:最终通知@Around
:利用try-catch-finally进行前置,后置,异常,最终通知
17 Spring对象的创建时机
答:
- 默认情况下,当spring容器被加载时,spring容器里的对象自动创建
- 可以配置为懒加载模式,当第一次使用该对象才创建对象
18 Spring的受管对象作用域
答:
- 默认情况下,spring的受管对象是Singleton(单例模式)的,当对象创建后就不再创建
- 我们可以通过设置属性为prototype(原型模式),使当前受管对象为非单例的,每次使用该对象,就会创建一个新对象
19 当把对象设置为prototype(原型模式)时,这些对象还受spring管理吗?
答:
- 不受,当设置为prototype(原型模式)时,spring需不停创建对象,会及其耗费资源,所以当设置为prototype(原型模式)时,这些对象不受spring管理
20 spring注解?
答:
@Component
: 将使用该注解的类的实例交给Spring进行管理,默认情况下对象为类名首字母小写,可以通过value属性设置对象名
@Service
:该注解的作用和@Component
注解一样,@Component
注解的别名,属于语义注解,表示业务层实例(业务层注解)
@Repository
:该注解的作用和@Component
注解一样,@Component
注解的别名,属于语义注解,表示持久层实例(持久层注解)
@Controlle
r:该注解的作用和@Component
注解一样,@Component
注解的别名,属于语义注解,表示控制层实例(控制层注解)
@ComponentScan
:组件扫描注解,使用该注解,该注解会指定spring容器启动时扫描的包扫描器会自动扫描指定包下带有
@Component
,@Service
,@Repository
,@Controller
的类创建对象并将这些对象管理起来
@Autowired
:按类型装配,自动将spring受管对象中同类型的实例注入到相对应的属性中。
@Qualifier
:按实例名称装配,该注解在属性上使用时不能单独使用,需要和@Autowired
一起使用
@Resource
:按名字装配,当指定的对象名不存在时在按照类型装配,当同类型的实例有多个时报异常,可以通过name属性指定实例名(默认为属性名)
@Value
:用于注入基本类型和字符串类型,当使用外部属性文件注入基本类型或字符串类型时需要使用@PropertySource()
指定外部文件,并在Value注解中使用Spring的EL表达式获取文件中的值,如:@Value(“${key}”)
21 声明式事务的传播特性?
答:
- propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
- propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
- propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
- propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
- propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
- propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作
22 什么是SpringMVC?
答:
SpringMVC属于Spring体系中的一个模块
SpringMVC是基于MVC的一个框架技术
SpringMVC提供了一套强大的控制器体系,通过这套控制器可以大大简化Web应用的开发,SpringMVC它将一些比较繁琐的逻辑实现了自动化处理,不在需要开发人员手动编写,如:参数自动封装、JSON自动转换等
23 SpringMVC工作流程?
答:
24 SpringMVC常用注解?
答:
@Controller
:控制器注解@RequestMapping
:控制器访问路径注解@ResponseBody
:设置方法返回值为响应体并自动进行JSON转换注解@RestController
:@Controller+@ResponseBody
两个注解组合@SessionAttributes
:设置session作用域存储的属性注解@RequestParam("userAge")
:从请求参数中获取参数名为userAge的值并复制其后的变量@MapperScan()
:mybaits映射器扫描器@PropertySource("classpath:/db.properties")
:引入外部文件@RequestBody
:在参数中使用的注解,用于解析客户端传入的payload格式的数据@PathVariable
:表示参数来自于路径地址
25 @SpringBootApplication
答:
该注解包含三个注解
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制@ComponentScan
:启用@Component
扫描应用程序所在的软件包
:/db.properties")`:引入外部文件@RequestBody
:在参数中使用的注解,用于解析客户端传入的payload格式的数据@PathVariable
:表示参数来自于路径地址