Spring MVC(4)Web練習の作成2
26040 ワード
DispatcherServiceletをパーティションコントローラに設定する方法
✔方法web.xmlファイルに✔を設定する
1)DispatcherServicelet設定xml Spring設定を取得する
2)DispatcherServicelet設定Java config spring設定を取得する
url-patternは「/」に維持され、すべてのリクエストがアクセスできるようにします.
方法WebApplicationInitializerの実装と設定
Spring MVC設定コンセプト
DispatcherServiceletがJava Configを取得する設定の定義
@Configuration
Java Configファイルであることを示します
@EnableWebMvc
Webの自動設定に必要な空白の大部分
@ComponentScan
WebMvcConfigurerAdapter
@RequestMapping
@RequestMapping(value="/users", method=RequestMethod.POST)
@RequestMapping(method = RequestMethod.GET, headers = "content-type=application/json")
@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.javapackage 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
結局このクリップの設定に触れ、歪んだようです.一日もたたないうちに問題が解決してよかった...
Reference
この問題について(Spring MVC(4)Web練習の作成2), 我々は、より多くの情報をここで見つけました
https://velog.io/@oliviarla/Spring-MVC-4-웹-페이지-작성-실습-2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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;
}
}
<?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>
<%@ 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>
Reference
この問題について(Spring MVC(4)Web練習の作成2), 我々は、より多くの情報をここで見つけました https://velog.io/@oliviarla/Spring-MVC-4-웹-페이지-작성-실습-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol