1. Springを使用する理由
(1)デカップリングを容易にし、開発を簡素化する
通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
(2)AOPプログラミングのサポート
通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测、事务管理、日志记录等。
(3)宣言型トランザクションのサポート。
(4)さまざまな優れたフレームワークの統合を促進します。
(5)Java EE APIの使用の難易度を下げる
如对JDBC,JavaMail,远程调用等提供了简便封装。
2. IoCとは何ですか、なぜIoCを使用するのですか?
説明:
IoCは、コントローラーの反転、制御の反転を表します。概念は、オブジェクトを作成する必要はなく、作成方法を説明するだけでよいということです。コンポーネントとサービスをコードで直接アセンブルするのではなく、どのコンポーネントがどのサービスを必要とするかを構成ファイルで説明する必要があります。その後、コンテナー(IOCコンテナー)がそれらのアセンブルを担当します。
理由:
それは、疎結合でより良いプログラムを設計する方法を私たちに案内することができます。
3. AOPとは何ですか、なぜAOPを使用するのですか?
説明:
AOPフルネーム:アスペクト指向プログラミング、アスペクト指向プログラミング。これは、再利用可能な関数を抽出し、トランザクション管理、権限制御、ロギング、パフォーマンス統計など、これらの一般的な関数を適切なタイミングでアプリケーションに組み込みます。
理由:
AOPは新しい問題の解決に役立ちません。既存の問題をより少ないワークロードで解決するより良い方法を提供し、システムをより堅牢で保守可能にします。
4. Springのトランザクション管理とは何ですか?
トランザクションは、一連のデータベース操作(複数のデータの挿入など)に対する統合されたコミットまたはロールバック操作です。挿入が成功すると、両方とも成功します。途中で例外が発生すると、以前のすべての操作がロールバックされます。これにより、ダーティデータの表示を防ぎ、データベースデータの問題を防ぐことができます。開発中のこの状況を回避するために、トランザクション管理が一般的に実行されます。
Springの宣言型トランザクションは、通常、構成ファイル内のトランザクションの構成ステートメントを参照します。これには、多くの宣言型プロパティが含まれます。Springプロキシを使用してプロキシを実行します。追加のコードを自分で作成する必要はなく、Spring構成ファイルで宣言するだけです。はい、通常はデータベース操作で使用されます。
プログラムトランザクションとは、ハードコーディングによるトランザクション処理を指します。この処理方法ではコードを記述する必要があり、トランザクションのロジックは自分でカスタマイズできます。これは、データベースやその他の操作のものです。
また、Springには独自のトランザクション管理メカニズムがあり、通常はTransactionManangerによって管理されます。これは、Springインジェクションを介して実行できます。
5. Springフレームワークは、次の5つのBeanスコープをサポートします。
(1)シングルトン:デフォルト値。Beanの各Spring iocコンテナにはインスタンスが1つだけあります。
(2)プロトタイプ:Bean定義は複数のインスタンスを持つことができます。
(3)リクエスト:各httpリクエストに対してBeanが作成され、スコープはWebベースのSpring ApplicationContextのコンテキストでのみ有効です。
(4)セッション:HTTPセッションでは、Bean定義がインスタンスに対応します。このスコープは、WebベースのSpring ApplicationContextの場合にのみ有効です。
(5)グローバルセッション:グローバルHTTPセッションでは、Bean定義はインスタンスに対応します。このスコープは、WebベースのSpring ApplicationContextの場合にのみ有効です。
6. SpringのMVCフレームワークとは何ですか?
Springは、Webアプリケーションを構築するためのフル機能のMVCフレームワークを備えています。Springは、Strutsなどの他のMVCフレームワークと簡単に統合できます。SpringのMVCフレームワークは、制御の反転を使用して、ビジネスオブジェクトを制御ロジックから明確に分離します。また、宣言的な方法で要求パラメーターをビジネスオブジェクトにバインドすることもできます。
春のmvcは、mvcに基づくwebフレームワークです。Spring mvcは、Springフレームワークのモジュールです。SpringMVCとSpringは、中間統合層を介して統合する必要はありません。
7.注釈を有効にする方法:
<context:annotation-config/>
context:component-scanbase-package = "com.tgb.web.controller.annotation"
</ context:component-scan>を使用する場合、上記のコンテンツは省略できます
8. Spring MVCのリクエストプロセス:
最初のステップ:フロントコントローラー(DispatcherServlet)へのリクエストを開始します。
手順2:フロントコントローラーはHandlerMappingに要求して、xml構成と注釈に従って検索できるハンドラーを見つけます。
3番目のステップ:プロセッサーマッパーHandlerMappingは、ハンドラーをフロントコントローラーに返します。
手順4:フロントコントローラーは、プロセッサアダプターを呼び出してハンドラーを実行します。
ステップ5:プロセッサアダプタがハンドラを実行します。
ステップ6:ハンドラーの実行が完了し、ModelAndViewをアダプターに返します。
ステップ7:プロセッサーアダプターはModelAndViewをフロントコントローラーに戻します。ModelAndViewは、モデルとビューを含む、springmvcフレームワークの低レベルオブジェクトです。
手順8:フロントコントローラーはビューリゾルバーにビューの解決を要求し、論理ビュー名に従って実際のビュー(jsp)に解決します。
ステップ9:ビューリゾルバーはビューをフロントコントローラーに戻します。
ステップ10:フロントコントローラーがビューレンダリングを実行します。ビューのレンダリングにより、ModelAndViewオブジェクト内のモデルデータがリクエストフィールドに入力されます。
ステップ11:フロントコントローラーがユーザーに結果を返します。
9、web.xmlの構成
10.注釈付きプロセッサマッパーとアダプタ
spring3.1の後で、org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappingアノテーションマッパーを使用します。
spring3.1の後で、org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterアノテーションアダプターを使用します。
上記のアノテーションマッパーとアノテーションアダプター構成の代わりにmvc:annotation-drivenを使用します。
11. Springとmybatisの統合プロセス
ステップ1:daoレイヤーを統合する
mybatis和spring整合,通过spring管理mapper接口。
使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
ステップ2:サービス層を統合する
通过spring管理 service接口。
使用配置方式将service接口配置在spring配置文件中。
实现事务控制。
ステップ3:springmvcを統合する
由于springmvc是spring的模块,不需要整合。
主な構成は次のとおりです。
(1)Mybatis構成ファイルsqlMapConfig.xmlは、エイリアス自動スキャンを構成します(エンティティークラス)
(2)マッパースキャナー(インターフェース、データベースアクセスインターフェース)
(3)データベース接続プールの構成
(4)宣言型トランザクション構成
(5)アノテーションスキャンを有効にする:<context:component-scan base-package = "cn.itcast.ssm.controller"> </ context:component-scan>
(6)アノテーションマッパーとアダプターを構成します:<mvc:annotation-driven> </ mvc:annotation-driven>
(7)ビューリゾルバー:<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
(8)構成制御クラス:DispatcherServletフロントコントローラー
(9)Spring構成ファイルのロードクラスを構成します:ClassLoadListener
12.フロントエンドコントローラ
フロントコントローラーは、マッパー、アダプター、ビューパーサー、およびその他のコンポーネントを上記のファイルから読み込みます。springmvc.xmlで構成されていない場合、デフォルトで読み込まれるDispatcherSerlvet.propertiesを使用します。
13.リゾルバー構成のプレフィックスとサフィックスを表示します。
14. sqlMapConfig.xml、mybatis独自の構成ファイル。
15.データソースを構成します。
16.トランザクション制御
トランザクション制御(applicationContext-transaction.xml)。applicationContext-transaction.xmlのSpring宣言型トランザクション制御メソッドを使用します。
17、負荷ばね構成
18.静的リソースへのアクセスはブロックされません:
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/images/**" location="/images/" />
<resources mapping="/js/**" location="/js/" />
19. @RequestMappingの役割
(1)URLマッピング
(2)リクエストマッピングの絞り込み
(3)httpリクエストメソッドを制限する
20、コントローラーメソッドの戻り値
1. ModelAndViewに戻る
メソッドが必要な場合は、ModelAndViewを定義し、モデルとビューを個別に設定します。
2.文字列を返す
コントローラメソッドが文字列を返す場合:
(1)論理ビュー名の戻りを表します。実ビュー(jspパス)=接頭辞+論理ビュー名+接尾辞
(2)リダイレクト:返される文字列の形式は次のとおりです: "redirect:queryItem.action"
(3)ページ転送の転送:返される文字列の形式は次のとおりです: "forward:queryItem.action"
3. voidを返す
コントローラーメソッドの仮パラメーターで要求と応答を定義し、要求または応答を使用して応答結果を指定できます。
(1)次のように、requestを使用してページを表示します。request.getRequestDispatcher( "page path")。forward(request、response);
(2)応答ページからリダイレクトすることもできます:response.sendRedirect( "url");
(3)応答を介して応答結果を指定することもできます。たとえば、応答jsonデータは次のとおりです。
response.setCharacterEncoding( "utf-8");
response.setContentType(“ application / json; charset = utf-8”);
response.getWriter()。write(“ json串”)。
21.パラメータのバインド:
1.デフォルトでサポートされるタイプ
これらのオブジェクトを使用するには、コントローラーメソッドの仮パラメーターで次のタイプのオブジェクトを直接定義します。パラメータのバインドプロセスで、次のタイプが見つかった場合は、直接バインドします。
(1)HttpServletRequest:リクエストオブジェクトを通じてリクエスト情報を取得します。
(2)HttpServletResponse:応答を通じて応答情報を処理します。
(3)HttpSession:セッションオブジェクトを通じてセッションに格納されたオブジェクトを取得します。
(4)Model / ModelMap:モデルはインターフェースであり、modelMapはインターフェースの実装です。役割:モデルデータをリクエストフィールドに入力します。
2.シンプルタイプ
@RequestParamを使用して、単純型パラメーターをバインドします。
@RequestParamを使用しない場合、正常にバインドするには、リクエストで渡されるパラメーター名がコントローラーメソッドの正式なパラメーター名と一致している必要があります。
@RequestParamを使用する場合、リクエストで渡されるパラメーターの名前を、コントローラーメソッドのパラメーター名と一致するように制限する必要はありません。
必須属性を通じてパラメーターを渡す必要があるかどうかを指定してください。trueに設定した場合、パラメーターが渡されないと、エラーが報告されます。
3.pojoバインディング
ページに入力された名前は、ページのデータをpojoにバインドするコントローラーのpojoパラメーターの属性名と同じです。(usename、age; user.username、user.ageは必要ありません)。
4.日付型バインディングを実現するカスタムパラメータバインディング
コントローラーパラメーターのpojoオブジェクトの場合、属性に日付タイプがある場合は、パラメーターバインディングをカスタマイズする必要があります。要求された日付データ文字列を日付タイプに変換し、変換される日付タイプはpojoの日付属性のタイプと一致します。
22、Spring MVCとStruts2の比較
(1)Struts2はクラスレベルのインターセプト、クラスはリクエストコンテキストに対応、SpringMVCはメソッドレベルのインターセプト、メソッドはリクエストコンテキストに対応、メソッドは同時にURLに対応するため、SpringMVCはアーキテクチャ自体から簡単に実装できます安らかなURL。
(2)上記の理由により、SpringMVCのメソッドは基本的に独立しており、リクエストレスポンスデータは排他的に共有されます。リクエストデータはパラメータを通じて取得され、処理結果はModelMapを通じてフレームワークに返されます。変数はメソッド間で共有されませんが、Struts2はそれを行います。乱雑です。メソッドは独立していますが、すべてのAction変数は共有されています。これはプログラムの実行には影響しませんが、プログラムのコーディングと読み取り時に問題が発生します。リクエストが送信されるたびに、Action、Actionオブジェクトが作成されます。リクエストコンテキストに対応します。
(3)Struts2は各リクエストをカプセル化する必要があるため、リクエストやセッションなどのサーブレットライフサイクルの変数をMapにカプセル化して、各アクションで使用できるようにし、スレッドの安全性を確保します。そのため、原則として、メモリ消費量が多くなります。
(4)SpringMVCはAjaxを統合します。これは使用が非常に便利です。アノテーション@ResponseBodyだけで実現でき、応答テキストを直接返すことができます。ただし、Struts2インターセプターはAjaxを統合します。一般に、アクションで処理するときにプラグインをインストールするか、独自に作成する必要がありますコードは統合されており、使用するのは比較的不便です。
(5)Springmvcはメソッド指向の開発(サービスインターフェイス開発メソッドに近い)であり、struts2はクラス指向の開発です。
(6)Springmvcは単一のケースで開発できますが、struts2は複数のケースでしか開発できません。
23、文字化け処理
(1)文字化けしたポスト
web.xmlに文字化けしたフィルターを追加:CharacterEncodingFilter
(2)getリクエストの中国語パラメーターの文字化けに対する2つの解決策があります。
-
次のように、tomcat構成ファイルを変更し、プロジェクトコードと一致するようにコードを追加します。
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
-
パラメータを再コーディングします。
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
24、コレクション型バインディング
(1)配列バインディング:
controller方法参数使用:(Integer[] itemId)
页面统一使用:itemId 作为name
(2)リストのバインド:
pojo属性名为:itemsList
页面:itemsList[index].属性名
(3)マップバインディング:
pojo属性名为:Map<String, Object> itemInfo = new HashMap<String, Object>();
页面: 姓名:"text"name="itemInfo['name']"/>
25、春の検証
(1)プロジェクトでは、通常、ページでのjs検証などのフロントエンド検証が使用されます。より高いセキュリティ要件のために、サーバーで検証を実行することをお勧めします。
(2)Springmvcは検証にhibernateの検証フレームワークを使用します(hibernateとは関係ありません)。
検証のアイデア:ページは要求パラメーターを送信し、要求はコントローラーメソッドに送信され、検証は検証に使用されます。チェックエラーがある場合は、エラーメッセージがページに表示されます。
26、データエコー
(1)@ModelAttributeは、メソッドの戻り値をページに渡すこともできます。
(2)@ModelAttributeなしでモデルを使用する最も簡単な方法を使用します。model.addAttribute( "id"、id);
(3)springmvcはデフォルトでpojoデータをエコーします。pojoデータがコントローラーメソッドに渡された後、springmvcは自動的にpojoデータをリクエストフィールドに配置し、キーはpojoタイプと等しくなります(最初の文字は小文字)。
(4)public String testParam(PrintWriter out、@RequestParam(“ username”)String username){// out直接输出。
27、例外処理
springmvcは、統一された例外処理のためのグローバル例外ハンドラー(システムには例外ハンドラーが1つしかない)を提供します。
システムで例外が発生すると、プログラムで手動でスローされ、daoはサービスにスローし、サービスはコントローラーにスローし、コントローラーはフロントコントローラーにスローし、フロントコントローラーはグローバル例外ハンドラーを呼び出します。
28、写真をアップロード
(1)ページフォームでenctype = "multipart / form-data"データを送信する場合、springmvcはマルチパートタイプのデータを解析する必要があります。
(2)springmvc.xmlでマルチパートタイプのパーサーを構成します。
(3)使用される方法:MultipartFile attach(単一ファイルのアップロード)またはMultipartFile [] attachs(複数ファイルのアップロード)
29、Json処理
(1)json変換用のjarパッケージをロードします。springmvcはjson変換用にJacksonのパッケージを使用します(@requestBodyおよび@responseBodyはjson変換用に次のパッケージを使用します)。
(2)jsonコンバーターを構成します。注釈アダプターRequestMappingHandlerAdapterにmessageConvertersを追加します。
<mvc:annotation-driven />を使用すると、自動的に追加されます。
(3)Ajax。
(4)コントローラー(ResponseBody、RequestBody)
(5)ajaxのcontentTypeがjsonタイプに設定されていない場合、渡されるパラメーターはキー/値タイプです。上記の設定の後、jsonタイプが渡されます。
30.インターセプター:
(1)インターセプターを定義し、HandlerInterceptorインターフェースを実装します。インターフェースには3つのメソッドが用意されています。
- preHandle:Handlerメソッドに入る前に実行され、ID認証やID認証などのID承認に使用されます。認証に合格した場合、現在のユーザーはログインしていないため、このメソッドをインターセプトして実行する必要はありません。
- postHandle:Handlerメソッドを入力すると、modelAndViewに戻る前に実行されます。アプリケーションシナリオは、modelAndView:共通モデルデータ(メニューナビゲーションなど)からここのビューに転送するか、ここでビューを指定できます。
- afterCompletion:このメソッドの実行を完了するためのハンドラーの実行、アプリケーションシナリオ:統一された例外処理、統一されたログ処理。
(2)インターセプター構成:
- HandlerMappingの構成(非推奨):SpringmvcインターセプターがHandlerMappingのインターセプトを設定します。InterceptionがHandlerMappingで構成されている場合、HandlerMappingを介して正常にマップされたハンドラーは、最終的にインターセプターを使用します。(一般的には推奨されません)
- グローバルインターセプターに似ています:springmvc構成はグローバルインターセプターに似ており、springmvcフレームワークは構成されたグローバルインターセプターを各HandlerMappingに注入します
Javaの知識はそれだけではありません。これはほんの少しの整理です。スペースの問題のため、すべてのコンテンツを配置するのは簡単ではありませんが、大量のJavaの学習資料を整理しました。また、今年の最新のJavaインタビューもあります。情報、クリックして入力する必要がある場合があります。信号:cszq、+プライベートレター I についても懸念がある可能性があります。