springmvcインタビューレビュー

まず、springmvcは何ですか?

  、応答モデル - SpringMVC要求は要求ドライブに基づいて、デューティウェブ層を分離し、思考のMVCアーキテクチャのパターンを使用し、軽量WebフレームワークのJavaのMVCデザインパターン駆動型の認識に基づいているが、要求の使用に言及しますフレームワークの目的は、私たちは、開発を簡素化することです。

 

二、springmvc要求プロセス

 

アーキテクチャ間で具体的な処理:

(1)ユーザが要求を送信 - >のDispatcherServlet、自分自身をしないが、唯一の統合アクセスポイントなどの処理のために他のプロセッサ、コントローラへの処理要求の前端を得る、プロセス全体を制御します。

(2)のDispatcherServlet - セットは、インターセプタを生成している場合> HandlerMappingは、背中のDispatcherServletにオブジェクトHandlerExecutionChainにマッパーマップを要求するプロセッサ、オブジェクト及び複数のプロセッサを含むオブジェクトは、ハンドラHandlerInterceptorブロッカーオブジェクト(傍受オブジェクト、NOが生成されません)。

(3)のDispatcherServlet - プロセッサ> HandlerAdapter、転送処理アダプタをアダプタに包装上、アプリケーション・アダプタの設計パターンであるプロセッサの様々なタイプのをサポートすることを容易にします。

(4)HandlerAdapter - >プロセッサ(コントローラクラスおよび方法は私たち自身を記述する必要がある)は、対応する関数呼び出し処理方法を行い、(モデルデータを含む、論理ビュー名)のModelAndViewオブジェクトを返し、その後HandlerAdapterに戻りますフロントコントローラ。

        ModelAndView:モデルのビジネス・オブジェクト・モデルのデータ部分が返され、ビューは、名前の一部の論理図です。

(5)のDispatcherServlet - > ViewResolver、論理ビューのビューリゾルバ名解決コンクリートビュー(モデルデータが含まれていません)。最初は論理ビュー名の物理的なビューに名前を解決し、その後ビュー・オブジェクト・ビューを生成し、特定のページのアドレスです。

(6)のDispatcherServlet - >ビュー、ビュー、すなわち、モデルデータのレンダリングをレンダリングするための表示ケース。このとき、実際にモデル地図データ構造。

(7)のDispatcherServlet - >ユーザへの応答。

 

三、springmvcコメント

   @Controller:対応する方法では、パーサは、リターンJSPのビューを解析するhtmlページ、および該当ページにジャンプします。

   @RestController:@コントローラの同等+ @ ResponseBody

   @ResponseBody:リターンJSON文字列

   @RequestMapping:パス設定要求

   @RequestMapping(value="/getName",method=RequestMethod.GET,params={"id=123","name","!age")

 //上述规则定义了,只能响应get请求,并且请求的参数必须包含id=123,必须包含name,不能包含age//根据上述规则此地址合法:http://localhost:8080/xx?id=123&name=abc

   フロントエンドのパラメータ取得

  1、同じことが直接プロパティ名を暗示することができます。パブリック文字列F(文字列名、文字列の年齢){}

  図2に示すように、送信データのフロントエンドは、オブジェクトへのオブジェクト、同じ名前の値とフ​​ィールド名としてカプセル化されています。パブリック文字列F(人の人){}

  図3は、注釈@RequestParma(値=「名前」、はdefaultValueは=「TC」)の使用は:名前の値を取得し、デフォルト値を設定します。パブリック文字列F(@RequestParma( "名前")文字列名){}

  図4に示すように、使用PathVariable:バインド要求パスにおけるこのアノテーションデータ要求

    要求パス:RequestMapping( "../ {名} / {年齢}")

   パブリック文字列F(@PathVariable( "名前")文字列名、PathVariable @( "年齢")文字列の年齢){リターン「リダイレクト」/「フォワード」}

   リダイレクト:リダイレクト;フォワード:要求を転送します。

  5、@ RequestBody:データを受信し、JSON、パブリック文字列F(@RequestBody人の人){}

第四に、ファイルのアップロード

/*
采用三种方式来接收上传文件,分别用三个方法试验
每个方法里,有程序执行时间记录
实际运用时,三者选其一
第一种最慢,第三种最快,一般选用第二种
*/
@Controller
public class FileController { /* * 通过流的方式上传文件 * * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象 */ @RequestMapping("fileUpload") public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException { // 用来检测程序运行时间 long startTime = System.currentTimeMillis(); try { // 获取输出流 OutputStream os = new FileOutputStream("E:/" + new Date().getTime() + file.getOriginalFilename()); // 获取输入流 CommonsMultipartFile 中可以直接得到文件的流 InputStream is = file.getInputStream(); int temp; // 一个一个字节的读取并写入 while ((temp = is.read()) != (-1)) { os.write(temp); } os.flush(); os.close(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("方法一的运行时间:" + String.valueOf(endTime - startTime) + "ms"); return "/success"; } /* * 采用file.Transto 来保存上传的文件 */ @RequestMapping("fileUpload2") public String fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException { long startTime = System.currentTimeMillis(); String path = "E:/" + new Date().getTime() + file.getOriginalFilename(); File newFile = new File(path); // 通过CommonsMultipartFile的方法直接写文件(注意这个时候) file.transferTo(newFile); long endTime = System.currentTimeMillis(); System.out.println("方法二的运行时间:" + String.valueOf(endTime - startTime) + "ms"); return "/success"; } /* * 采用spring提供的上传文件的方法 */ @RequestMapping("springUpload") public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException { long startTime = System.currentTimeMillis(); // 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器) CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); // 检查form中是否有enctype="multipart/form-data" if (multipartResolver.isMultipart(request)) { // 将request变成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; // 获取multiRequest 中所有的文件名 Iterator iter = multiRequest.getFileNames(); while (iter.hasNext()) { // 一次遍历所有文件 MultipartFile file = multiRequest.getFile(iter.next().toString()); if (file != null) { String path = "E:/springUpload" + file.getOriginalFilename(); // 上传 file.transferTo(new File(path)); } } } long endTime = System.currentTimeMillis(); System.out.println("方法三的运行时间:" + String.valueOf(endTime - startTime) + "ms"); return "/success"; } }

 フロントページ:

<!-- 三个form分别对应controller里三个上传方法 -->
    <form name="Form1" action="fileUpload.v" method="post" enctype="multipart/form-data"> <h1>采用流的方式上传文件</h1> <input type="file" name="file"> <input type="submit" value="upload" /> </form> <form name="Form2" action="fileUpload2.v" method="post" enctype="multipart/form-data"> <h1>采用multipart提供的file.transfer方法上传文件</h1> <input type="file" name="file"> <input type="submit" value="upload" /> </form> <form name="Form3" action="springUpload.v" method="post" enctype="multipart/form-data"> <h1>使用spring mvc提供的类的方法上传文件</h1> <input type="file" name="file"> <input type="submit" value="upload" /> </form>

---------------------
参照リンク
https://blog.csdn.net/weixin_42621338/article/details/87204868

https://www.jianshu.com/p/fbc6953e5af4

 

 

おすすめ

転載: www.cnblogs.com/kobe24vs23/p/11316464.html