1. Servlet的作用以及如何实现一个Servlet

答:Servlet程序是运行在Java web服务器上的java程序,servlet技术是Java EE规范的一部分,起到了生成动态网页的作用。实现步骤如下:
编写servlet类,实现接口servlet。在实际开发中通常继承HttpServlet,重写方法service
servlet程序配置 在web.xml添加配置信息或者借助注解

2 .Servlet是否是线程安全的,为什么?

答:不是线程安全的,这是由servlet对象的声明周期决定的,一个servlet对象在首次被访问是创建,当再次访问时不会再对该serlvet类进行实例(也就是不会再次创建对象),仅当web应用关闭后,才会servlet对象被销毁。【在一个web应用中一个servlet类只能创建一个对象。(是单例模式),】这样就会导致servlet对象的属性可能被多个用户共享,那么servlet对象就是线程不安全的

3.Cookie和Session的区别

答:两种技术都是为了实现用户身份识别功能的,但是cookie存在很大局限性例如只能保存字符串、在某些版本tomcat中不能直接保存中文、大小有限制以及不安全等等,在实际开发更多的是采用session技术实现用户身份识别

4. 浏览器cookie被禁用了怎么办

答:在web应用开发中,很多功能实现都是以用户身份识别为基础的,例如电商的购物功能,常用来实现用户身份识别功能的技术有两种cookie技术和httpsession技术,实际开发中后者才是主流,但其也要借助cookie技术来实现的。 当cookie被禁用了可以使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器实现seession技术

5. session的底层实现

答: 当客户端首次发送请求(访问服务器端)时,服务器端会将session的Id值以cookie的形式携带在响应中返回给客户端(浏览器),由客户端保存。当客户端再次访问服务器端时向服务器端发送带有session的id值的请求(其本质就是携带cookie的请求),进而获取相应的session。从而保证了同一个客户端在某个时间段被多次请求过程中能够获取到相同的session. session的实现依赖于cookie,当cookie失效时,session也随之失效。而cookie默认存活时长与浏览器相同(浏览器关闭。cookie失效)

6. 过滤器的作用

答:在每个servlet类会出现重复性代码(功能模块代码在不同servlet类中重复性出现) 重复性代码(冗余代码)会导致项目开发效率和程序的可维护性以及代码的重用性和可读性低,为了解决着些问题,把servlet类重复性代码,编写到filter类中,实际开发中常用的过滤器编解码过滤器和强制登录过滤器

7. request、session、servletContext作用域的区别

答:对象获取
HttpServletRequest: 由参数表指定

HttpSession:  HttpSession session = req.getSession();  
ServletContext:  ServletContext context = req.getServletContext();

作用域的作用范围
Request:一次请求 【某客户端发生一次请求,主要用于请求转发过程的传递数据】
Session:同1个浏览器【某客户端在一个时间段内多次连续请求中(一次会话),主要用于同一个客户端多次请求中的传递数据】,浏览器的一次开合过程
ServletContext:应用不变,ServletContext不变 跨浏览器传递数据作用域对象 【某个WEB应用整个运行期中,实现了不同客户端间数据传递】
使用优先级(频率): request作用域,session作用域,servletcontext作用域【req对象作用域经常用,session对象作用域很少用,context对象作用域几乎不用】
使用存数据: xxxx.setAttribute(“key”,value);
取数据: xxxx.getAttribute(“key”);
清除指定数据:xxxx.removeAttribute(“key”);
清空所有数据:session.invalidate();
ServletCotext类应用
获取项目名 String contextPath = context.getContextPath(); //其中字符串contextPath就是项目名 【优化: String contextPath = req.getContextPath();
依据文件名获取文件的响应类型(后期文件 0000000000下载中使用)
String contentType = context.getMimeType(''文件名.扩展名''); //其中contentTye响应类型

8. Servlet的生命周期

答:创建:servlet类首次接受请求,调用
void init(ServletConfig config);
发挥作用时机:用户的访问,调用
void service(...);
销毁时机:关闭web应用(网站),一般通过关闭tomcat实现,调用void destroy();存在问题:在一个web应用中一个servlet类只能创建一个对象。(是单例模式),这样就会导致servlet对象的属性可能被多个用户共享,那么servlet对象就是线程不安全的

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐