简单介绍一下两种盒子模式

CSS盒子模型有两种主要模式:

  1. 标准盒子模型(W3C盒子模型)

    • 在这种模式下,元素的宽度和高度只包括内容区域(content),不包括内边距(padding)、边框(border)和外边距(margin)。

    • 总宽度 = 内容宽度 + 左右内边距 + 左右边框

    • 总高度 = 内容高度 + 上下内边距 + 上下边框

  2. 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的内置对象及其作用:

  1. out: javax.servlet.jsp.JspWriter 类型的对象,用于向客户端输出数据。例如,可以使用 out.println("Hello, World!"); 来输出文本。

  2. request: javax.servlet.http.HttpServletRequest 类型的对象,代表客户端发送的HTTP请求。

  3. response: javax.servlet.http.HttpServletResponse 类型的对象,用于向客户端返回HTTP响应。

  4. session: javax.servlet.http.HttpSession 类型的对象,用于存储特定用户会话所需的信息。

  5. application: javax.servlet.ServletContext 类型的对象,提供对整个Web应用程序上下文的访问,通常用于全局变量和初始化参数。

  6. config: javax.servlet.ServletConfig 类型的对象,包含Servlet配置信息,如初始化参数。

  7. page: java.lang.Object 类型的对象,代表当前页面的实例。

  8. pageContext: javax.servlet.jsp.PageContext 类型的对象,提供了对其他内置对象的访问,并且允许开发者访问JSP页面的方法和属性。

  9. exception: java.lang.Throwable 类型的对象,仅在错误处理页面中可用,包含了引发错误的异常信息。

JSP的作用域(Scope):

JSP支持四种主要的作用域,这些作用域决定了对象生命周期的范围:

  1. Page Scope:

    • 生命周期:从页面加载开始到页面卸载结束。

    • 用途:适用于存储在单个请求周期内使用的临时数据。

    • 访问方式:通过 pageContext 对象的 getAttribute()setAttribute() 方法来操作。

  2. Request Scope:

    • 生命周期:从请求开始到请求结束。

    • 用途:存储在整个请求过程中需要的数据,比如表单提交的数据。

    • 访问方式:通过 pageContext 或者直接使用 request 内置对象的方法进行操作。

  3. Session Scope:

    • 生命周期:从会话开始到会话结束。

    • 用途:存储需要跨多个请求的数据,例如用户的登录状态。

    • 访问方式:通过 pageContext 或者直接使用 session 内置对象的方法进行操作。

  4. Application Scope:

    • 生命周期:从应用部署开始到应用卸载结束。

    • 用途:存储整个应用中所有用户共享的数据,如数据库连接池配置。

    • 访问方式:通过 pageContext 或者直接使用 application 内置对象的方法进行操作。

GET 和 POST 是两种常用的 HTTP 请求方法,它们在实际应用中有一些关键的区别。下面是 GET 和 POST 请求的主要区别:

GET请求和POST请求的区别

GET 请求

  1. 用途

    • 主要用于从服务器获取数据。

    • 通常用于检索信息,如查询记录、获取资源等。

  2. 数据传输

    • 参数附加在 URL 中,例如 http://example.com/?key=value

    • 数据可见性高,因为它们出现在 URL 中。

  3. 安全性

    • 相对不安全,因为敏感信息可能会暴露在 URL 中。

    • 数据可能会被浏览器历史记录保存,或者在服务器日志文件中留下痕迹。

  4. 限制

    • URL 长度有限制,不同的浏览器和服务器有不同的长度限制。

    • 不能用于发送大量数据。

  5. 缓存

    • 可以被浏览器或代理服务器缓存。

POST 请求

  1. 用途

    • 主要用于向服务器发送数据。

    • 通常用于提交表单数据、创建/更新资源等。

  2. 数据传输

    • 参数包含在请求体中,而不是 URL 中。

    • 数据不直接暴露在 URL 中。

  3. 安全性

    • 相对更安全,因为敏感信息不会直接暴露在 URL 中。

    • 数据不会被浏览器历史记录保存,也不会在服务器日志文件中留下痕迹。

  4. 限制

    • 没有长度限制,可以发送大量数据。

  5. 缓存

    • 通常不会被缓存。

  • GET 请求通常用于检索数据,而 POST 请求用于提交数据。

  • GET 请求的数据是可见的,而 POST 请求的数据则隐藏在请求体中。

  • GET 不可以用于发送文件,而 POST 可以用于发送文件。

  • GET 请求可以被缓存,而 POST 请求通常不会被缓存。

  • Session: 存储在服务器端的用户会话信息,安全性较高。

  • Cookie: 存储在客户端浏览器中的小文本文件,用于跟踪用户信息。

主要区别:

  • 存储位置:Session在服务器端,Cookie在客户端。

  • 安全性:Session更安全,因为敏感信息不会暴露给客户端。

  • 容量限制:Cookie有大小限制(通常不超过4KB),Session没有严格限制。

说一下 session 的工作原理?

当用户访问网站时,服务器会创建一个Session对象,并为该会话分配一个唯一的Session ID。每次用户发起新的请求时,浏览器会将Session ID通过Cookie发送回服务器,服务器根据Session ID找到相应的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配置文件中配置需要拦截的,放行的,拦截器的位置