简单介绍一下两种盒子模式
CSS盒子模型有两种主要模式:
标准盒子模型(W3C盒子模型):
在这种模式下,元素的宽度和高度只包括内容区域(content),不包括内边距(padding)、边框(border)和外边距(margin)。
总宽度 = 内容宽度 + 左右内边距 + 左右边框
总高度 = 内容高度 + 上下内边距 + 上下边框
IE盒子模型(也称作
border-box
盒子模型):在这种模式下,元素的宽度和高度包括了内容区域、内边距和边框,但不包括外边距。
总宽度 = 设定的宽度(内容宽度 + 左右内边距 + 左右边框)
总高度 = 设定的高度(内容高度 + 上下内边距 + 上下边框)
使用box-sizing: border-box;
可以让你在现代浏览器中模拟IE盒子模型的行为,这样设置宽度时就包含了内边距和边框,这通常使得布局更加直观。默认情况下,大多数浏览器采用的是标准盒子模型。
jsp 和 servlet 有什么区别?
JSP (JavaServer Pages): 是一种基于Servlet的技术,用于生成动态网页内容。JSP页面本质上是一个Servlet,但它的语法更加接近HTML,允许嵌入HTML标签和脚本片段。
Servlet: 是Java Web应用的基础技术之一,用于处理客户端请求并生成响应。Servlet是Java类,需要编写特定的方法来处理HTTP请求。
主要区别在于:语法:JSP使用类似HTML的标签和脚本片段,更易于编写Web页面。
用途:JSP主要用于展示层,而Servlet更多用于控制层和业务逻辑处理。
编译:JSP在第一次请求时会被编译成Servlet,之后的请求直接调用编译后的Servlet。
JSP的内置对象及其作用:
out:
javax.servlet.jsp.JspWriter
类型的对象,用于向客户端输出数据。例如,可以使用out.println("Hello, World!");
来输出文本。request:
javax.servlet.http.HttpServletRequest
类型的对象,代表客户端发送的HTTP请求。response:
javax.servlet.http.HttpServletResponse
类型的对象,用于向客户端返回HTTP响应。session:
javax.servlet.http.HttpSession
类型的对象,用于存储特定用户会话所需的信息。application:
javax.servlet.ServletContext
类型的对象,提供对整个Web应用程序上下文的访问,通常用于全局变量和初始化参数。config:
javax.servlet.ServletConfig
类型的对象,包含Servlet配置信息,如初始化参数。page:
java.lang.Object
类型的对象,代表当前页面的实例。pageContext:
javax.servlet.jsp.PageContext
类型的对象,提供了对其他内置对象的访问,并且允许开发者访问JSP页面的方法和属性。exception:
java.lang.Throwable
类型的对象,仅在错误处理页面中可用,包含了引发错误的异常信息。
JSP的作用域(Scope):
JSP支持四种主要的作用域,这些作用域决定了对象生命周期的范围:
Page Scope:
生命周期:从页面加载开始到页面卸载结束。
用途:适用于存储在单个请求周期内使用的临时数据。
访问方式:通过
pageContext
对象的getAttribute()
和setAttribute()
方法来操作。
Request Scope:
生命周期:从请求开始到请求结束。
用途:存储在整个请求过程中需要的数据,比如表单提交的数据。
访问方式:通过
pageContext
或者直接使用request
内置对象的方法进行操作。
Session Scope:
生命周期:从会话开始到会话结束。
用途:存储需要跨多个请求的数据,例如用户的登录状态。
访问方式:通过
pageContext
或者直接使用session
内置对象的方法进行操作。
Application Scope:
生命周期:从应用部署开始到应用卸载结束。
用途:存储整个应用中所有用户共享的数据,如数据库连接池配置。
访问方式:通过
pageContext
或者直接使用application
内置对象的方法进行操作。
GET 和 POST 是两种常用的 HTTP 请求方法,它们在实际应用中有一些关键的区别。下面是 GET 和 POST 请求的主要区别:
GET请求和POST请求的区别
GET 请求
用途:
主要用于从服务器获取数据。
通常用于检索信息,如查询记录、获取资源等。
数据传输:
参数附加在 URL 中,例如
http://example.com/?key=value
。数据可见性高,因为它们出现在 URL 中。
安全性:
相对不安全,因为敏感信息可能会暴露在 URL 中。
数据可能会被浏览器历史记录保存,或者在服务器日志文件中留下痕迹。
限制:
URL 长度有限制,不同的浏览器和服务器有不同的长度限制。
不能用于发送大量数据。
缓存:
可以被浏览器或代理服务器缓存。
POST 请求
用途:
主要用于向服务器发送数据。
通常用于提交表单数据、创建/更新资源等。
数据传输:
参数包含在请求体中,而不是 URL 中。
数据不直接暴露在 URL 中。
安全性:
相对更安全,因为敏感信息不会直接暴露在 URL 中。
数据不会被浏览器历史记录保存,也不会在服务器日志文件中留下痕迹。
限制:
没有长度限制,可以发送大量数据。
缓存:
通常不会被缓存。
GET 请求通常用于检索数据,而 POST 请求用于提交数据。
GET 请求的数据是可见的,而 POST 请求的数据则隐藏在请求体中。
GET 不可以用于发送文件,而 POST 可以用于发送文件。
GET 请求可以被缓存,而 POST 请求通常不会被缓存。
session 和 cookie 有什么区别?
Session: 存储在服务器端的用户会话信息,安全性较高。
Cookie: 存储在客户端浏览器中的小文本文件,用于跟踪用户信息。
主要区别:
存储位置:Session在服务器端,Cookie在客户端。
安全性:Session更安全,因为敏感信息不会暴露给客户端。
容量限制:Cookie有大小限制(通常不超过4KB),Session没有严格限制。
说一下 session 的工作原理?
当用户访问网站时,服务器会创建一个Session对象,并为该会话分配一个唯一的Session ID。每次用户发起新的请求时,浏览器会将Session ID通过Cookie发送回服务器,服务器根据Session ID找到相应的Session对象,并从中读取或更新用户数据。
如果客户端禁止 cookie 能实现 session 还能用吗?
可以,但需要采用其他方法来传递Session ID。常见的替代方案包括URL重写和隐藏表单字段。
spring mvc 和 struts 的区别是什么?
Spring MVC: 是Spring框架的一部分,提供了灵活的MVC架构实现。
Struts: 是Apache的一个项目,专注于MVC架构,有自己的标签库和配置方式。
主要区别:
配置方式:Spring MVC使用XML或注解配置,Struts使用XML配置。
灵活性:Spring MVC更加灵活,可以轻松集成其他Spring组件。
社区支持:Spring MVC社区更大,更新更频繁。
如何避免 sql 注入?
参数化查询:使用预编译语句(PreparedStatement)。
输入验证:检查用户输入是否符合预期格式。
使用ORM框架:许多ORM框架自动处理SQL注入问题。
拦截器和过滤器的区别
拦截器 (Interceptor)
由Spring MVC提供
位置:位于控制器方法内部。
用途:主要用于拦截特定的控制器方法。
功能:主要用于流程控制,如权限验证、参数注入、异常处理等。
过滤器 (Filter)
由J2EE提供
位置:位于Web服务器和Servlet容器之间。
用途:用于拦截所有进出容器的请求和响应。
功能:主要用于预处理请求和响应,如设置字符集、登录验证、日志记录等。
简而言之:
拦截器更关注控制器级别的业务逻辑处理。
过滤器更关注全局性的请求处理。
怎么将过滤器调整为拦截器
实现的接口修改为HandlerInterceptor
,将过滤器继承的三个类修改为preHandler,将过滤器原本的return修改为return false或者true,在Spring配置文件中配置需要拦截的,放行的,拦截器的位置