在方法的聲明之前添加@RequestMapping注解,用于配置處理哪個路徑的請求;
應該使用public權限;
傳回值類型暫時使用String類型;
方法的名稱可以自定義;
方法的參數清單暫時為空。
例如,可以設計為:
package cn.tedu.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
// http://localhost:8080/springmvc01/hello.do
@RequestMapping("hello.do")
public String hello() {
System.out.println("HelloController.hello()");
return "";
}
}
完成到以上步驟時,就可以将項目部署到Tomcat中,啟動Tomcat,在浏覽器中輸入測試網址http://localhost:8080/springmvc01/hello.do後,在浏覽器應該會提示404錯誤,但是,在Eclipse的控制台中,應該可以看到以上hello()方法中的輸出語句!
最後,如果希望通路後,能夠在浏覽器輸出自定義的内容,可以在方法的聲明之前添加@ResponseBody注解,并将期望傳回的内容寫在hello()方法傳回的字元串中即可!例如:
package cn.tedu.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@RequestMapping("hello.do")
@ResponseBody
public String hello() {
System.out.println("HelloController.hello()");
return "<font color=red>Hello</font>, <font color=blue>SpringMVC</font>!!!";
}
}
【補】2. 為什麼要使用SpringMVC架構
在原生的Java EE技術體系中,處理使用者請求的是Servlet元件,通常情況下,每個Servlet元件處理1種請求,例如“使用者注冊”的請求可能由UserRegServlet來處理,“使用者登入”的請求可能由UserLoginServlet來處理……在比較複雜的業務系統中,使用者送出的請求的種類可能特别多,就會導緻Servlet元件的數量也特别多!進而導緻代碼的管理難度很大,同時,在項目運作時,諸多的Servlet元件也會占用較多的記憶體空間……
在SpringMVC架構的設計中,就解決了以上問題,它使用1個DispatcherServlet的元件,用于接收所有請求(當然,也可以配置為某些特定的請求,例如配置為僅處理*.do的請求),以此減少Servlet元件的數量!
原本Servlet是用于處理請求的,而在SpringMVC架構中,DispatcherServlet的主要作用是接收到請求後,分發到具體處理請求的Controller元件,其本身并不處理請求!而SpringMVC中的每個Controller元件都可以有若幹個處理請求的方法,也就是每個Controller元件都可以處理若幹種請求,是以,即使項目很複雜,請求的種類很多,但是,Controller元件的數量并不會太多!
DispatcherServlet與Controller的關系就好比銀行大廳的取号機和業務櫃台的關系。
SpringMVC架構的使用比原生的Java EE更加簡單!
1. 顯示頁面
在項目的pom.xml中添加thymeleaf和thymeleaf-spring5這2個依賴:
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
注意:同一個
groupId
下,各
artifactId
不同,但是,如果
version
的編号規則是一樣的,并且,在同一個項目中需要使用不同
artifactId
對應的依賴,必須使用相同的
version
!
package cn.tedu.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@ComponentScan("cn.tedu.spring")
public class SpringMvcConfigurer implements WebMvcConfigurer {
private String characterEncoding = "utf-8";
@Bean
public ViewResolver configViewResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setCharacterEncoding(characterEncoding);
templateResolver.setTemplateMode("HTML");
templateResolver.setCacheable(false);
templateResolver.setPrefix("/templates/");
templateResolver.setSuffix(".html");
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding(characterEncoding);
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
}