1.springmvc(注解版本)
注解扫描
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!--让spring容器去扫描注释--> <context:component-scan base-package="com.juaner.app14"/> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
Action类
@Controller public class HelloAction { public HelloAction(){ System.out.println(this .hashCode() ); } @RequestMapping(value = "/hello.action") public String hello(Model model)throws Exception{ System.out.println("hello"); model.addAttribute("message","this is the first...."); return "success"; } @RequestMapping(value = "/bye.action") public String bye(Model model)throws Exception{ System.out.println("bye"); model.addAttribute("message","bye"); return "success"; } }
2.一个Action中,写多个类似的业务控制方法
@Controller @RequestMapping(value="/user") public class UserAction { @RequestMapping(value = "/register") public String register(Model model)throws Exception{ model.addAttribute("message","注册成功"); return "/jsp/success.jsp"; } @RequestMapping(value = "/login") public String login(Model model)throws Exception{ model.addAttribute("message","登录成功"); return "/jsp/success.jsp"; } }
3.在业务控制方法中写入普通变量收集参数,限定某个业务控制方法,只允许GET或POST请求方式访问
@Controller @RequestMapping(value="/user") public class UserAction { @RequestMapping(method= RequestMethod.POST,value = "/register") public String register(Model model,String username,double salary)throws Exception{ System.out.println(username+salary); model.addAttribute("message","注册成功"); return "/jsp/success.jsp"; } @RequestMapping(value = "/login", method= {RequestMethod.POST,RequestMethod.GET}) public String login(Model model,String username,double salary)throws Exception{ System.out.println(username+salary); model.addAttribute("message","登录成功"); return "/jsp/success.jsp"; } }
4.在业务控制方法中写入HttpServletRequest,HttpServletResponse,Model等传统web参数
@Controller @RequestMapping(value="/user") public class UserAction { @RequestMapping(method= RequestMethod.POST,value = "/register" ) public void register(HttpServletRequest request, HttpServletResponse response)throws Exception{ String username = request.getParameter("username"); String salary = request.getParameter("salary"); System.out.println(username+salary); request.setAttribute("message","转发参数"); // response.sendRedirect(request.getContextPath()+"/jsp/success.jsp"); request.getRequestDispatcher("/jsp/success.jsp").forward(request,response); } }
5.在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型
jsp中的元素name属性不用加user.前缀
@Controller @RequestMapping(value="/user") public class UserAction { @InitBinder protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //向springmvc中注册一个自定义的类型转换器 //参数一:将string转成什么类型的字节码 //参数二:自定义转换规则 binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); } @RequestMapping(method= RequestMethod.POST,value = "/register" ) public String register(User user, Model model)throws Exception{ System.out.println("用户注册"); model.addAttribute("user",user); System.out.println(new Timestamp(user.getHiredate().getTime())); return "/jsp/success.jsp"; } }
在业务控制方法中写入User,Admin多个模型收集参数,需要更大的模型包装User,Admin
6.在业务控制方法中收集数组参数
@Controller @RequestMapping(value = "/emp") public class EmpAction { @RequestMapping(value = "/deleteAll",method = RequestMethod.POST) public String deleteAll(Model model,int[] id)throws Exception{ for(int i:id) { System.out.println(i); } model.addAttribute("message","批量删除员工成功"); return "/jsp/success.jsp"; } }
jsp
<form action="${pageContext.request.contextPath}/emp/deleteAll.action" method="post"> <table> <tr><th> 编号 </th><th> 姓名 </th></tr> <tr> <td> <input type="checkbox" name="id" value="1123"> </td> <td>哈哈</td> </tr> <tr> <td> <input type="checkbox" name="id" value="2123"> </td> <td>嘻嘻</td> </tr> <tr> <td> <input type="checkbox" name="id" value="3"> </td> <td>呵呵</td> </tr> <tr> <td colspan="2"> <input type="submit" value="提交"> </td> </tr> </table> </form>
7.在业务控制方法中收集List<JavaBean>参数
bean
public class Bean { private List<Emp> empList = new ArrayList<Emp>(); public Bean(){} public List<Emp> getEmpList() { return empList; } public void setEmpList(List<Emp> empList) { this.empList = empList; } }
action
@Controller @RequestMapping(value = "/emp") public class EmpAction { @RequestMapping(value = "/addAll",method = RequestMethod.POST) public String addAll(Model model,Bean bean)throws Exception{ for(Emp emp:bean.getEmpList()) { System.out.println(emp); } model.addAttribute("message","批量添加员工成功"); return "/jsp/success.jsp"; } }
jsp
<form action="${pageContext.request.contextPath}/emp/addAll.action" method="post"> <table> <tr> <td><input name="empList[0].username" type="text" value="哈哈"></td> <td><input name="empList[0].salary" type="text" value="6000"></td> </tr> <tr> <td><input name="empList[1].username" type="text" value="呵呵"></td> <td><input name="empList[1].salary" type="text" value="7000"></td> </tr> <tr> <td><input name="empList[2].username" type="text" value="嘻嘻"></td> <td><input name="empList[2].salary" type="text" value="8000"></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="注册"></td> </tr> </table> </form>
8.结果的转发和重定向
@Controller @RequestMapping(value="/emp") public class EmpAction { @RequestMapping(value="/find") public String findEmpById(int id,Model model) throws Exception{ System.out.println("查询"+id+"号员工信息"); //转发到EmpAction的另一个方法中去,即再次发送请求 return "forward:/emp/update.action"; //重定向到EmpAction的另一个方法中去,即再次发送请求 //return "redirect:/emp/update.action?id=" + id; } @RequestMapping(value="/update") public String updateEmpById(int id,Model model) throws Exception{ System.out.println("更新" + id +"号员工信息"); model.addAttribute("message","更新员工信息成功"); return "/jsp/ok.jsp"; } }
9.异步发送表单数据到JavaBean,并响应JSON文本返回
1.导入包jackson-core-asl-1.9.11、jackson-mapper-asl-1.9.11
2.配置json转换器
<!--json转换器--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> </bean>
3.方法名中加注解
/** * @ResponseBody Emp 表示让springmvc将Emp对象转成json文本 */ @RequestMapping(value="/bean2json") public @ResponseBody Emp bean2json() throws Exception{ //创建Emp对象 Emp emp = new Emp(); emp.setId(1); emp.setUsername("哈哈"); emp.setSalary(7000D); emp.setHiredate(new Date()); return emp; } @RequestMapping(value="/listbean2json") public @ResponseBody List<Emp> listbean2json() throws Exception{ //创建List对象 List<Emp> empList = new ArrayList<Emp>(); //向List对象中添加三个Emp对象 empList.add(new Emp(1,"哈哈",7000D,new Date())); empList.add(new Emp(2,"呵呵",8000D,new Date())); empList.add(new Emp(3,"嘻嘻",9000D,new Date())); //返回需要转JSON文本的对象 return empList; } @RequestMapping(value="/map2json") public @ResponseBody Map<String,Object> map2json() throws Exception{ //创建List对象 List<Emp> empList = new ArrayList<Emp>(); //向List对象中添加三个Emp对象 empList.add(new Emp(1,"哈哈",7000D,new Date())); empList.add(new Emp(2,"呵呵",8000D,new Date())); empList.add(new Emp(3,"嘻嘻",9000D,new Date())); //创建Map对象 Map<String,Object> map = new LinkedHashMap<String,Object>(); //向Map对象中绑定二个变量 map.put("total",empList.size()); map.put("rows",empList); //返回需要转JSON文本的对象 return map; }