Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91久久夜色精品国产九色,国产成人艳妇在线观看,日本免费a级片

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          一文讀懂Struts

          行流程

          客戶端瀏覽器通過(guò)HTTP請(qǐng)求,訪問(wèn)控制器,然后控制器讀取配置文件,然后執(zhí)行服務(wù)器端跳轉(zhuǎn),執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后,在調(diào)用模型層,取得的結(jié)果展示給jsp頁(yè)面,最后返回給客戶端瀏覽器

          組成部分struts視圖標(biāo)簽庫(kù)控制器action模型層ActionFrom JavaBean

          struts

          maven 安裝

          官網(wǎng) : https://struts.apache.org/

          1. idea新建web項(xiàng)目
          2. 接著如下依賴(lài) 網(wǎng)址 https://search.maven.org/artifact/struts/struts/1.2.9/jar
          <dependencies>
           <dependency>
           <groupId>org.apache.struts</groupId>
           <artifactId>struts2-core</artifactId>
           <version>2.5.20</version>
           </dependency>
           <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
           <version>1.2</version>
           </dependency>
           <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>test</scope>
           </dependency>
           </dependencies>
          

          此時(shí)將會(huì)自動(dòng)處理好依賴(lài)

          一直采用的是直接打包好war包的方式的

          編寫(xiě)配置文件

          <!DOCTYPE web-app PUBLIC

          "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

          "http://java.sun.com/dtd/web-app_2_3.dtd" >

          <web-app>

          <display-name>Archetype Created Web Application</display-name>

          <filter>

          <filter-name>struts2</filter-name>

          <filter-class>

          org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

          </filter-class>

          </filter>

          <filter-mapping>

          <filter-name>struts2</filter-name>

          <url-pattern>/*</url-pattern>

          </filter-mapping>

          </web-app>

          創(chuàng)建攔截器,攔截所有請(qǐng)求.交給struts控制器執(zhí)行

          編寫(xiě)struts控制文件

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts PUBLIC
           "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
           "http://struts.apache.org/dtds/struts-2.5.dtd">
          <struts>
           
          </struts>
          

          此時(shí)

          此時(shí)項(xiàng)目目錄結(jié)構(gòu)如下

          創(chuàng)建action類(lèi),控制器類(lèi)

          創(chuàng)建控制器類(lèi),完成頁(yè)面的信息的傳遞

          package com.ming;
          public class HelloWorldAction {
           private String name;
           public String execute() throws Exception {
           return "success";
           }
           public String getName() {
           return name;
           }
           public void setName(String name) {
           this.name = name;
           }
          }
          

          此時(shí),定義私有String類(lèi)型的name,定義set,get方法,當(dāng)執(zhí)行的時(shí)候,調(diào)用execute方法.

          此為控制器,起到連接兩者的視圖層,和模型層之間的關(guān)系.

          創(chuàng)建視圖層

          定義頁(yè)面提交視圖層

          <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
           pageEncoding="ISO-8859-1"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
           <title>Hello World</title>
          </head>
          <body>
          <h1>Hello World From Struts2</h1>
          <form action="hello">
           <input type="text" name="name"/>
           <input type="submit" value="提交"/>
          </form>
          </body>
          </html>
          

          此時(shí),定義表單.提交內(nèi)容,將會(huì)發(fā)送到hello控制里

          定義數(shù)據(jù)接收層

          <%@ page contentType="text/html; charset=UTF-8" %>
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <html>
          <head>
           <title>Hello World</title>
          </head>
          <body>
          Hello World, <s:property value="name"/>
          </body>
          </html>
          

          再次編寫(xiě)配置文件

          再次編寫(xiě)配置文件,兩者聯(lián)合起來(lái)

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts PUBLIC
           "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
           "http://struts.apache.org/dtds/struts-2.5.dtd">
          <struts>
           <!-- 定義調(diào)試 -->
           <constant name="struts.devMode" value="true" />
           <!-- 定義數(shù)據(jù)包 -->
           <package name="helloworld" extends="struts-default">
           <!-- 定義處理邏輯 name為指定處理的名稱(chēng) class 處理的包文件 method 處理將會(huì)調(diào)用的方法-->
           <action name="hello"
           class="com.ming.HelloWorldAction"
           method="execute">
           <!-- 成功返回頁(yè)面 -->
           <result name="success">/HelloWorld.jsp</result>
           </action>
           </package>
          </struts>
          

          運(yùn)行效果

          最后

          目前 jsp已經(jīng)基本廢棄 所以標(biāo)簽庫(kù)已經(jīng)基本沒(méi)人用了.

          struts起的作用,更多的是控制器的作用,請(qǐng)求送給spring

           當(dāng)我們說(shuō)Java Web框架時(shí),最流行的兩個(gè)名字是Spring和Struts。由于Java語(yǔ)言缺乏內(nèi)部組織,Spring和Struts都提供了一個(gè)Web開(kāi)發(fā)框架,允許用戶專(zhuān)注于開(kāi)發(fā)可靠的Web應(yīng)用程序。

            什么是 Spring 框架?

            Spring 框架(Spring)是一個(gè)開(kāi)源應(yīng)用程序框架,通過(guò)提供基礎(chǔ)設(shè)施支持來(lái)支持Java應(yīng)用程序的開(kāi)發(fā)。Spring 是使用最廣泛的Java企業(yè)版 (Java EE) 框架之一,它允許開(kāi)發(fā)人員使用普通的舊Java對(duì)象 (POJO) 設(shè)計(jì)高性能應(yīng)用程序。

            Spring被認(rèn)為是一個(gè)安全、靈活、低成本的框架。由于Spring是輕量級(jí)的,因此可以有效地利用系統(tǒng)資源。它提高了編碼效率并減少了整體應(yīng)用程序開(kāi)發(fā)時(shí)間。

            它支持各種框架,包括Struts、Tapestry、Hibernate、EJB、JSF等。在更大的意義上,該框架可以被視為一種結(jié)構(gòu),我們可以在其中發(fā)現(xiàn)各種技術(shù)難題的解決方案。Spring框架中有幾個(gè)模塊,如IOC、DAO、AOP、ORM、Context、WEB MVC等。

            什么是Struts框架?

            Struts框架是一個(gè)開(kāi)源Web應(yīng)用程序框架,用于輕松快速地開(kāi)發(fā)Java企業(yè)版 Web 應(yīng)用程序。

            Struts通過(guò)利用和擴(kuò)展Java Servlet API來(lái)促進(jìn)模型-視圖-控制器 (MVC) 架構(gòu)。

            Struts框架的目標(biāo)是將“模型”(與數(shù)據(jù)庫(kù)通信的應(yīng)用程序邏輯)與“視圖”(呈現(xiàn)給客戶端/用戶的HTML頁(yè)面)和“控制器”分開(kāi),這是在模型和客戶端視圖之間傳遞數(shù)據(jù)的實(shí)例。

            Struts已經(jīng)包含控制器,它只是一個(gè)名為ActionServlet的Java servlet,它生成視圖模板。Web應(yīng)用程序程序員接下來(lái)必須編寫(xiě)模型代碼,并通過(guò)擴(kuò)展編寫(xiě)連接模型、視圖和控制器的“struts-config.xml”中央配置文件。

            


            Spring與Strut重要的關(guān)鍵差異

            spring 與struts MVC之間最顯著的區(qū)別是面向方面編程(AOP)和面向?qū)ο缶幊讨g的區(qū)別。Spring使用依賴(lài)注入,這使得應(yīng)用程序松散鏈接。IoC容器位于 Spring框架的核心。

            OOP可以做AOP可以做的所有事情,但方式不同。換句話說(shuō),AOP通過(guò)對(duì)程序結(jié)構(gòu)提供不同的視角來(lái)補(bǔ)充OOP。有時(shí)你需要對(duì)多個(gè)文件進(jìn)行相同的修改。使用Struts將相同的代碼添加到數(shù)百個(gè)文件應(yīng)該是乏味的。同時(shí),Spring在其他地方寫(xiě)入新的更改并將它們注入到文件中。

            現(xiàn)在,讓我們看看重要的關(guān)鍵區(qū)別——Spring與Struts:

            1.Spring框架被描述為非侵入性的,這意味著它不會(huì)強(qiáng)制開(kāi)發(fā)人員實(shí)現(xiàn)或修改由 spring API定義的類(lèi)或接口。另一方面,Struts具有侵入性,因?yàn)樗仁归_(kāi)發(fā)人員擴(kuò)展由struts API提供的基類(lèi)。

            2.Spring框架之所以受歡迎,主要是因?yàn)樗哂懈鞣N優(yōu)點(diǎn),例如消息傳遞支持、事務(wù)管理以及與其他框架的連接。同時(shí),Struts框架因其對(duì)業(yè)界廣泛使用的標(biāo)簽庫(kù)的強(qiáng)大支持以及與各種客戶端技術(shù)的簡(jiǎn)單結(jié)合而廣受歡迎。這是在Spring與 Struts中需要考慮的重要事項(xiàng)。

            3.Spring具有獨(dú)立的層,使與其他框架的接口變得簡(jiǎn)單,而Struts使其更復(fù)雜。

            Spring支持 Velocity、JSP、Excel、Free Maker 和 PDF 用于查看組件。同時(shí),只有JSP才能查看Struts中的組件。

            4.盡管Spring MVC支持基本的HTML表單標(biāo)記,但struts提供了大量替代 JSF 樣式的復(fù)合和復(fù)雜標(biāo)記。

            5.Spring MVC 中提供了更多處理程序映射。在Struts中使用動(dòng)作映射而不是特定的處理程序映射。

            6.在Spring與Struts中,中間件服務(wù)很重要。Spring包括了日志、事務(wù)、連接池等中間件服務(wù)。相比之下,Struts沒(méi)有內(nèi)置中間件服務(wù)。

            7.容器是通過(guò)激活類(lèi)在Sprin中提供的。另一方面,Struts通過(guò)顯式配置類(lèi)來(lái)提供容器。

            8.spring清除MVC(模型、視圖和控制器)之間的模塊劃分。另一方面,控制器和模型混合在支柱中。

            9.Spring MVC代碼更容易測(cè)試。與Spring相比,Strut代碼的可測(cè)試性較差。

            總結(jié)

            我們已經(jīng)討論了有關(guān)spring與struts的所有重要細(xì)節(jié)。兩者都是用于開(kāi)發(fā)Web 應(yīng)用程序的優(yōu)秀Java框架。你可以根據(jù)需求為你的項(xiàng)目選擇最佳框架。希望現(xiàn)在你對(duì)Spring與Struts有一個(gè)清晰的概念,你將根據(jù)需要選擇更好的Java Web框架。

          ervlet web 我們天天使用很熟悉,那什么是 Reactive web 呢??jī)烧叩膮^(qū)別是啥?今天阿粉就給大家介紹一下。

          Servlet 與 Reactive 技術(shù)棧

          打開(kāi) Spring 的官方文檔我們?cè)?Reactive 一欄中可以看到下面的架構(gòu)圖,其中可以很明顯的看到 Reactive 的技術(shù)棧跟 Servlet 技術(shù)棧是完全并行的。意思是說(shuō)我們?nèi)粘i_(kāi)發(fā)的 Servlet web 類(lèi)型只是一半的內(nèi)容,還有另外一半世界就是 Reactive,兩者對(duì)應(yīng)的依賴(lài)如下所示。

          <!--Servlet web 依賴(lài)-->
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <!--Reactive web 依賴(lài)-->
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-webflux</artifactId>
          </dependency>

          servlet-reactive

          通過(guò)架構(gòu)圖我們可以知道常用的 Servlet web 就是我們經(jīng)常說(shuō)的 Spring MVC,底層的技術(shù)棧支持 JDBC 等,而 Reactive web 就是 Spring WebFlux 底層的持久層支持 Mongo 等但是不支持 JDBC

          什么是 Spring WebFlux

          由上圖我們看到 Spring WebFlux 是一個(gè)異步非阻塞式的 Web 框架,它能夠充分利用多核 CPU 的硬件資源去處理大量的并發(fā)請(qǐng)求。相對(duì)于 Spring MVC 來(lái)說(shuō)的話,Spring MVC 構(gòu)建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型。

          由于 Spring WebFlux 底層是使用響應(yīng)式編程,基于事件的異步驅(qū)動(dòng),所以可以在很大程度上提升系統(tǒng)的吞吐量。但是要知道這并不會(huì)縮短請(qǐng)求的響應(yīng)時(shí)間,只是提升吞吐量。

          而且根據(jù)上面的架構(gòu)圖我們可以發(fā)現(xiàn),Spring WebFlux 底層的持久層是不支持 JDBC 的,也就是說(shuō)不支持 MySQL 等事務(wù)性數(shù)據(jù)庫(kù),

          舉個(gè)栗子

          前面說(shuō)了這么多那 Spring WebFlux 到底是怎么開(kāi)發(fā)的呢?下來(lái)通過(guò)一個(gè)簡(jiǎn)單的 case 來(lái)給大家演示一下。在演示之前通過(guò)官方文檔我們可以發(fā)現(xiàn),Spring WebFluxSpring MVC 是可以共用很多組件的,比如 @ControllerTomcat 等,但是也會(huì)存在很多差異。

          Spring 官方 Reactive 地址為:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html

          springmvc-springwebflux

          基于我們之前的 demo-reactive 項(xiàng)目的代碼,或者小伙伴也可以在 starter.spring.io 上面下載一個(gè) SpringBoot 的項(xiàng)目代碼,增加上 spring-boot-starter-webflux 依賴(lài)即可。

          定義 DTO

          package com.example.reactive.demoreactive.dto;
          
          public class User {
            private String name;
            private int age;
          
           //省略 getter setter
          }
          
          

          定義 Controller

          package com.example.reactive.demoreactive.controller;
          
          import com.example.reactive.demoreactive.dto.User;
          import org.springframework.web.bind.annotation.GetMapping;
          import org.springframework.web.bind.annotation.ResponseBody;
          import org.springframework.web.bind.annotation.RestController;
          import reactor.core.publisher.Flux;
          import reactor.core.publisher.Mono;
          
          import java.util.ArrayList;
          import java.util.List;
          
          
          @RestController
          public class UserController {
          
            @GetMapping("/hello")
            public String sayHello() {
              return "hello";
            }
          
            @GetMapping("/user/get")
            public Mono<User> getUser() {
              User user = new User();
              user.setName("Java極客技術(shù)");
              user.setAge(18);
              return Mono.just(user);
            }
          
            @GetMapping("/user/list")
            public Flux<List<User>> getAllUser() {
              User user = new User();
              user.setName("Java極客技術(shù)");
              user.setAge(18);
              List<User> list = new ArrayList<>();
              list.add(user);
              return Flux.just(list);
            }
          }
          
          

          隨后啟動(dòng)我們的服務(wù),再通過(guò)瀏覽器訪問(wèn)我們的接口就可以了。

          上面三個(gè)接口的訪問(wèn)結(jié)果如下

          hello

          user-get

          user-list

          可以看到我們?cè)跒g覽器可以正常獲取到數(shù)據(jù),上面的代碼跟我們平時(shí)寫(xiě) SpringMVC 的代碼很相似,不太一樣的地方是有兩個(gè)類(lèi) MonoFLux

          關(guān)于 Mono 和 Flux 是反應(yīng)式編程的概念,Mono 是返回 0 或 1 個(gè)元素,F(xiàn)lux 是返回 0 - N 個(gè)元素,更詳細(xì)的內(nèi)容大家可以通過(guò)官方文檔 https://projectreactor.io/docs/core/release/api/ 來(lái)查看

          總結(jié)

          雖然從上面的寫(xiě)法來(lái)看,Spring WebFlux 的寫(xiě)法與 SpringMVC 的寫(xiě)法沒(méi)有很大的區(qū)別,但是兩者的底層機(jī)制是完全不一樣的,而且技術(shù)棧也不完全相同,所以大家在日常技術(shù)選型的時(shí)候需要根據(jù)實(shí)際情況去選擇。

          阿粉這里給出的建議就是,如果當(dāng)下的項(xiàng)目就是 SpringMVC 的,那么不要想著換成 Spring WebFlux 架構(gòu),因?yàn)闆](méi)必要,如果說(shuō)要新開(kāi)發(fā)一個(gè)項(xiàng)目,需要高吞吐量而且底層也不依賴(lài)事務(wù)性數(shù)據(jù)庫(kù)的話,那么可以嘗試使用一下 Spring WebFlux

          原文:https://mp.weixin.qq.com/s/PJUsmaNFDF76ShM79SkLSA

          如果感覺(jué)本文對(duì)你有幫助,點(diǎn)贊關(guān)注支持一下


          主站蜘蛛池模板: 影音先锋中文无码一区| 蜜臀AV免费一区二区三区| 亚洲av鲁丝一区二区三区| 无码人妻视频一区二区三区| 香蕉久久一区二区不卡无毒影院| 国产人妖视频一区在线观看| 国产精品夜色一区二区三区 | 亚洲一区二区影视| 国产精品一区二区久久精品无码| 国产日韩一区二区三区| 日韩高清国产一区在线| 国产午夜精品一区二区三区漫画 | 精品乱人伦一区二区三区| 无码精品久久一区二区三区| 精品国产日韩亚洲一区91| 午夜在线视频一区二区三区 | 亚洲男女一区二区三区| 麻豆一区二区在我观看| 色婷婷一区二区三区四区成人网| 亚洲国产精品自在线一区二区| 久久国产精品最新一区| 一区二区免费视频| 一区二区三区在线观看| 精品国产一区二区三区在线| 性盈盈影院免费视频观看在线一区| 欧美成人aaa片一区国产精品| 国产精品av一区二区三区不卡蜜| 四虎成人精品一区二区免费网站| 日韩成人一区ftp在线播放| 日韩精品一区二区三区在线观看 | 日本精品一区二区三区在线视频| 老湿机一区午夜精品免费福利| 一区二区三区免费精品视频| 亚洲啪啪综合AV一区| 亚洲视频在线观看一区| 无码中文字幕一区二区三区| 精品一区二区三区在线播放 | 精品一区二区三区在线成人| 国内精品一区二区三区东京| 欧洲精品一区二区三区| 国产成人精品一区二区三区无码|