Spring MVC(4)Web練習の作成2

26040 ワード

DispatcherServiceletをパーティションコントローラに設定する方法


✔方法web.xmlファイルに✔を設定する


1)DispatcherServicelet設定xml Spring設定を取得する
2)DispatcherServicelet設定Java config spring設定を取得する
url-patternは「/」に維持され、すべてのリクエストがアクセスできるようにします.

方法WebApplicationInitializerの実装と設定

  • Spring MVCは、サーブレットContainerInitializerを実装中のSpringサーブレットContainerInitializer、
  • を提供します.
  • S p r i n t e S v e r t ContainerInitializer WebアプリケーションInitializerインプリメンテーションを検索してインスタンスを作成し、インスタンスのonStartupメソッドを呼び出して
  • を初期化します.

    Spring MVC設定コンセプト


    DispatcherServiceletがJava Configを取得する設定の定義

  • @Configuration
    Java Configファイルであることを示します

  • @EnableWebMvc
    Webの自動設定に必要な空白の大部分

  • @ComponentScan
  • コントローラ、サービス、およびその他の動作を含むクラスを特定し、スプリングコンテナが
  • を空で管理できるようにする.
  • D e f a u l t AnnotationHandleMappingおよびR e q u stMappingHandleMappingインプリメンテーションプログラムは、ツールを使用してマッピング関係を検索する他の手動マッピングよりもはるかに複雑なタスクを実行します.Springコンテナアプリケーションコンテキストの要求処理が空です)で、クラスまたはメソッドでRequestMappingアクションを検索してHandleMappingオブジェクト
  • を作成します.
  • HandlerMappingは、受信サーバの要求をどのプロセッサ
  • に送信かを決定する.
  • D e f a u l t AnnotationHandlerMappingはDispatcherServiceletがデフォルトで登録したデフォルトのHandlerマッピングオブジェクトです.Request MappingHandlerMappingはより強力で柔軟ですが、
  • に明示的に設定する必要があります.

  • WebMvcConfigurerAdapter
  • org.springframework.web.servlet.config.annotation. WebMvcConfigurerAdapter
  • @EnableWebMvcはすべてのデフォルト設定を自動的に実行しますが、プリファレンス以外の設定が必要な場合はクラスを継承し、メソッドを上書きして
  • を実装します.

  • @RequestMapping
  • Http要求とコントローラメソッドの接続
  • Httpメソッドの接続方法
  • @RequestMapping(value="/users", method=RequestMethod.POST)
  • From Spring 4.3 version (@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping)
  • Http特定ハッシュの接続方法
  • @RequestMapping(method = RequestMethod.GET, headers = "content-type=application/json")
  • Httpパラメータの接続方法
  • @RequestMapping(method = RequestMethod.GET, params = "type=raw")
  • コンテンツタイプリーダーの接続方法
  • @RequestMapping(method = RequestMethod.GET, consumes = "application/json")
  • クライアントへの接続方法
  • @RequestMapping(method = RequestMethod.GET, produces = "application/json")
  • コントローラ作成練習1/3


    完全なファイル構造については、次の図を参照してください.

    1)リソースフォルダと同じ場所にjavaフォルダを作成する


    2)javaフォルダのkr.or。connect.mvcexam.configパッケージの作成


    3)WebMvcContextConfigurationクラスを作成し、作成時にWebMvcConfigurator Adapterを継承する


    WebMvcContextConfiguration.java
    package kr.or.connect.mvcexam.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = { "kr.or.connect.mvcexam.controller" })
    // controller에서 컴포넌트 스캔할 것, base packages는 꼭 지정하기
    public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
    	@Override
    	public void addResourceHandlers(ResourceHandlerRegistry registry) {
    		// css, img 등의 파일들까지 요청 들어올 때는 특정 부분에서만 찾도록 하여 컨트롤러 request mapping까지 가지 않도록 함
    		registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/META-INF/resources/webjars/")
    				.setCachePeriod(31556926);
    		registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
    		registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);
    		registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
    	}
    
    	// default servlet handler를 사용하게 합니다.
    	@Override
    	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    		// 핸들러 사용 -> 매핑 정보가 없는 url 요청을 처리
    		// WAS의 default servlet에 넘김 -> static한 자원 읽어 view
    		configurer.enable();
    	}
    
    	@Override
    	public void addViewControllers(final ViewControllerRegistry registry) {
    		// 특정 URL에 대한 처리를 컨트롤러 클래스 작성하지 않고 처리
    		System.out.println("addViewControllers가 호출됩니다. ");
    		registry.addViewController("/").setViewName("main");
    	}
    
    	@Bean
    	public InternalResourceViewResolver getInternalResourceViewResolver() {
    		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    		resolver.setPrefix("/WEB-INF/views/"); // view name 앞에 붙임
    		resolver.setSuffix(".jsp"); // view name 뒤에 붙임
    		// 즉 이 메서드를 거쳐 /WEB-INF/views/main.jsp 파일을 보여주게 되는 것
    		return resolver;
    	}
    }

    4) src/main/webapp/WEB-INF/web.xmlファイルの変更


    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
    	<display-name>Archetype Created Web Application</display-name>
    	<servlet>
    		<!-- servlet-mapping과 연결되어 있음 -->
    		<servlet-name>mvc</servlet-name>
    		<!-- Front Controller로 사용하기 위해 DispatcherServlet 클래스 등록 -->
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<!-- 스프링 빈 컨테이너 설정 -->
    		<init-param>
    			<param-name>contextClass</param-name>
    			<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    		</init-param>
    		<!-- Configuration 정보 읽어내기 위해 위치 등록 -->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>kr.or.connect.mvcexam.config.WebMvcContextConfiguration</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>mvc</servlet-name>
    		<!-- 모든 요청이 들어오면 servlet-name과 같은 서블릿에 등록되어 있는 서블릿 클래스 실행  -->
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    
    </web-app>
    

    5)src/main/webapp/WEB-INFパスにビューフォルダ、mainを作成します。jspファイルの作成


    main.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>main page!</h1>
    </body>
    </html>

    6)Tomcatサーバ上でのプロジェクトの実行



    各種エラー

    No mapping found for HTTP request with URI [/mvcexam/] in DispatcherServlet with name 'mvc' web.xml is missing and <failOnMissingWebXml> is set to true次の2つのエラーが発生しました.一つ目はgooglingで、コントローラ部分と関係があると言っていましたが、addView Controlを使っていたので、関連がないように見えました.
    2つ目の問題はネットワークですxmlファイルとpom.これはxmlファイル間のエラーです.デプロイメントコンポーネントに触れたため、エラーが発生した可能性があります.
    次は正常に稼働しているプロジェクトのdeployment pathです.後でエラーが発生した場合は、参照してください.

    明らかにコードはよく書かれていて、バージョンも正しいので、他の人がよく動いているように見えますが、だめです.何時間も解決策を探していたとき、次の文章を見つけました.
    https://stackoverflow.com/questions/28054929/eclipse-fails-to-import-maven-project
    結局このクリップの設定に触れ、歪んだようです.一日もたたないうちに問題が解決してよかった...