SpringMVC

因為暫時沒跑通,但是又想回家搗鼓,所以在簡書上寫下來。

源碼來自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

下面貼源碼:

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容