SpringMVC实例:制作一个人员列表

目标:制作一个人员列表,可通过人员的id进行修改。

界面1:

界面2:

界面3:

一.利用myEclipse导入spring的特性后,让applicationContext.xml在WebRoot下。

二.过程:

1.建立index.jsp界面,使用jstl注解。(知识点C标签)

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>My JSP ‘index.jsp‘ starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18   </head>
19
20   <body>
21       <h2>Adobocode : 世界你好</h2>
22      <br/>
23      <a href="<c:url value="personDisplay.htm"/>">人员列表</a>
24   </body>
25 </html>

2.在web.xml配置分发器,走htm后缀的方法

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5"
 3     xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7
 8   <servlet>
 9       <servlet-name>springMVC</servlet-name>
10       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
11       <load-on-startup>1</load-on-startup>
12   </servlet>
13
14   <servlet-mapping>
15       <servlet-name>springMVC</servlet-name>
16       <url-pattern>*.htm</url-pattern>
17   </servlet-mapping>
18
19   <welcome-file-list>
20     <welcome-file>index.jsp</welcome-file>
21   </welcome-file-list>
22 </web-app>

3.配置springMVC-servlet.xml:第一次搭建时,报404错误,原来是下面这一行配置有误,prefix为路径的前缀,要扫描的view层是放在jsp文件下的,所以是value为/jsp/,只要路径弄错了就会报404.

<property name="prefix"><value>/jsp/</value></property>
 1 <?xml version="1.0" encoding="UTF-8"?>
 2
 3 <beans xmlns="http://www.springframework.org/schema/beans"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="
 7 http://www.springframework.org/schema/beans
 8 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
11      <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
12      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
13      <context:component-scan base-package="paul.sydney.controller"/>
14      <context:component-scan base-package="paul.sydney.service"/>
15      <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">           <!-- 视图解释类:将在Controller返回的ModelAndView的基础上,加上目录前缀/WEB-INF/jsp/, 加后文件名称后缀.jsp,由此等待下个页面 -->
16          <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
17          <property name="prefix"><value>/jsp/</value></property>
18          <property name="suffix"><value>.jsp</value></property>
19      </bean>
20 </beans>

DispatcherServlet默认在/WEB-INF/中查找<servlet-name>-servlet.xml,使用该配置文件初始化DispatcherServlet上下文对应的子spring容器,spring mvc3可以在-servlet.xml,自动扫描各个包,在此扫描controller/service两个包,返回视图层:jsp文件夹下面的.jsp后缀文件。有篇很好的介绍:http://www.open-open.com/lib/view/open1402751642806.html

4.model层,bean

 1 package paul.sydney.model;
 2
 3 public class Person {
 4     private int id;
 5     private String name;
 6     private int age;
 7     private String address;
 8
 9     public int getId() {
10         return id;
11     }
12
13     public void setId(int id) {
14         this.id = id;
15     }
16
17     public String getName() {
18         return name;
19     }
20
21     public void setName(String name) {
22         this.name = name;
23     }
24
25     public int getAge() {
26         return age;
27     }
28
29     public void setAge(int age) {
30         this.age = age;
31     }
32
33     public String getAddress() {
34         return address;
35     }
36
37     public void setAddress(String address) {
38         this.address = address;
39     }
40
41     @Override
42     public String toString() {
43         StringBuilder sb = new StringBuilder();
44         sb.append("\nname:" + this.name);
45         sb.append("\nage:" + this.age);
46         sb.append("\naddress:" + this.address);
47
48         return sb.toString();
49
50     }
51 }

5.servlet层,这里使用一些伪造的数据

 1 package paul.sydney.service;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import org.springframework.stereotype.Service;
 7
 8 import paul.sydney.model.Person;
 9
10 @Service
11 public class DummyService {
12     public List<Person> getDummyList() {
13         System.err.println("111111");
14         List<Person> list = new ArrayList<Person>();
15         Person p1 = new Person();
16         p1.setId(123);
17         p1.setName("ami");
18         p1.setAge(23);
19         p1.setAddress("Nzland");
20         Person p2 = new Person();
21         p2.setId(321);
22         p2.setName("heha");
23         p2.setAge(21);
24         p2.setAddress("England");
25         list.add(p1);
26         list.add(p2);
27
28         return list;
29     }
30     public Person retrievePerson(int id) {
31         System.err.println("123456");
32         Person person = new Person();
33         person.setId(56789);
34         person.setName("Nikki");
35         person.setAge(63);
36         person.setAddress("Dalaguete, Cebu");
37         return person;
38     }
39
40      public void savePerson(Person person) {
41             System.out.println("\n\nSaving" + person);
42         }
43 }

6.controller层,有两个控制器:

数据的获取:

 1 package paul.sydney.controller;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.ui.ModelMap;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7
 8 import paul.sydney.service.DummyService;
 9
10 @Controller
11 public class PersonDisplay {
12
13     private final DummyService dummyService;
14
15     @Autowired
16     public PersonDisplay(DummyService dummyService) {
17
18         this.dummyService = dummyService;
19     }
20
21     @RequestMapping("/personDisplay.htm")
22     public ModelMap defaultHandler() {
23         return new ModelMap("personList", this.dummyService.getDummyList());
24     }
25 }

index.jsp的地址映射/personDisplay.htm,将从数据层找到的数据存储在ModelMap内,类似kv的数据结构。

点击id,进入数据的form:

 1 package paul.sydney.controller;
 2
 3 import javax.net.ssl.SSLEngineResult.Status;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.ui.ModelMap;
 8 import org.springframework.validation.BindingResult;
 9 import org.springframework.web.bind.annotation.ModelAttribute;
10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RequestMethod;
12 import org.springframework.web.bind.annotation.RequestParam;
13 import org.springframework.web.bind.annotation.SessionAttributes;
14 import org.springframework.web.bind.support.SessionStatus;
15
16 import paul.sydney.model.Person;
17 import paul.sydney.service.DummyService;
18
19
20 @Controller
21 @RequestMapping("/personForm.htm")
22 @SessionAttributes("person")
23 public class PersonForm {
24
25     private final DummyService dummyService;
26
27     @Autowired
28     public PersonForm(DummyService dummyService) {
29         this.dummyService = dummyService;
30     }
31
32     @RequestMapping(method = RequestMethod.GET)
33     public String setupForm(@RequestParam("personId") int id, ModelMap model) { //用requestparam绑定personId这个url值,赋给id
34         Person person = this.dummyService.retrievePerson(id);
35         model.addAttribute("person", person);
36         return "personForm";
37     }
38
39     @RequestMapping(method = RequestMethod.POST)
40     public String processSubmit(@ModelAttribute("person") Person person,
41             BindingResult result, SessionStatus status) {
42         System.err.println("redirect");
43         this.dummyService.savePerson(person);
44         status.setComplete();
45         return "redirect:personDisplay.htm";
46     }
47 }

7.在WebRoot下建jsp文件夹:建两个jsp文件:personDisplay.jsp personForm.jsp

personDisplay.jsp

 1 <%@ page language="java" session="false"
 2     contentType="text/html; charset=UTF-8"%>
 3
 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 5
 6 <jsp:useBean id="personList" scope="request"
 7     type="java.util.List<paul.sydney.model.Person>" />
 8 <html>
 9     <head>
10         <title>Adobocode : Sample Spring MVC using JSTL iteration</title>
11     </head>
12     <body>
13         <h2>
14             &nbsp; Adobocode : Person List 明明用了JSTL啊!
15         </h2>
16         <table border="1">
17             <tr>
18                 <th>
19                     Id
20                 </th>
21                 <th>
22                     Name
23                 </th>
24                 <th>
25                     Age
26                 </th>
27                 <th>
28                     Address
29                 </th>
30             </tr>
31             <c:forEach var="p" items="${personList}">
32                 <tr>
33                     <td>
34                         <c:url var="editUrl" value="personForm.htm">
35                             <c:param name="personId" value="${p.id}" />
36                         </c:url>
37                         <a href=‘<c:out value="${editUrl}"/>‘>${p.id}</a>
38                     </td>
39                     <td>
40                         ${p.name}
41                     </td>
42                     <td>
43                         ${p.age}
44                     </td>
45                     <td>
46                         ${p.address}
47                     </td>
48                 </tr>
49             </c:forEach>
50         </table>
51     </body>
52 </html>

personForm.jsp

 1 <%@ page language="java" session="false"
 2     contentType="text/html; charset=UTF-8"%>
 3 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
 4 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
 5 <html>
 6     <head>
 7         <title>Adobocode : Sample Spring MVC using Forms</title>
 8     </head>
 9
10     <body>
11         <h2>
12             Adobocode : Person Form
13         </h2>
14         <form:form modelAttribute="person">
15             <form:hidden path="id" />
16             <fieldset>
17                 <table>
18                     <tr>
19                         <td>
20                             Name名字!
21                         </td>
22                         <td>
23                             <form:input path="name" />
24                         </td>
25                     </tr>
26                     <tr>
27                         <td>
28                             Age年龄!
29                         </td>
30                         <td>
31                             <form:input path="age" />
32                         </td>
33                     </tr>
34                     <tr>
35                         <td>
36                             Address地址!
37                         </td>
38                         <td>
39                             <form:input path="address" />
40                         </td>
41                     </tr>
42                     <tr>
43                         <td>
44                             咆哮体!!!
45                         </td>
46                         <td>
47                             <input type="submit" id="save" name="_eventId_save" value="Save" />
48                             <input type="submit" onClick="history.go(-1);"
49                                 name="_eventId_cancel" value="Cancel" />
50                         </td>
51                     </tr>
52                 </table>
53             </fieldset>
54         </form:form>
55     </body>
56 </html>

8.部署在tomcat下运行。

时间: 2024-10-12 04:08:19

SpringMVC实例:制作一个人员列表的相关文章

[译]实例剖析-如何制作一个牛B的融资PPT

一些好公司明明在模式上富有创新性,但却在 pitch 时很保守,而且他们又不缺设计和开发能力.如何设计你的融资演讲稿才会吸引投资人对你投资?投资人 Daniel Eckler给大家贡献了下面这篇技术贴. 记住一个精心设计的融资演讲稿和你的产品一样重要,它有助于提高你演讲效果,让你的表述变得更加清晰.和面试相比,戴领带和系纽扣不会让你得到这份工作,但它可以为你塑造一个良好的形象. 以我为新公司Mylo设计的演讲稿为研究案例,我将向你展示如何设计一个吸引人的融资演讲稿. 快速思考:Don'ts 和

用Phaser来制作一个html5游戏——flappy bird (一)

Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希望大家看后也能做出自己的html5游戏.大家可以先点击这里来试玩一下我已经做好的这个游戏,感受一下Phaser的游戏效果,游戏的完整代码我已经放到github上了.支持的浏览器:IE9+.Firefox.Chrome.Opera.Safari以及移动端的能支持html5的浏览器,推荐使用谷歌浏览器,

使用CocosSharp制作一个游戏 - CocosSharp中文教程

注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了GoneBananas项目代码后,对本教程进行了部分修改,但当前只涉及Android方面,iOS因没有环境验证代码,暂未修改. 本人博客地址:http://fengyu.name 原文链接:http://fengyu.name/?cat=game&id=295 相关资源: 离线PDF文档:Downloa

使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器

使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器 品高工作流 的流程模拟器中使用了一个具有语法高亮和折叠功能的XML编辑器,其核心就是用了SharpDevelop中的ICSharpCode.TextEditor控件,如下图所示: 序 SharpDevelop的源代码中有一个功能丰富,支持语法高亮,代码折叠的文本编辑器控件(位置:\SharpDevelop\src\Libraries\ICSharpCode.TextEditor).本文附件的Demo工程中将演示如

用JS制作一个信息管理平台完整版

  前  言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容.   1.JSON的基础知识 1.1  什么是JSON JSON是数据交互中,最常用的一种数据格式. 由于各种语言的语法都不相同,在传递数据时,可以将自己语言中的数组.对象等转换为JSON字符串. 传递之后,可以将JSON字符串,再解析为JSON对象. JSON对象的使用与JS中的对象基本相同,唯一需要区别的是,JSON中的键

制作一个可以滑动操作的 Table View Cell

Apple 通过 iOS 7 的邮件(Mail)应用介绍了一种新的用户界面方案——向左滑动以显示一个有着多个操作的菜单.本教程将会向你展示如何制作一个这样的 Table View Cell,而不用因嵌套的 Scroll View 陷入困境.如果你还不知道一个可滑动的 Table View Cell 意味着什么,那么看看 Apple 的邮件应用: 可能你会想,既然 Apple 展示了这种方案,那它应该已将其开放给开发者使用了.毕竟,这能有多难呢?但不幸的是,他们只让开发者使用 Delete 按钮—

IT兄弟连 HTML5教程 HTML5的基本语法 简单HTML实例制作

现在学习HTML5的方式 目前HTML还处于HTML4与HTML5之间的过渡使用阶段.移动端的Web界面开发已经全面使用HTML5的技术,而在PC端由于用户升级浏览器周期较长,面临着页面的兼容性问题,以及开发人员对HTML5新技术需要一段时间了解和熟练,所以学习HTML必须兼顾这两个版本.可以按版本升级的方式,先学习HTML4的技术,再延伸学习HTML5新增加的内容.而HTML是一个不断变化的标准,不管是哪个版本都属于HTML技术,所以本书直接学习HTML5的标准,当然遇到与HTML4变化较大的

国内及Github优秀开发人员列表

自从入了Android软件开发的行道,解决问题和学习过程中免不了会参考别人的思路,浏览博文和门户网站成了最大的入口.下面这些列表取名为:国内及Github优秀开发人员列表,就是浏览后的成果. 虽然下述列表出自Android软件开发,文章定为不断更新并涉及更多领域. 谓之优秀,唯坚持也. 1. _区长 专注Android开发,专栏有:Android React Native/Android中的设计模式/Android开发最佳实践/Android ORM/Android插件化开发 https://g

Android学习笔记(十二)——实战:制作一个聊天界面

//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Patch图片是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而哪些区域不可以.一般用来作为聊天信息的背景.在此我们先准备一张png图片.然后在 Android sdk 目录下有一个 tools 文件夹,在这个文件夹中找到 draw9patch.bat文件. 双击打开之后, 在导航栏点击 File→