国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Web框架的前生今世 從Servlet到Spring MVC到Spring boot

開發 架構
上世紀90年代,隨著Internet和瀏覽器的飛速發展,基于瀏覽器的B/S模式隨之火爆發展起來。最初,用戶使用瀏覽器向WEB服務器發送的請求都是請求靜態的資源,比如html、css等。 但是可以想象:根據用戶請求的不同動態的處理并返回資源是理所當然必須的要求。

背景

上世紀90年代,隨著Internet和瀏覽器的飛速發展,基于瀏覽器的B/S模式隨之火爆發展起來。最初,用戶使用瀏覽器向WEB服務器發送的請求都是請求靜態的資源,比如html、css等。 但是可以想象:根據用戶請求的不同動態的處理并返回資源是理所當然必須的要求。

[[273844]]

servlet的定義

  • Servlet is a technology which is used to create a web application. servlet是一項用來創建web application的技術。
  • Servlet is an API that provides many interfaces and classes including documentation. servlet是一個提供很多接口和類api及其相關文檔。
  • Servlet is an interface that must be implemented for creating any Servlet.servlet是一個接口,創建任何servlet都要實現的接口。
  • Servlet is a class that extends the capabilities of the servers and responds to the incoming requests. It can respond to any requests. servlet是一個實現了服務器各種能力的類,對請求做出響應。它可以對任何請求做出響應。
  • Servlet is a web component that is deployed on the server to create a dynamic web page.servlet是一個web組件,部署到一個web server上(如tomcat,jetty),用來產生一個動態web頁面。

servlet的歷史

web框架的前生今世--從servlet到spring mvc到spring boot

web Container

web容器也叫servlet容器,負責servlet的生命周期,映射url請求到相應的servlet。

A web container (also known as a servlet container;[1] and compare "webcontainer"[2]) is the component of a web server that interacts with Java servlets. A web container is responsible for managing the lifecycle of servlets, mapping a URL to a particular servlet and ensuring that the URL requester has the correct access-rights.A web container handles requests to servlets, JavaServer Pages (JSP) files, and other types of files that include server-side code. The Web container creates servlet instances, loads and unloads servlets, creates and manages request and response objects, and performs other servlet-management tasks.A web container implements the web component contract of the Java EE architecture. This architecture specifies a runtime environment for additional web components, including security, concurrency, lifecycle management, transaction, deployment, and other services.

常見的web容器如下:

web框架的前生今世--從servlet到spring mvc到spring boot

在web容器中,web應用服務器的結構如下:

web框架的前生今世--從servlet到spring mvc到spring boot

1.普通servlet實現頁面訪問

web框架的前生今世--從servlet到spring mvc到spring boot

1.1 實例1:使用web.xml實現一個http服務

實現一個簡單的servlet

  1. package com.howtodoinjava.servlets; 
  2.   
  3. import java.io.IOException; 
  4. import java.io.PrintWriter; 
  5.   
  6. import javax.servlet.ServletException; 
  7. import javax.servlet.http.HttpServlet; 
  8. import javax.servlet.http.HttpServletRequest; 
  9. import javax.servlet.http.HttpServletResponse; 
  10.   
  11. public class MyFirstServlet extends HttpServlet { 
  12.   
  13.  private static final long serialVersionUID = -1915463532411657451L; 
  14.   
  15.  @Override 
  16.  protected void doGet(HttpServletRequest request, 
  17.  HttpServletResponse response) throws ServletException, IOException 
  18.  { 
  19.  response.setContentType("text/html;charset=UTF-8"); 
  20.  PrintWriter out = response.getWriter(); 
  21.  try { 
  22.  // Write some content 
  23.  out.println("<html>"); 
  24.  out.println("<head>"); 
  25.  out.println("<title>MyFirstServlet</title>"); 
  26.  out.println("</head>"); 
  27.  out.println("<body>"); 
  28.  out.println("<h2>Servlet MyFirstServlet at " + request.getContextPath() + "</h2>"); 
  29.  out.println("</body>"); 
  30.  out.println("</html>"); 
  31.  } finally { 
  32.  out.close(); 
  33.  } 
  34.  } 
  35.   
  36.  @Override 
  37.  protected void doPost(HttpServletRequest request, 
  38.  HttpServletResponse response) throws ServletException, IOException { 
  39.  //Do some other work 
  40.  } 
  41.   
  42.  @Override 
  43.  public String getServletInfo() { 
  44.  return "MyFirstServlet"
  45.  } 

web.xml配置servlet

/MyFirstServlet MyFirstServlet com.howtodoinjava.servlets.MyFirstServlet MyFirstServlet /MyFirstServlet

1.2 編程方式實現一個http服務請求

不需要xml

  1. package com.journaldev.first
  2. import java.io.IOException; 
  3. import java.io.PrintWriter; 
  4. import java.util.Date
  5. import javax.servlet.ServletException; 
  6. import javax.servlet.annotation.WebInitParam; 
  7. import javax.servlet.annotation.WebServlet; 
  8. import javax.servlet.http.HttpServlet; 
  9. import javax.servlet.http.HttpServletRequest; 
  10. import javax.servlet.http.HttpServletResponse; 
  11. /** 
  12.  * Servlet implementation class FirstServlet 
  13.  */ 
  14. @WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")}) 
  15. public class FirstServlet extends HttpServlet { 
  16.  private static final long serialVersionUID = 1L; 
  17.  public static final String HTML_START="<html><body>"
  18.  public static final String HTML_END="</body></html>"
  19.   
  20.  /** 
  21.  * @see HttpServlet#HttpServlet() 
  22.  */ 
  23.  public FirstServlet() { 
  24.  super(); 
  25.  // TODO Auto-generated constructor stub 
  26.  } 
  27.  /** 
  28.  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
  29.  */ 
  30.  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  31.  PrintWriter out = response.getWriter(); 
  32.  Date date = new Date(); 
  33.  out.println(HTML_START + "<h2>Hi There!</h2><br/><h3>Date="+date +"</h3>"+HTML_END); 
  34.  } 
  35.  /** 
  36.  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
  37.  */ 
  38.  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  39.  // TODO Auto-generated method stub 
  40.  } 

2.spring mvc實現頁面訪問

2.1 web.xml方式

web框架的前生今世--從servlet到spring mvc到spring boot

示例:

  1. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  2.  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  3.  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  4.  version="2.5"
  5.  <display-name>Gradle + Spring MVC Hello World + XML</display-name
  6.  <description>Spring MVC web application</description> 
  7.  <!-- For web context --> 
  8.  <servlet> 
  9.  <servlet-name>hello-dispatcher</servlet-name
  10.  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  11.  <init-param> 
  12.  <param-name>contextConfigLocation</param-name
  13.  <param-value>/WEB-INF/spring-mvc-config.xml</param-value> 
  14.  </init-param> 
  15.  <load-on-startup>1</load-on-startup> 
  16.  </servlet> 
  17.  <servlet-mapping> 
  18.  <servlet-name>hello-dispatcher</servlet-name
  19.  <url-pattern>/</url-pattern> 
  20.  </servlet-mapping> 
  21.  <!-- For root context --> 
  22.  <listener> 
  23.  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  24.  </listener> 
  25.  <context-param> 
  26.  <param-name>contextConfigLocation</param-name
  27.  <param-value>/WEB-INF/spring-core-config.xml</param-value> 
  28.  </context-param> 
  29. </web-app> 

2.2 編碼方式

  1. public class MyWebAppInitializer implements WebApplicationInitializer { 
  2.   
  3.  @Override 
  4.  public void onStartup(ServletContext container) { 
  5.  // Create the 'root' Spring application context 
  6.  AnnotationConfigWebApplicationContext rootContext = 
  7.  new AnnotationConfigWebApplicationContext(); 
  8.  rootContext.register(AppConfig.class); 
  9.   
  10.  // Manage the lifecycle of the root application context 
  11.  container.addListener(new ContextLoaderListener(rootContext)); 
  12.   
  13.  // Create the dispatcher servlet's Spring application context 
  14.  AnnotationConfigWebApplicationContext dispatcherContext = 
  15.  new AnnotationConfigWebApplicationContext(); 
  16.  dispatcherContext.register(DispatcherConfig.class); 
  17.   
  18.  // Register and map the dispatcher servlet 
  19.  ServletRegistration.Dynamic dispatcher = 
  20.  container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
  21.  dispatcher.setLoadOnStartup(1); 
  22.  dispatcher.addMapping("/"); 
  23.  } 
  24.   
  25.  } 

內部實現

 

web框架的前生今世--從servlet到spring mvc到spring boot

3.spring boot

繼承了spring mvc的框架,實現SpringBootServletInitializer

  1. package com.mkyong; 
  2. import org.springframework.boot.SpringApplication; 
  3. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  4. import org.springframework.boot.builder.SpringApplicationBuilder; 
  5. import org.springframework.boot.web.support.SpringBootServletInitializer; 
  6. @SpringBootApplication 
  7. public class SpringBootWebApplication extends SpringBootServletInitializer { 
  8.  @Override 
  9.  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
  10.  return application.sources(SpringBootWebApplication.class); 
  11.  } 
  12.  public static void main(String[] args) throws Exception { 
  13.  SpringApplication.run(SpringBootWebApplication.class, args); 
  14.  } 

然后controller

  1. package com.mkyong; 
  2. import java.util.Map; 
  3. import org.springframework.beans.factory.annotation.Value; 
  4. import org.springframework.stereotype.Controller; 
  5. import org.springframework.web.bind.annotation.RequestMapping; 
  6. @Controller 
  7. public class WelcomeController { 
  8.  // inject via application.properties 
  9.  @Value("${welcome.message:test}"
  10.  private String message = "Hello World"
  11.  @RequestMapping("/"
  12.  public String welcome(Map<String, Object> model) { 
  13.  model.put("message", this.message); 
  14.  return "welcome"
  15.  } 

總結:

1.servlet的本質沒有變化,從web框架的發展來看,web框架只是簡化了開發servlet的工作,但還是遵循servlet規范的發展而發展的。

2.servlet的歷史發展,從配置方式向編程方式到自動配置方式發展

3.spring mvc框架的分組:root和child(可以有多個dispatcherservlet),多個child可以共享root,child直接不共享

參考文獻:

【1】https://en.wikipedia.org/wiki/Web_container

【2】https://baike.baidu.com/item/servlet/477555?fr=aladdin

【3】https://www.javatpoint.com/servlet-tutorial

【4】https://www.journaldev.com/1854/java-web-application-tutorial-for-beginners#deployment-descriptor

【5】https://blog.csdn.net/qq_22075041/article/details/78692780

【6】http://www.mkyong.com/spring-mvc/gradle-spring-mvc-web-project-example/

【7】http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2010-04-20 11:40:52

網絡爬蟲

2016-11-24 22:30:17

DeepLink移動App開發

2023-11-02 18:01:24

SpringMVC配置

2021-11-16 11:45:00

SpringSpring ClouJava

2025-09-04 01:55:00

2010-08-27 14:04:47

2025-03-05 11:03:36

2025-10-30 01:25:00

SpringDockerfileDocker

2025-02-25 00:11:40

Servlet服務器Web

2022-06-02 08:37:10

架構DDDMVC

2018-03-05 11:29:17

云計算云服務服務器

2009-06-19 11:28:45

2009-06-19 11:43:59

Spring MVC框

2025-02-18 13:00:00

SpringBoot事務管理代碼

2025-02-27 13:00:00

SpringBoot數據鑒權代碼

2021-03-10 09:21:00

Spring開源框架Spring基礎知識

2012-09-27 13:49:54

2015-03-09 15:26:36

2025-09-30 07:40:03

2018-05-31 12:12:12

頁面可視化工具
點贊
收藏

51CTO技術棧公眾號

上原亚衣av一区二区三区| 国产亚洲精品久久久| 国产又粗又长又爽视频| 久久久久久久久丰满| 日韩视频永久免费观看| 91在线三级| 性做久久久久久久久| www.99re.av| av一区二区三区黑人| 超碰97免费观看| 日韩av成人高清| 欧美日韩三区四区| 鲁大师成人一区二区三区| 亚洲影视九九影院在线观看| 色天天久久综合婷婷女18| 欧美一区二区色| 亚洲人亚洲人色久| 欧美亚洲国产视频| 免费精品国产的网站免费观看| 久久免费电影网| 先锋影音男人资源| 福利一区在线观看| 黄色网在线视频| 老牛影视一区二区三区| 神马一区二区影院| 亚洲在线一区| 91在线在线观看| 99成人在线视频| 奇米4444一区二区三区| 国产成人aa在线观看网站站| 久久精品国产96久久久香蕉| 欧美暴力调教| 日韩av一区在线| 神马午夜伦理不卡| 56国语精品自产拍在线观看| 免费在线一级视频| 色香蕉久久蜜桃| 色资源在线观看| 婷婷夜色潮精品综合在线| 国产精品又粗又长| 99久久99久久精品国产片果冻| 成人污网站在线观看| 韩国v欧美v日本v亚洲v| 日本xxx免费| 国产一区二区电影| 久久综合久久网| 久久亚洲精华国产精华液| 国内外成人激情视频| 91在线云播放| 婷婷免费在线观看| 一区二区三区欧美在线观看| 中文字幕在线网| 狠狠干狠狠久久| 国产在线中文字幕| 欧美一区二区福利在线| 美足av综合网| 在线国产精品播放| 亚洲乱码一区| 日本三级久久久| 日韩欧美高清在线播放| 成人有码视频在线播放| 黑人久久a级毛片免费观看| 97视频在线观看免费高清完整版在线观看 | 亚洲日本青草视频在线怡红院| 亚洲 欧美 另类人妖| 日韩美女视频一区| 成年人视频免费看| 亚洲一区二区免费视频| 欧美被日视频| 亚洲欧美日韩天堂一区二区| 粉嫩一区二区三区四区公司1| 欧美一区二区.| 欧美大片aaaa| 日本中文不卡| 欧美日本在线一区| www黄色av| 国产精品系列在线| 国产bdsm| 欧美日韩国产一级二级| 在线天堂资源| 97精品视频在线播放| 久久久久久久久国产一区| 热re99久久精品国产99热| 国产美女在线观看一区| 日本a级片免费观看| 日韩免费福利视频| 最近的2019中文字幕免费一页| 综合激情五月婷婷| av免费观看久久| 精品一区二区三区欧美| 五月婷婷丁香色| 欧美日韩一区二区在线观看| 日本国产欧美| 亚洲在线观看视频| 国产.欧美.日韩| 日本福利片高清在线观看| 国产一区二区三区在线免费观看 | 亚洲一二三区不卡| 天天综合国产| 毛片在线播放视频| 日韩小视频在线观看专区| 日韩一区二区三免费高清在线观看| 国产精品久久久一区二区三区| 亚洲日本青草视频在线怡红院| 最新97超碰在线| 日韩国产欧美在线观看| aa免费在线观看| 欧美视频一区二区三区在线观看| 欧美成人福利| 久久久久资源| 亚洲另类在线制服丝袜| 性欧美又大又长又硬| 国产欧美日韩91| 粉嫩13p一区二区三区| 国产高清在线| 91成人在线播放| 国产精品一区免费在线观看| 日本天堂在线| 欧美亚洲日本网站| 福利一区在线观看| 欧美xxx黑人xxx水蜜桃| 国产色婷婷国产综合在线理论片a| 成a人片国产精品| 羞羞网站在线看| 国产精品丝袜视频| 成人免费视频网站在线观看| 在线资源av| 日韩视频免费看| 欧美精品麻豆| 最新av电影| 久久久久久久久网站| 国产在线看一区| 麻豆tv免费在线观看| 国产欧美日韩免费| 亚洲欧美综合另类在线卡通| 日本久久二区| 国产成人生活片| 日韩精品一区二区三区三区免费 | 成人激情在线观看| 中文字幕日韩欧美一区二区三区| 人在线成免费视频| 女人一区二区三区| 欧美最新大片在线看| 久久影院一区| 九草视频在线观看| 日本精品一区二区三区在线播放视频| 久久综合一区二区| h1515四虎成人| 久久久久久久久影视| 精品日韩av一区二区| 久久久久久一区二区| 中文字幕在线播放| 久久爱av电影| 欧美一区二区在线看| 亚久久调教视频| 青草影视电视剧免费播放在线观看| 久久av免费观看| 91精品国产综合久久久久久久久久 | 青青草国产成人av片免费| av影片在线看| av一区二区三区在线观看| 亚洲国产你懂的| 日韩毛片视频| 免费理论片在线观看播放老| 99re在线国产| 亚洲成人激情自拍| 精品国产91久久久久久浪潮蜜月| 缴情综合网五月天| 日韩av不卡电影| 亚洲午夜久久久久久久久电影网| 99久久久久久中文字幕一区| 视频国产在线观看| 亚洲一区中文字幕在线观看| 欧美日韩免费网站| 国产精品hd| 台湾佬中文娱乐久久久| 成人一对一视频| 欧洲成人免费aa| 色八戒一区二区三区| 美女精品在线观看| av在线一区不卡| 女人另类性混交zo| 91av视频导航| 欧美专区日韩专区| 久久国产精品99久久人人澡| 欧美三级电影网址| 黄页网站视频在线观看| 久久久av水蜜桃| 日韩中文字幕在线视频播放| 一区二区三区国产| 久久一二三四| 国产高清亚洲| 在线国产中文字幕| 亚洲高清视频一区| 久久久久久97| 在线观看91av| a级精品国产片在线观看| 蜜桃一区二区| 在线观看午夜av| 手机在线看福利|