Mxnet Markdown编辑器 ssm primefaces stack combobox ios7 History.js vue绑定class android开发项目 swift视频教程 kafka默认端口 拼接json字符串 java 数据分析 linux全局搜索文件 mysql函数返回结果集 java 大文件上传 kubernetes视频 python配置 python或运算 python运行 python安装程序 java入门学习 java课程学习 java时间格式化 javasocket java包名 linux中grep js四舍五入 rendercontrol vbscript程序员参考手册 机械下载 微信客户管理系统 lol设置 cg模宝 unix系统下载 js图片上传 7个人 狮子狗皮肤 用流量打电话的软件
当前位置: 首页 > 学习教程  > 编程语言

Java面经-JavaWeb-Servlet和SpringMVC

2020/9/19 16:32:46 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

JavaWeb——servlet和SpringMVC

Servlet演进

  1. 演进1:Servlet接口定义的init(),service(),destory(),getServletConfig(),getServletInfo()五种方法。
  2. 演进2: GenericServlet抽象类,
    实现Servlet接口的时候必须将所有方法实现,即使方法中没有任何代码,而在GenericServlet抽象类的帮助下,只需要重写service方法即可
  3. 演进3: HttpServlet抽象类
    HttpServlet覆盖了GenericServlet类,将ServletRequest和ServletResponse对象分别封装在HttpServletRequest和HttpServletResponse对象中。
    HTTP Servlet同时实现了service(),在请求到来时,我们只需要覆盖doGet()和doPost()方法即可。
  4. 演进4:JSP的加入
    Servlet中有大量繁杂的HTML代码,使得Java代码与HTML代码糅杂在一起,所以JSP营运而生
    JSP本质也是Servlet,然而其不需要编译,JSP页面是一个以.jsp扩展名的文本文件,简单的JSP页面在第一次请求后被翻译为_jsp的servlet,翻译之后的Servlet可以看到: _jspInit(), _jspDestory(), _jspSevice()这样的方法和Servlet对应
  5. 演进5:Spring出世
    Spring提供了强大的控制反转(IOC)和依赖注入(DI)功能,达到项目组件的解耦
  6. 演进6:Spring Web模块— Spring MVC
    为了减少Servlet的编写,Spring提供了强大的Web开发框架SpringMVC
    SpringMVC是一个模型-视图-控制器的web框架,建立在前端控制器servlet(DispatcherServlet)上,它负责发送每个请求到合适的处理程序,使用视图来返回响应结果。
    模型Model:封装了应用程序的数据,通常用POJO类组成
    视图View: 负责渲染模型数据,一般来说他生成客户端浏览器可以解释HTML输出
    控制器Controller:负责处理用户请求并构建适当模型,将其传递给视图进行渲染

Servlet 工作模式

  1. Servlet使用Java编写的服务器端程序,主要功能在于交互式浏览和修改数据,生成动态Web内容。
  2. Servlet运行于Java的应用服务器中,大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

servlet并不直接处理客户端的http请求,servlet不会去监听8080端口;直接与客户端打交道是“容器”,比如常用的tomcat。

客户端的请求直接打到tomcat,它监听端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

Servlet生命周期

  1. 调用init()方法初始化
  2. 调用service()方法来处理客户端请求
  3. 调用destroy()方法释放资源,标记自身为可回收
  4. 被垃圾回收器回收

当第一个线程到达servle时,会调用init()方法,当tomcat分发多个线程到servlet时,那么线程会同时访问service()方法。
在这里插入图片描述

面试:Servlet如何同时处理多个请求访问

单实例多线程方式:

  1. 当web服务器启动时,Servlet就被加载并实例化
  2. 容器初始化Servlet,通过servlet.xml文件设置线程池中线程数目,并通过web.xml初始化每个参数
  3. 当请求到达Servlet时,Servlet容器通过调度线程 调度它管理下线程池中等待执行的线程给请求者
  4. 线程执行Servlet的service方法
  5. 请求结束,放回线程池,等待被调用

从上面可以看出:
第一:Servlet单实例,减少了产生servlet的开销;
第二:通过线程池来响应多个请求,降低请求的响应时间;
第三:Servlet容器并不关心到达的Servlet请求访问的是否是同一个Servlet还是另一个Servlet,直接分配给它一个新的线程;如果是同一个Servlet的多个请求,那么Servlet的service方法将在多线程中并发的执行;
第四:每一个请求由ServletRequest对象来接受请求,由ServletResponse对象来响应该请求;

Spring

Spring 框架的作用

Spring 框架是为了简化Java开发,Spring的核心是依赖注入,面向切面编程即AOP和模板技术。

JavaBean

JavaBean 是一种Java语言写成的可重用组件,JavaBean不是一种技术,而是一种规范
约定如下:

  1. 所有属性为private
  2. 这个类必须有一个公共的缺省构造函数,即提供无参数的构造器
  3. 这个类属性使用getter和setter来访问
  4. 这个类可序列化,实现serializable接口

SpringMVC

先看一个复杂版:
在这里插入图片描述
相信复杂版一定看的眼花缭乱,那么我们在看一个简化版:

Spring MVC 运行过程:

在这里插入图片描述
DispatcherServlet处理HTTP请求的工作流程:

  1. 接受HTTP请求后,DispatcherServlet 会查询HandlerMapping以调用相应的Controller(根据请求的url)
  2. Controller接受请求并根据请求的类型Get/Post调用相应的服务方法,服务方法进行相应的业务处理,并设置模型数据,最后将视图名称返回给DispatcherServlet
  3. DispatcherServlet根据返回的视图名称从ViewResolver获取对应的视图
  4. DispatcherServlet将模型数据传递到最终的视图,并将视图返回给浏览器。

本文链接: http://www.dtmao.cc/news_show_200441.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?