这一次讲解如何构建一个简单的Spring MVC应用。
包含的技术有spring mvc中的表单提交,利用ajax的方法来和springmvc通讯两个内容。
涉及ajax的是和user有关的文件。
应用环境是IDEA,当然Eclipse也是可以的。整个项目的环境是Maven+Spring4.3。
祭出文件目录图:
junit
junit
4.12
org.hamcrest
hamcrest-all
1.3
test
org.springframework
spring-context
4.3.18.RELEASE
org.aspectj
aspectjrt
1.9.1
org.springframework
spring-webmvc
4.3.18.RELEASE
javax.servlet
javax.servlet-api
3.1.0
provided
org.junit.jupiter
junit-jupiter-api
RELEASE
compile
jstl
jstl
1.2
org.json
json
20180130
com.fasterxml.jackson.core
jackson-core
2.9.6
com.fasterxml.jackson.core
jackson-annotations
2.9.6
com.fasterxml.jackson.core
jackson-databind
2.9.6
这些是Spring MVC的基本配置文件
RootConfig.java
package config;
public class RootConfig {
}
WebAppInitializer.java
package config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class>[] getRootConfigClasses() {
return new Class>[] { RootConfig.class };
}
@Override
protected Class>[] getServletConfigClasses() {
return new Class>[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
WebConfig.java
package config;
import org.springframework.context.annotation.Bean;
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 // 启用spring mvc
@ComponentScan("web") // 启用组件扫描
class WebConfig extends WebMvcConfigurerAdapter {
/**
* 配置是解析器
* @param
* @return org.springframework.web.servlet.ViewResolver
**/
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); // 配置jsp视图解析器
resolver.setPrefix("WEB-INF/views/"); // 这里是前缀
resolver.setSuffix(".jsp"); // 这里是后缀
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
/**
* 配置静态资源的处理
* @param configurer
* @return void
**/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
User.java
package model;
/**
* @author ChenZhiMing
* @date 2018/8/5 14:22
*/
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
HomeController.java
package 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";
}
}
InputController.java
package web;
import model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class InputController {
@RequestMapping(value = "/input", method = RequestMethod.GET)
public String getInput() {
return "input";
}
@RequestMapping(value = "/input", method = RequestMethod.POST)
public String getInputForm(User user, Model model) {
System.out.println("name: " + user.getName() + ", age: " + user.getAge());
model.addAttribute(user);
return "success";
}
}
UserController.java
package web;
import model.User;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
public class UserController {
@RequestMapping(value = "/userInfo", method = RequestMethod.GET)
public String getUserInfo() {
return "userInfo";
}
@RequestMapping(value = "/getJson", method = RequestMethod.POST)
@ResponseBody
public User function(@RequestBody User user) {
System.out.println(user);
return user;
}
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "jane");
jsonObject.put("age", 12);
System.out.println(jsonObject.toString());
}
}
home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
welcome
input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
success.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
Title
input success
name:
age: ${user.age}
userInfo.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
Document