在sprimgmvc3.0之后,它就全面支持
跟之前的版本一样,从那个项目拷贝
package cn.itcast.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Description:
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
@Controller //标识这个类是一个控制器
public class HomeController {
/*
* 1.处理业务
* 2.返回转向某个页面
*/
@RequestMapping("/home.action") //访问URL
public String goHome(HttpServletRequest request){
System.out.println(request.getRequestURI());
return "index"; //逻辑名称,经过视图解析器ViewResolver进行拼接找到转向的页面
}
}
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
完成一个内存数据库,了解springmvc前台怎样完成日常CRUD操作
它们分家
Spring负责管理service,dao;Springmvc负责controller
@Controller 标识类为Controller,无需继承任何的一个Controller
在controller中将一个集合给页面访问,Model对象,它是一个map,页面就可以按jstl方式来访问
@RequestMapping 设定用户敲入的URL
package cn.itcast.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import cn.itcast.domain.Person;
/**
* @Description: 业务层,它归spring
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
@Service
public class PersonService {
/*
* 模拟10条人员信息
*/
private static Map
private static Integer id = 0;
static{
for(int i=0;i<10;i++){
Person p = new Person();
p.setId(id++);
p.setName("tony"+i);
p.setAge(20+i);
personMap.put(i, p);
}
}
//获取所有记录
public List
return new ArrayList(personMap.values()); //将map集合放到ArrayList
}
//查询一条
public Person get(Integer id){
return personMap.get(id);
}
//新增
public void insert(Person p){
p.setId(id++); //设置id自增
personMap.put(p.getId(), p);
}
//修改
public void update(Person p){
personMap.put(p.getId(), p);
}
//删除一条
public void deleteById(Integer id){
personMap.remove(id);
}
//批量删除
public void delete(Integer[] ids){
for(Integer id : ids){
personMap.remove(id);
}
}
}
package cn.itcast.controller;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.itcast.domain.Person;
import cn.itcast.service.PersonService;
/**
* @Description:
* @Author: 传智播客 java学院 陈子枢
* @Company: http://java.itcast.cn
* @CreateDate: 2014年11月14日
*/
@Controller
public class PersonController {
@Resource
PersonService personService;
@RequestMapping("/person/listAll.action")
public String listAll(Map
List
//将返回的list集合要在页面中调用
model.put("personList", personList); //这个map,springmvc它在转向之前,setAttribute
return "person/jPersonList"; //转向列表页面
}
}
//转向新增页面
@RequestMapping("/person/tocreate.action")
public String tocreate(){
return "person/jPersonCreate";
}
//新增保存,返回列表
//从页面上获取参数,需要哪个参数,声明哪个参数,它会自动转类型
/*
* 现今流行开发范式,约定,在开发时,定了很多规矩;
* springmvc 通过页面提交request,request当中获取getParamter方法获得页面中的用户输入的内容。
* 它通过变量request中获得的这些参数,找转入的方法中有没有匹配的setXxx方法,例如页面中有一个name
* 找方法setName,将用户填写的内容设置进去,同时,springmvc能得到参数的类型,进行强转。
*/
@RequestMapping("/person/insert.action")
public String insert(Person p){
personService.insert(p);
return "redirect:/person/listAll.action";
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
//转向修改页面
@RequestMapping("/person/toupdate.action")
public String toupdate(Integer id, Model model){
Person p = personService.get(id);
//将p传递到修改页面
model.addAttribute("person", p);
return "person/jPersonUpdate";
}
//修改保存
@RequestMapping("/person/update.action")
public String update(Person p){
personService.update(p);
return "redirect:/person/listAll.action";
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
@RequestMapping("/person/deleteById.action")
public String deleteById(Integer id){
personService.deleteById(id);
return "redirect:/person/listAll.action";
}
Strut2当中,封装字符串类型,在页面有多个同名框,它将多个值,还是一个字符串,将多个值拼接成一个字符串,之间用,加空格分割。整形,浮点,日期类型;struts2对这几个类型,直接只留第一个值。改造model对象,变属性变成数组类型。
Springmvc封装跟struts一致,如果字符串类型,它直接用逗号分割。整形,浮点,日期类型;struts2对这几个类型,直接只留第一个值。可以直接声明成数组。
@RequestMapping("/person/delete.action")
public String delete(@RequestParam("id")Integer[] ids){
personService.delete(ids);
return "redirect:/person/listAll.action";
}
日期类型
Springmvc3.0之前,日期无需特殊处理,3.0之后版本要求必须自定义日期转换器
在页面提交时,springmvc封装时报错,提示400错误。
Springmvc标签
Struts2标签非常丰富,远远超过springmvc
文件上传