一、基本配置
- 配置 DispatcherServlet
package com.hj.myapp.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MyAppInitializer 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[] {"/"};
}
}
- Spring MVC配置
package com.hj.myapp.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
@ComponentScan("com.hj.myapp.web")
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
- RootConfig配置
package com.hj.myapp.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={"com.hj.myapp"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)})
public class RootConfig {
}
实体类
package com.hj.myapp.entries.user;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
@NotNull
@Size(min=4, max=10, message="{longName.size}")
private String loginName;
@NotNull
@Size(min=2, max=10, message="{userName.size}")
private String userName;
@NotNull
@Size(min=1, max=30, message="{address.size}")
private String address;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return userName+","+address;
}
}
接口
package com.hj.myapp.dao.interfaces;
import com.hj.myapp.entries.user.User;
public interface UserDao {
boolean save(User user);
User findByLoginName(String loginName);
boolean remove(User user);
boolean userExist(User user);
}
接口实现类
package com.hj.myapp.dao.fileimpl.user;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.hj.myapp.dao.interfaces.UserDao;
import com.hj.myapp.entries.user.User;
@Component
public class UserDaoImpl implements UserDao {
private Map<String, User> map = new HashMap<String, User>();
@Override
public boolean save(User user) {
map.put(user.getLoginName(), user);
return true;
}
@Override
public User findByLoginName(String loginName) {
return map.get(loginName);
}
@Override
public boolean remove(User user) {
return map.remove(user.getLoginName(), user);
}
@Override
public boolean userExist(User user){
return map.containsKey(user.getLoginName());
}
}
控制器
Home控制器
package com.hj.myapp.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value={"/", "/homepage"})
public class HomeController {
@RequestMapping(method=RequestMethod.GET)
public String home(){
return "home";
}
}
稍微复杂点的控制器
package com.hj.myapp.web;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.hj.myapp.dao.interfaces.UserDao;
import com.hj.myapp.entries.user.User;
@Controller
@RequestMapping(value="/user")
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping(value="/register")
public String showRegisterForm(Model model){
model.addAttribute(new User());
return "user/registerForm";
}
@RequestMapping(value="/register", method={RequestMethod.POST})
public String register(@Valid User user, Errors result){
if(result.hasErrors()){
return "user/registerForm";
}
userDao.save(user);
return "redirect:profile/" + user.getLoginName();
}
@RequestMapping("/profile/{loginName}")
public String profile(@PathVariable(value="loginName", required=true) String loginName, Model model){
User user = userDao.findByLoginName(loginName);
model.addAttribute("user", user);
return "user/profile";
}
}
视图
注册
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<!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=UTF-8">
<title>注册</title>
</head>
<body>
<h1 style="text-align: center">注册</h1>
<sf:form method="post" commandName="user">
<sf:errors element="div" path="*" />
<div style="width: 40%; text-align: center">
<table>
<tr>
<td>登录名</td>
<td><sf:input path="loginName"/></td>
</tr>
<tr>
<td>真实名</td>
<td><sf:input path="userName"/></td>
</tr>
<tr>
<td>地址</td>
<td><sf:textarea path="address" cols="5" rows="5"/> </td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册" /></td>
</tr>
</table>
</div>
</sf:form>
</body>
</html>
人个信息
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<title>用户信息</title>
</head>
<body>
<h1>用户信息</h1>
<p>登录名:${user.loginName}</p>
<p>真实名:${user.userName}</p>
<p>地址:${user.address}</p>
<a href="">用户列表</a>
</body>
</html>