采用全注解的方式,来演示Hello world.
使用技术:
1.Spring 4.3.3.RELEASE
2.Maven 3
3.JDK 1.7
4.Eclipse 4.4
5.Boostrap 3
一,项目结构
二,Maven 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.devnp</groupId> <artifactId>Spring4MVCAnnotationMavenHelloWorld</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version>
<properties> <spring.version>4.3.3.RELEASE</spring.version> <jstl.version>1.2</jstl.version> <jdk.version>1.7</jdk.version> <servletapi.version>2.5</servletapi.version> <project.name>Spring4MVCAnnotationMavenHelloWorld</project.name> </properties>
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servletapi.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.11.v20150529</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webApp> <contextPath>/${project.name}</contextPath> </webApp> <httpConnector> <port>9999</port> </httpConnector> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> <wtpversion>2.0</wtpversion> <wtpContextName>${project.name}</wtpContextName> </configuration> </plugin> </plugins> <finalName>${project.name}</finalName> </build> </project>
|
三,控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package com.devnp.web.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView;
import com.devnp.web.service.HelloWorldService;
@Controller public class WelcomeController {
private final HelloWorldService helloWorldService;
@Autowired public WelcomeController(HelloWorldService helloWorldService) { this.helloWorldService = helloWorldService; }
@RequestMapping(value = "/", method = RequestMethod.GET) public String index(Map<String, Object> model) {
model.put("title", helloWorldService.getTitle("")); model.put("msg", helloWorldService.getDesc()); return "index"; }
@RequestMapping(value = "/hello/{name:.+}", method = RequestMethod.GET) public ModelAndView hello(@PathVariable("name") String name) {
ModelAndView model = new ModelAndView(); model.setViewName("index"); model.addObject("title", helloWorldService.getTitle(name)); model.addObject("msg", helloWorldService.getDesc()); return model;
}
}
|
四,页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title>
<spring:url value="/resources/css/bootstrap.min.css" var="bootstrapCss" /> <link href="${bootstrapCss}" rel="stylesheet" />
</head> <body> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">${title}</a> </div> </div> </nav>
<div class="jumbotron"> <div class="container"> <p> <c:if test="${not empty name}"> Hello ${name} </c:if>
<c:if test="${empty name}"> Welcome Welcome! </c:if> </p> <p> <a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a> </p> </div> </div>
<div class="container">
<div class="row"> <div class="col-md-4"> <h2>Heading</h2> <p>ABC</p> <p> <a class="btn btn-default" href="#" role="button">View details</a> </p> </div> <div class="col-md-4"> <h2>Heading</h2> <p>ABC</p> <p> <a class="btn btn-default" href="#" role="button">View details</a> </p> </div> <div class="col-md-4"> <h2>Heading</h2> <p>ABC</p> <p> <a class="btn btn-default" href="#" role="button">View details</a> </p> </div> </div>
<hr> <footer> <p>© devnp.com 2016</p> </footer> </div>
<spring:url value="/resources/js/bootstrap.min.js" var="bootstrapJs" /> <spring:url value="/resources/js/jquery-1.12.4.min.js" var="jquery" /> <script src="${bootstrapJs}"></script> <script src="${jquery}"></script> </body> </html>
|
五,配置
1.替换spring-web-config.xml配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package com.devnp.web.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.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView;
@EnableWebMvc 40Configuration @ComponentScan({ "com.devnp.web" }) public class SpringWebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); }
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/jsp/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
|
2.替换web.xml的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package com.devnp.web.servlet3;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import com.devnp.web.config.SpringRootConfig; import com.devnp.web.config.SpringWebConfig;
public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getServletConfigClasses() {
return new Class[] { SpringWebConfig.class }; }
@Override protected String[] getServletMappings() {
return new String[] { "/" }; }
@Override protected Class<?>[] getRootConfigClasses() {
return new Class[] { SpringRootConfig.class }; }
}
|
六,测试
mvn jetty:run
访问:http://localhost:9999/Spring4MVCAnnotationMavenHelloWorld/
访问:http://localhost:9999/Spring4MVCAnnotationMavenHelloWorld/hello/devnp.com
代码下载:
Spring4MVCAnnotationMavenHelloWorld.zip
Author:
Darren Du
License:
Copyright (c) 2019 MIT LICENSE