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;
}

SpringMVC进阶的更多相关文章

  1. SpringMVC进阶(二)

    一.高级参数绑定 1.1. 绑定数组 Controller方法中可以用String[]接收,或者pojo的String[]属性接收.两种方式任选其一即可. /** * 包装类型 绑定数组类型,可以使用 ...

  2. SpringMVC 进阶

    请求限制 一些情况下我们可能需要对请求进行限制,比如仅允许POST,GET等... RequestMapping注解中提供了多个参数用于添加请求的限制条件 value 请求地址 path 请求地址 m ...

  3. SpringMVC 进阶版

    请求限制 一些情况下我们可能需要对请求进行限制,比如仅允许POST,GET等... RequestMapping注解中提供了多个参数用于添加请求的限制条件 value 请求地址 path 请求地址 m ...

  4. springmvc进阶(5):mvc:default-servlet-handler详解

    我们在配置dispatchServlet时配置<url-pattern>/</url-pattern>拦截所有请求,这时候dispatchServlet完全取代了default ...

  5. Spring注解开发系列VIII --- SpringMVC

    SpringMVC是三层架构中的控制层部分,有过JavaWEB开发经验的同学一定很熟悉它的使用了.这边有我之前整理的SpringMVC相关的链接: 1.SpringMVC入门 2.SpringMVC进 ...

  6. JavaEE目录

    第一章: Spring介绍 Spring项目搭建 Spring概念 第二章: Sprin配置详解 属性注入(构造方法注入,设值注入) 实例化(构造器(空参构造器),静态工厂,工厂方法) 装配(xml方 ...

  7. Spring+SpringMVC+MyBatis整合进阶篇(四)RESTful实战(前端代码修改)

    前言 前文<RESTful API实战笔记(接口设计及Java后端实现)>中介绍了RESTful中后端开发的实现,主要是接口地址修改和返回数据的格式及规范的修改,本文则简单介绍一下,RES ...

  8. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十一)redis密码设置、安全设置

    警惕 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作>主要是一个简单的介绍,针对redis ...

  9. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 一 每个阶段在结尾时都会有一个阶段总结,在<SSM整合基础篇& ...

随机推荐

  1. 推荐使用Wiz笔记发表博客

    一直用Wiz笔记,平时随手记录一些东西,可以自动在多台电脑同步,还支持移动客户端,上下班路上用手机也能看.最近在整理之前工作的一些资料,并把自己觉得可以分享的内容发到博客园上.当然会先在Wiz笔记上编 ...

  2. 剑指offer——变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳 ...

  3. POJ 2876 Cantoring Along

    Description The Cantor set was discovered by Georg Cantor. It is one of the simpler fractals. It is ...

  4. linux deepin-scrot 截图工具

    1.下载 .deb 安装包: 点击这里   (如果提示缺少依赖,去终端安装相应的依赖) 2. 设置快捷键Alt+Ctrl+A 1. 系统设置 -> 键盘设置 -> 自定义快捷键 -> ...

  5. Annotation

    Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target p.p1 { ...

  6. 深入对比数据科学工具箱:Python和R之争

    建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...

  7. Cheatsheet: 2016 01.01 ~ 01.31

    Mobile An Introduction to Cordova: Basics Web Angular 2 versus React: There Will Be Blood How to Bec ...

  8. mysql多表查询例子

    [理解方式]先分别找出每个表中查询出来的结果,然后再将两个结果合并. create database test charset utf8 collate utf8_bin;use test;creat ...

  9. jsp表格数据导出到Execl

    1.关于“下载” 需要设置页面header的一个属性为:Content-Disposition: attachment; filename=下载的文件.txt 如: <a href=" ...

  10. jquery总结05-常用事件05-触发事件

    触发事件 .trigger('click')触发浏览器事件,简写等于.click(),还同时支持自定义事件,并且可以传递参数 $('#elem').on('Aaron', function(event ...