实验室建设网站,网站实名认证查询申请表,网页设计实训总结与展望150字,wordpress京东客源码前 言 #x1f349; 作者简介#xff1a;半旧518#xff0c;长跑型选手#xff0c;立志坚持写10年博客#xff0c;专注于java后端 ☕专栏简介#xff1a;纯手打总结面试题#xff0c;自用备用 #x1f330; 文章简介#xff1a;java web最基础、重要的8道面试题 文章目… 前 言 作者简介半旧518长跑型选手立志坚持写10年博客专注于java后端 ☕专栏简介纯手打总结面试题自用备用 文章简介java web最基础、重要的8道面试题 文章目录1.如何解决跨域问题2.Cookie和Session的区别3.Web容器的作用域4.拦截器、过滤器、监听器5.Post和Get的区别6.谈谈你对于servlet的认识7.mvc的理解1.如何解决跨域问题
跨域问题其实是因为浏览器的安全策略同源策略的限制当url的协议、域名或者端口号不一致时就会出现跨域问题。之所以要使用同源策略是为了防止其它ducument或者脚本对当前document的属性读取或进行修改。
可以通过下面方法解决跨域问题 跨域资源共享服务端设置 Access-Control-Allow-Origin(spring使用使用CrossOrigin注解即可实现) 微服务中使用gateway网关进行配置解决跨域问题 使用nginx代理如果使用nginx实现反向代理只需要修改其配置文件使其支持所有浏览器支持session
2.Cookie和Session的区别
相同二者都是用来跟踪浏览器用户身份的会话方式
不同 (1)存储位置与工作原理不同 cookie存储在浏览器中其工作原理是浏览器第一次发送请求到服务端时服务端会创建cookie并将cookie返回给浏览器。当浏览器再次访问服务器时会携带服务端创建的cookie服务器根据浏览器传输的数据判断浏览器的数据区分不同的用户
Session存储在服务器中session的工作原理当浏览器第一次访问服务器时服务器会创建一个session并且创建一个特殊的cookiename为”jsessionid”value为session的ID当之后浏览器再向服务器发送请求时就会携带这个特殊的cookie浏览器根据这个cookie里的sessionID查询到对应的session从而区分不同的用户。如果不存在这个特殊cookie说明浏览器被关闭或异常退出或者更换了浏览器将会重新创建一个存储sessionID的特殊cookie返回给浏览器。如果sessionid对应的session对象无法被找到说明session对象超过了存活时间默认为30分钟也会重新创建特殊cookie。如果存在就返回这个session对象。
(2)生命周期不同 session是一次会话用来记录当前用户是否登陆或者具有某种特殊的权限由于他存储在服务端因此你无法伪造。 cookie是浏览器缓存的变量只要不关闭浏览器cookie一直有效因此可以用cookie保证用户不掉线。如果在浏览器截取cookie包就有可能骗过服务器。当然你不能直接拷贝文件服务器会记录文件的修改时间所以你需要在时间上骗过服务器
(3),应用场景不同 在使用时我们可以将登陆信息等需要保证安全的信息存储在session里。然后其它信息存储在cookie里保证安全同时尽量避免服务器冗余
3.Web容器的作用域
application:整个应用 对应servlet中ServletContext 整个应用是指从应用启动到应用结束。我们没有说“从服务器启动到服务器关闭”
session会话 对应servlet中HttpSession 所谓当前会话就是指从用户打开浏览器开始到用户关闭浏览器这中间的过程。
request一次请求 对应servlet中的HttpServletRequest
page当前页面 如果把变量放到pageContext里就说明它的作用域是page它的有效范围只在当前jsp页面里。从把变量放到pageContext开始到jsp页面结束你都可以使用这个变量
4.拦截器、过滤器、监听器
拦截器 是面向切面编程AOPAspect Oriented Program的。就是在你的Service或者一个方法前调用一个方法或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现在你调用方法前打印出字符串或者做其它业务逻辑的操作也可以在你调用方法后打印出字符串甚至在你抛出异常的时候做业务逻辑的操作。 在springmvc中定义一个拦截器可以通过两种方式一种是通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类来定义另一种是通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。如果是springboot直接使用注解就可以。 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter用于对处理器进行预处理和后处理。 常见的拦截器的用途 1、日志记录记录请求信息的日志以便进行信息监控、信息统计、计算PVPage View等。 2、权限检查如登录检测进入处理器检测检测是否登录如果没有直接返回到登录页面 3、性能监控有时候系统在某段时间莫名其妙的慢可以通过拦截器在进入处理器之前记录开始时间在处理完后记录结束时间从而得到该请求的处理时间如果有反向代理如apache可以自动记录
过滤器 对于web应用来说过滤器是一个驻留在服务器端的Web组件。web容器接收到一个对资源的请求时它将判断是否有过滤器与这个资源关联如果有那么容器将这个请求交给过滤器处理。 在过滤器中你可以改变请求的内容或者重新设置请求的报头信息然后再将请求发送给目标资源
常见的过滤器用途有对用户请求进行统一的认证、对用户的访问请求进行审核和记录、对用户发送的数据进行过滤或替换、转换图像格式、对响应内容进行压缩以减少传输量、对请求或响应进行加密处理、触发资源访问事件等
过滤器和拦截器的区别 通俗理解 1过滤器Filter当你有一堆东西的时候你只希望选择符合你要求的某一些东西。定义这些要求的工具就是过滤器。理解就是一堆字母中取一个B 2拦截器Interceptor在一个流程正在进行的时候你希望干预它的进展甚至终止它进行这是拦截器做的事情。理解就是一堆字母中干预它通过验证的少点顺便干点别的东西
具体区别有 拦截器是基于java的反射机制的而过滤器是依赖于servlet容器基于函数的回调。 拦截器只对action请求起作用而过滤器则可以对几乎所有的请求起作用。 拦截器可以访问action上下文、值、栈里面的对象而过滤器不可以。 在action的生命周期中拦截器可以多次被调用而过滤器只能在容器初始化时被调用一次。 拦截器可以获取IOC容器中的各个bean而过滤器不行这点很重要在拦截器里注入一个service可以调用业务逻辑。
监听器 监听器就是一个实现特定接口的普通java程序这个程序专门用于监听另一个java对象的方法调用或属性改变当被监听对象发生上述事件后监听器某个方法将立即被执行。
5.Post和Get的区别
重点GET 和 POST 的请求都能使用额外的参数但是 GET 的参数是以查询字符串出现在 URL 中而 POST 的参数存储在实体主体中。
HTTP报文层面GET将请求信息放在URLPOST放在报文体中。 数据库层面GET符合幂等性和安全性POST不符合。 其它层面GET可以被缓存、被存储POST不行
分别说明 get用来获取数据post用来提交数据 get参数有长度限制受限于url长度具体的数值取决于浏览器和服务器的限制最长2048字节而post无限制。 get请求的数据会附加在url之 以 分割url和传输数据多个参数用 连接而post请求会把请求的数据放在http请求体中。 get是明文传输post是放在请求体中但是开发者可以通过抓包工具看到也相当于是明文的。 get请求会保存在浏览器历史记录中还可能保存在web服务器的日志中
幂等性 幂等通俗的来讲就是指同一个请求执行多次和仅执行一次的效果完全相等。这里来扯出幂等主要是为了处理同一个请求重复发送的情况假如在请求响应之前失去连接如果这个请求时幂等的那么就可以放心的重发一次请求。所以可以得出get请求时幂等的可以重复发送请求post请求时不幂等的重复请求可能会发生无法预知的后果。
5.转发forward和重定向redirect的区别 重点转发是服务器行为属于同一次请求访问本站点的其它页面。重定向是客户端行为至少两次请求可以访问任意URL。
请求转发 request.getRequestDispatcher(“/test.jsp”).forword(request,response);
重定向response.sendRedirect(“/test.jsp”);
区别
请求次数重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求转发是服务器收到请求后为了完成响应跳转到一个新的地址重定向至少请求两次转发请求一次 地址栏不同重定向地址栏会发生变化转发地址栏不会发生变化 是否共享数据重定向两次请求不共享数据转发一次请求共享数据在request级别使用信息共享使用重定向必然出错 跳转限制重定向可以跳转到任意URL转发只能跳转本站点资源 发生行为不同重定向是客户端行为转发是服务器端行为
使用 重定向的速度比转发慢因为浏览器还得发出一个新的请求所以如果在使用转发和重定向都无所谓的时候建议使用转发 因为转发只能访问当前WEB的应用程序所以不同WEB应用程序之间的访问特别是要访问到另外一个WEB站点上的资源的情况这个时候就只能使用重定向了。
6.谈谈你对于servlet的认识
可以从两个方面去看Servlet a、API有一个接口servlet它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。 b、组件服务器端用来处理客户端请求的组件需要在web.xml文件中进行配置。
servlet的生命周期是加载servlet的class—》实例化Servlet-----》初始化servlet调用init方法------》调用服务service方法处理doget和dopost方法-----》servlet容器关闭时调用销毁方法destory方法
7.mvc的理解
MVC 是 Model-View-Controller 的简写。Model 代表的是应用的业务逻辑(通过JavaBeanEJB 组件实现) View 是应用的表示面(由 JSP 页面产生)Controller 是提供应用的处理过程控制(一般是一个 Servlet)通过这种设计模型把应用逻辑处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。