話不多說,直接上代碼:
注解是Spring的一個構建的一個重要手段,減少寫配置文件,下面解釋一下一些要用到的注解:
@Configuration 作用於類上面,聲明當前類是一個配置類(相當於一個Spring的xml文件)
@ComponentScan(“xxx”) 作用於類上面,自動掃描xxx包名下所有使用@Service、@Component、@Repository和@Controller的類,並注冊為Bean
@Bean 作用與類和方法上,相當於Spring配置文件bean節點
@EnableWebMvc 作用於類,開啟一些默認配置,如一些ViewResolver或者MessageConverter
@RequestMapping 作用於類、方法,配置URL和方法之間的映射
@RequestBody 作用於參數前,允許request的參數在request體中,而不是在直接鏈接在地址后面
@ResponseBody 作用於返回值、方法上,支持將返回值放在response體中,而不是返回一個頁面。
@RequestParam 作用於參數前,將form的對應name值映射到當前參數中。
項目的創建這里就省略啦........
pom.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--組織名--> <groupId>com.oukele.hellowrod</groupId> <!--項目名--> <artifactId>HelloWord</artifactId> <!--項目版本信息--> <version>1.0-SNAPSHOT</version> <!--項目類型--> <packaging>war</packaging> <!--依賴管理--> <dependencies> <!--spring 的依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.3.RELEASE</version> </dependency> <!--spring mvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.3.RELEASE</version> </dependency> <!--java servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> </project>
導入靜態資源:
在WEB-INF中,直接粘貼boostrap的標准資源,並新建一個views文件夾,將index.jsp拉進去,將自己寫的Login.jsp(想要示例的登陸頁面的話在本文的最下面有個github地址可以去下載)復制進去,效果如下(順便刪了web.xml):
java文件夾下面的目錄結構
創建SpringConfig類(類似配置文件):
新建類SpringConfig類,繼承WebMvcConfigurerAdapter,並配置一些必要的方法。
package com.oukele.spring; 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.*; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @Configuration//聲明當前類是一個配置類(類似於 spring_xxx.xml 的文件) @EnableWebMvc//若無此注解,WebMvcConfigurerAdapter無效 @ComponentScan//自動掃描spring注解 比如@Service、@Component、@Repository和@Controller的類,並注冊為Bean public class SpringConfig extends WebMvcConfigurerAdapter { //添加一個ViewResolver解析view @Bean//相當於Spring配置文件bean節點 public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } //注冊靜態資源,沒注冊的話,網站是訪問不了的 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/css/**").addResourceLocations("/WEB-INF/css/"); registry.addResourceHandler("/js/**").addResourceLocations("/WEB-INF/js/"); registry.addResourceHandler("/fonts/**").addResourceLocations("/WEB-INF/fonts/"); } //根目錄的時候直接跳轉到登錄界面 @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("Login"); } }
與xml配置對比:
創建WebInit類(web.xml配置文件):
在 WebInit類中實現 WebApplicationInitializer接口 並實現方法,方法的內容如下:
package com.oukele.spring; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; public class WebInit implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringConfig.class); ctx.setServletContext(servletContext); ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcher",new DispatcherServlet(ctx)); dynamic.addMapping("/"); dynamic.setLoadOnStartup(1); } }
web.xml文件 與 WebInit 類 的對比:
new DispatcherServlet(ctx); --> 在上寫文中注冊Spring配置文件,添加到DispatcherServlet上下文中。
添加Controller:
新建一個LoginController類。
package com.oukele.spring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @RequestMapping("/login") public String login(@RequestParam("username") String username, @RequestParam("pwd") String pwd) { String forword = null; if (username.equals("oukele") && pwd.equals("oukele")) { forword = "index";//登錄成功跳轉到index.jsp } else { System.out.println("no such user"); forword = "Login";//登錄失敗跳轉到Login.jsp繼續登錄操作 } return forword; } }
添加Tomcat,運行:
這里已經設置根目錄是Login.jsp頁面。
運行結果:
到這里就結束啦。
本次演示代碼地址:https://github.com/oukele/spring-spring-mvc-web_demo