• 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("
    name:" + this.name);
    45         sb.append("
    age:" + this.age);
    46         sb.append("
    address:" + 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("
    
    Saving" + 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下运行。

  • 相关阅读:
    Linux网络编程系列-TCP传输控制
    Lucene系列-索引文件
    python Web开发框架-Django (1)
    安卓课本例子-01-使用XML布局文件控制用户界面
    javaEE--数据库01
    安卓-08-布局管理器
    安卓-07-开发自定义的View--实践-跟随手指移动的小兔子
    安卓-06-使用XML和Java设置UI--实例--03--QQ相册
    安卓-05-使用Java设置UI--实验02-使用Java实现UI设置
    安卓-04-实例01-XML布局UI界面
  • 原文地址:https://www.cnblogs.com/romanhzzz/p/4411599.html
Copyright © 2020-2023  润新知