SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-006-处理表单数据(注册、显示用户资料)
2024-10-18 18:13:36
一、显示注册表单
1.访问资源
@Test
public void shouldShowRegistration() throws Exception {
SpitterRepository mockRepository = mock(SpitterRepository.class);
SpitterController controller = new SpitterController(mockRepository);
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/spitter/register"))
.andExpect(view().name("registerForm"));
}
2.Controller
package spittr.web; import static org.springframework.web.bind.annotation.RequestMethod.*; 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 spittr.Spitter;
import spittr.data.SpitterRepository; @Controller
@RequestMapping("/spitter")
public class SpitterController { private SpitterRepository spitterRepository; @Autowired
public SpitterController(SpitterRepository spitterRepository) {
this.spitterRepository = spitterRepository;
} @RequestMapping(value="/register", method=GET)
public String showRegistrationForm() {
return "registerForm";
} @RequestMapping(value="/register", method=POST)
public String processRegistration(
@Valid Spitter spitter,
Errors errors) {
if (errors.hasErrors()) {
return "registerForm";
} spitterRepository.save(spitter);
return "redirect:/spitter/" + spitter.getUsername();
} @RequestMapping(value="/{username}", method=GET)
public String showSpitterProfile(@PathVariable String username, Model model) {
Spitter spitter = spitterRepository.findByUsername(username);
model.addAttribute(spitter);
return "profile";
} }
3.view
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet" type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Register</h1> <form method="POST">
First Name: <input type="text" name="firstName" /><br/>
Last Name: <input type="text" name="lastName" /><br/>
Email: <input type="email" name="email" /><br/>
Username: <input type="text" name="username" /><br/>
Password: <input type="password" name="password" /><br/>
<input type="submit" value="Register" />
</form>
</body>
</html>
二、处理注册
1.测试处理注册
@Test
public void shouldProcessRegistration() throws Exception {
SpitterRepository mockRepository = mock(SpitterRepository.class);
Spitter unsaved = new Spitter("jbauer", "24hours", "Jack", "Bauer", "jbauer@ctu.gov");
Spitter saved = new Spitter(24L, "jbauer", "24hours", "Jack", "Bauer", "jbauer@ctu.gov");
when(mockRepository.save(unsaved)).thenReturn(saved); SpitterController controller = new SpitterController(mockRepository);
MockMvc mockMvc = standaloneSetup(controller).build(); mockMvc.perform(post("/spitter/register")
.param("firstName", "Jack")
.param("lastName", "Bauer")
.param("username", "jbauer")
.param("password", "24hours")
.param("email", "jbauer@ctu.gov"))
.andExpect(redirectedUrl("/spitter/jbauer")); verify(mockRepository, atLeastOnce()).save(unsaved);
}
2.Controller参考上面
3.view: return "redirect:/spitter/" + spitter.getUsername();
4.Dao
package spittr.data; import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; import spittr.Spitter; @Repository
public class JdbcSpitterRepository implements SpitterRepository { private JdbcOperations jdbc; @Autowired
public JdbcSpitterRepository(JdbcOperations jdbc) {
this.jdbc = jdbc;
} public Spitter save(Spitter spitter) {
jdbc.update(
"insert into Spitter (username, password, first_name, last_name, email)" +
" values (?, ?, ?, ?, ?)",
spitter.getUsername(),
spitter.getPassword(),
spitter.getFirstName(),
spitter.getLastName(),
spitter.getEmail());
return spitter; // TODO: Determine value for id
} public Spitter findByUsername(String username) {
return jdbc.queryForObject(
"select id, username, null, first_name, last_name, email from Spitter where username=?",
new SpitterRowMapper(),
username);
} private static class SpitterRowMapper implements RowMapper<Spitter> {
public Spitter mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Spitter(
rs.getLong("id"),
rs.getString("username"),
null,
rs.getString("first_name"),
rs.getString("last_name"),
rs.getString("email"));
}
} }
二、显示某个用户的资料
1.测试:http://localhost:8080/SpringInAction4_Chapter5_SpringMVC01/spitter/eminem
2.controller写在上面
3.view
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet" type="text/css" href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Your Profile</h1>
<c:out value="${spitter.username}" /><br/>
<c:out value="${spitter.firstName}" /> <c:out value="${spitter.lastName}" /><br/>
<c:out value="${spitter.email}" />
</body>
</html>
最新文章
- Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]
- Sqli-LABS通关笔录-18-审计SQL注入2-HTTP头注入
- How Tomcat works — 八、tomcat中的session管理
- Xcode 中关于";#";的小知识
- 简单的python http接口自动化脚本
- repo sync 时的自动续接脚本[转]
- MySql5.1在Win7下的安装与重装问题的解决
- Nutch搜索引擎Solr简介及安装
- MOS管常识
- JAVA----线程初级
- 【SDOI2017】天才黑客
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]
- 转 ssh-keygen 的 详解
- 利用Fiddler和Wireshark解密SSL加密流量
- dhroid - ioc基础(@Inject*)
- [luogu2312] 解方程
- apache 伪静态 .htaccess
- poi 读取数据处理方式
- .NET、NET Framewor以及.NET Core的关系(二)
- Rabbitmq消息队列(四) 发布订阅
热门文章
- ASP伪静态页面(不需要通过iis+ISAPI_Rewrite)
- hibernate--could not initialize proxy - no Session--懒加载问题
- 转载---SQL Server XML基础学习之<;6>;--XQuery的 value() 方法、 exist() 方法 和 nodes() 方法
- Exam 70-462 Administering Microsoft SQL Server 2012 Databases 复习帖
- NOPI读取EXCEL
- vue防止闪烁
- 性能更好的js动画实现方式——requestAnimationFrame
- 12_ServletConfig对象
- VMware10.0.4下 CentOS 6.5 cmake安装 MySQL 5.5.32
- osi七层模型和两主机传输过程: