因為暫時沒跑通,但是又想回家搗鼓,所以在簡書上寫下來。
源碼來自spring實戰第5章。不使用web.xml配置,而是使用java bean配置。
目錄結構如下:
- src
- spittr
- Spittle.java
- spittr.config
- SpittrWebAppInitializer.java
- WebConfig.java
- RootConfig.java
- spittr.data
- SpittleRepository.java
- spittr.web
- HomeController.java
- SpittleController.java
- SpittleControllerTest.java
- spittr
下面貼源碼:
SpittrWebAppInitializer.java
package spittr.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 擴展了AbstractAnnotationConfigDispatcherServletInitializer的類會自動配置DispatcherServlet和Spring應用上下文
* @author c00284934
*
*/
public class SpittrWebAppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 返回帶有@Configuration注解的類將會用來配置ContextLoaderListener創建的應用上下文中的bean
* ContextLoaderListener加載的bean通常是驅動應用后端的中間層和數據層組件
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
/**
* 帶有@Configuration注解的類會用來定義為DispatcherServlet應用上下文中的bean
*/
@Override
protected Class<?>[] getServletConfigClasses() {
/**
* 當DispatcherServlet啟動的時候,它會創建Spring應用上下文,并加載配置文件中所聲明的bean
*/
return new Class<?>[]{WebConfig.class};//指定配置類
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};//將DispatcherServlet映射到“/”
}
}
WebConfig.java
package spittr.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc //啟用SpringMVC
@ComponentScan("spittr.web") //啟用組件掃描
public class WebConfig extends WebMvcConfigurerAdapter{
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置jsp視圖解析器
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) { //配置靜態資源的處理
//我們要求DispatcherServlet將對靜態資源的請求轉發到Servlet容器中默認的Servlet上,而不是使用DispatcherServlet本身來處理此類請求
configurer.enable();
}
}
RootConfig.java
package spittr.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages={"spittr"},excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
public class RootConfig {
}
HomeController.java
package spittr.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
@RequestMapping(value="/",method=RequestMethod.GET)
public String home(){
return "home";
}
}
請求http://localhost:8080/spittr/ 會執行HomeController 的home(),然后返回home.jsp(因為在WebConfig .java的視圖解析器里已經配置好前后綴了)
下面是home.jsp: (使用了jstl標簽庫,需要導入jstl.jar standard.jar)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" session="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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=ISO-8859-1">
<title>Spitter</title>
</head>
<body>
<h1>Welcome</h1>
<a href="<c:url value="/spittr" /> " >Spittles</a> |
<a href="<c:url value="/spittr/register" /> " >Spittles</a>
</body>
</html>
Spittle.java