回顾什么是springmvc,它与spring有什么关系

springmvc属于spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架

参见<<springmvc与spring的关系.JPG>>

回顾springmvc工作流程

参见<< springmvc工作流.JPG>>

第十四章 springmvc快速入门(注解版本)

1)springmvc快速入门(传统版)

步一:创建springmvc-day02这么一个web应用

步二:导入springioc,springweb和springmvc相关的jar包

------------------------------------------------------springWEB模块

org.springframework.web-3.0.5.RELEASE.jar

org.springframework.web.servlet-3.0.5.RELEASE.jar(mvc专用)

------------------------------------------------------springIOC模块

org.springframework.asm-3.0.5.RELEASE.jar

org.springframework.beans-3.0.5.RELEASE.jar

org.springframework.context-3.0.5.RELEASE.jar

org.springframework.core-3.0.5.RELEASE.jar

org.springframework.expression-3.0.5.RELEASE.jar

步三:在/WEB-INF/下创建web.xml文件

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>*.action</url-pattern>

</servlet-mapping>

步四:创建HelloAction.java控制器类

@Controller

public class HelloAction{

@RequestMapping(value="/hello")

public String helloMethod(Model model) throws Exception{

System.out.println("HelloAction::helloMethod()");

model.addAttribute("message","这是我的第二个springmvc应用程序");

return "/success.jsp";

}

}

步五:在/WebRoot/下创建success.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>这是我的第二个springmvc应用程序</title>

</head>

<body>

success.jsp<br/>

${message}

</body>

</html>

步六:在/src/目录下创建spring.xml配置文件

<?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"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="

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

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

">

<!-- Action控制器 -->

<context:component-scan base-package="cn.itcast.javaee.springmvc.helloannotation"/>

<!-- 基于注解的映射器(可选) -->

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

<!-- 基于注解的适配器(可选) -->

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<!-- 视图解析器(可选) -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

</beans>

步七:部署web应用到tomcat中,通过浏览器访问如下URL:

http://127.0.0.1:8080/springmvc-day02/hello.action

第十五章一个Action中,可以写多个类似的业务控制方法

1)通过模块根路径 + 功能子路径 = 访问模块下子功能的路径

@Controller

@RequestMapping(value="/user")

public class UserAction{

@RequestMapping(value="/add")

public String add(Model model) throws Exception{

System.out.println("HelloAction::add()");

model.addAttribute("message","增加用户");

return "/success.jsp";

}

@RequestMapping(value="/find")

public String find(Model model) throws Exception{

System.out.println("HelloAction::find()");

model.addAttribute("message","查询用户");

return "/success.jsp";

}

}

增加用户:http://127.0.0.1:8080/myspringmvc-day02/user/add.action

查询用户:http://127.0.0.1:8080/myspringmvc-day02/user/find.action

第十六章在业务控制方法中写入普通变量收集参数

1)可以在业务控制方法中,以参数形式收集客户端参数,springmvc采用方法参数形式的

@Controller

@RequestMapping(value="/user")

public class UserAction{

@RequestMapping(value="/add")

public String add(Model model,int id,String name,Double sal) throws Exception{

System.out.println("HelloAction::add()");

System.out.println(id + ":" + name + ":" + sal);

model.addAttribute("message","增加用户");

return "/success.jsp";

}

}

http://127.0.0.1:8080/myspringmvc-day02/user/add.action?id=1&name=zhaojun&sal=5000

第十七章限定某个业务控制方法,只允许GETPOST请求方式访问

1)可以在业务控制方法前,指明该业务控制方法只能接收GET或POST的请求

@Controller

@RequestMapping(value="/user")

public class UserAction{

@RequestMapping(value="/add",method=RequestMethod.POST)

public String add(Model model,int id,String name,double sal) throws Exception{

System.out.println("HelloAction::add()::POST");

System.out.println(id + ":" + name + ":" + sal);

model.addAttribute("message","增加用户");

return "/success.jsp";

}

}

如果不书写method=RequestMethod.POST的话,GET和POST请求都支持

第十八章在业务控制方法中写入RequestResponse等传统web参数

1)可以在业务控制方法中书写传统web参数,这种方式我们不提倡,耦合了

@Controller

@RequestMapping(value="/user")

public class UserAction{

@RequestMapping(value="/add",method=RequestMethod.POST)

public void add(HttpServletRequest request,HttpServletResponse response) throws Exception{

System.out.println("HelloAction::add()::POST");

int id = Integer.parseInt(request.getParameter("id"));

String name = request.getParameter("name");

double sal = Double.parseDouble(request.getParameter("sal"));

System.out.println(id + ":" + name + ":" + sal);

request.getSession().setAttribute("id",id);

request.getSession().setAttribute("name",name);

request.getSession().setAttribute("sal",sal);

response.sendRedirect(request.getContextPath()+"/register.jsp");

}

}

第十九章在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

1)  在默认情况下,springmvc不能将String类型转成java.util.Date类型,所有我们只能在Action

中自定义类型转换器

<form action="${pageContext.request.contextPath}/user/add.action" method="POST">

编号:<input type="text" name="id" value="${id}"/><br/>

姓名:<input type="text" name="name" value="${name}"/><br/>

薪水:<input type="text" name="sal" value="${sal}"/><br/>

入职时间:<input type="text" name="hiredate" value='<fmt:formatDate value="${hiredate}" type="date"/>'/><br/>

<input type="submit" value="注册"/>

</form>

@Controller

@RequestMapping(value = "/user")

public class UserAction {

@InitBinder

protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {

binder.registerCustomEditor(

Date.class,

new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));

}

@RequestMapping(value = "/add", method = RequestMethod.POST)

public String add(int id, String name, double sal, Date hiredate,

Model model) throws Exception {

System.out.println("HelloAction::add()::POST");

model.addAttribute("id", id);

model.addAttribute("name", name);

model.addAttribute("sal", sal);

model.addAttribute("hiredate", hiredate);

return "/register.jsp";

}

}

第二十章在业务控制方法中写入UserAdmin多个模型收集参数

1)  可以在业务控制方法中书写1个模型来收集客户端的参数

2)  模型中的属性名必须和客户端参数名一一对应

3)  这里说的模型不是Model对象,Model是向视图中封装的数据

@Controller

@RequestMapping(value = "/user")

public class UserAction {

@InitBinder

protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {

binder.registerCustomEditor(

Date.class,

new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));

}

@RequestMapping(value = "/add", method = RequestMethod.POST)

public String add(User user,Model model) throws Exception {

System.out.println("HelloAction::add()::POST");

model.addAttribute("user",user);

return "/register.jsp";

}

}

第二十一章在业务控制方法中写入包装User的模型来收集参数

可以在业务控制方法中书写0个或多个模型来收集客户端的参数

1)  如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数

2)  用一个新的模型将User和Admin再封装一次

User.java

public class User {

private Integer id;

private String name;

private Double sal;

private Date hiredate;

public User(){}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Double getSal() {

return sal;

}

public void setSal(Double sal) {

this.sal = sal;

}

public Date getHiredate() {

return hiredate;

}

public void setHiredate(Date hiredate) {

this.hiredate = hiredate;

}

@Override

public String toString() {

return this.id + ":" + this.name + ":" + this.sal + ":" + this.hiredate;

}

}

Bean.java

public class Bean {

private User user;

private Admin admin;

public Bean(){}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public Admin getAdmin() {

return admin;

}

public void setAdmin(Admin admin) {

this.admin = admin;

}

}

PersonAction.java

@Controller

@RequestMapping(value = "/person")

public class PersonAction {

@InitBinder

protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {

binder.registerCustomEditor(

Date.class,

new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));

}

@RequestMapping(value = "/add", method = RequestMethod.POST)

public String add(Bean bean,Model model) throws Exception {

System.out.println(bean.getUser());

System.out.println(bean.getAdmin());

System.out.println("PersonAction::add()::POST");

model.addAttribute("bean",bean);

return "/register.jsp";

}

}

register.jsp

普通用户

<form action="${pageContext.request.contextPath}/person/add.action" method="POST">

编号:<input type="text" name="user.id" value="${bean.user.id}"/><br/>

姓名:<input type="text" name="user.name" value="${bean.user.name}"/><br/>

薪水:<input type="text" name="user.sal" value="${bean.user.sal}"/><br/>

入职时间:<input type="text" name="user.hiredate" value='<fmt:formatDate value="${bean.user.hiredate}" type="both" />'/><br/>

<input type="submit" value="注册"/>

</form>

第二十二章在业务控制方法中收集数组参数

批量删除用户

@Controller

@RequestMapping(value="/user")

public class UserAction {

@RequestMapping(value="/delete")

public String deleteMethod(int[] ids,Model model) throws Exception{

System.out.println("UserAction::deleteMethod()");

System.out.println("需要删除的id为:");

for(int id : ids){

System.out.print(id+" ");

}

model.addAttribute("message","批量删除成功");

return "/success.jsp";

}

}

第二十三章在业务控制方法中收集List<JavaBean>参数

批量注册用户

UserAction.java

@Controller

@RequestMapping(value="/user")

public class UserAction {

@RequestMapping(value="/addAll")

public String addAll(Bean bean,Model model) throws Exception{

for(User user : bean.getUserList()){

System.out.println(user.getName()+":"+user.getGender());

}

model.addAttribute("message","批量增加用户成功");

return "/success.jsp";

}

}

Bean.java

public class Bean {

private List<User> userList = new ArrayList<User>();

public Bean(){}

public List<User> getUserList() {

return userList;

}

public void setUserList(List<User> userList) {

this.userList = userList;

}

}

registerAll.java

<form action="${pageContext.request.contextPath}/user/addAll.action" method="POST">

姓名:<input type="text" name="userList[0].name" value="哈哈"/>

性别:<input type="text" name="userList[0].gender" value="男"/>

<hr/>

姓名:<input type="text" name="userList[1].name" value="呵呵"/>

性别:<input type="text" name="userList[1].gender" value="男"/>

<hr/>

姓名:<input type="text" name="userList[2].name" value="嘻嘻"/>

性别:<input type="text" name="userList[2].gender" value="女"/>

<hr/>

<input type="submit" value="批量注册"/>

</form>

第二十四章结果的转发和重定向

1)  在转发情况下,共享request域对象,会将参数从第一个业务控制方法传入第二个业务控制方法,

反之,重定向则不行

删除id=10号的用户,再查询用户

@Controller

@RequestMapping(value="/user")

public class UserAction {

@RequestMapping(value="/delete")

public String delete(int id) throws Exception{

System.out.println("删除用户->" + id);

//转发到find()

return "forward:/user/find.action";

//重定向到find()

//return "redirect:/user/find.action";

}

@RequestMapping(value="/find")

public String find(int id) throws Exception{

System.out.println("查询用户->" + id);

return "/success.jsp";

}

}

第二十五章异步发送表单数据到JavaBean,并响应JSON文本返回

1)  提交表单后,将JavaBean信息以JSON文本形式返回到浏览器

bean2json.jsp

<form>

编号:<input type="text" name="id" value="1"/><br/>

姓名:<input type="text" name="name" value="哈哈"/><br/>

薪水:<input type="text" name="sal" value="5000"/><br/>

<input type="button" value="异步提交注册"/>

</form>

<script type="text/javascript">

$(":button").click(function(){

var url = "${pageContext.request.contextPath}/user/add.action";

var sendData = {

"id":1,

"name":"哈哈",

"sal":5000

};

$.post(url,sendData,function(backData,textStatus,ajax){

alert(ajax.responseText);

});

});

</script>

User.java

public class User {

private Integer id;

private String name;

private Double sal;

public User(){}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Double getSal() {

return sal;

}

public void setSal(Double sal) {

this.sal = sal;

}

}

UserAction.java

@Controller

@RequestMapping(value="/user")

public class UserAction {

@RequestMapping(value="/add")

public @ResponseBody User add(User user) throws Exception{

System.out.println(user.getId()+":"+user.getName()+":"+user.getSal());

return user;

}

}

spring.xml

<!-- Action控制器 -->

<context:component-scan base-package="cn.itcast.javaee.springmvc.app25"/>

<!-- 配适器 -->

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

<list>

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

</list>

</property>

</bean>

第二十六章员工管理系统--查询员工

1)springmvc + spring + jdbc + oracle

31、springmvc(注解)的更多相关文章

  1. springMVC 注解版

    http://blog.csdn.net/liuxiit/article/details/5756115 http://blog.csdn.net/hantiannan/article/categor ...

  2. springMVC注解初步

    一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...

  3. SpringMVC注解开发初步

    一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...

  4. SpringMVC注解汇总(二)-请求映射规则

    接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...

  5. springMVC注解启用及优化

    使用注解的原因 最方便的还是启用注解 注解方便,而且项目中很流行. 配置文件尽量减少,主要使用注解方式. Springmvc的注解是在2.5版本后有了注解,如何开启注解配置文件 Web.xml文件中不 ...

  6. 6.SpringMVC注解启用

    SpringMVC注解可以帮助我们快速地注入 属性和参数 提高开发效率. 由于 有相当一部分人讨厌xml配置方式 注解可以覆盖 xml则不能 使用注解比xml规范化,因为很多注解都是java的规范的范 ...

  7. springMVC(注解版笔记)

    springMVC(注解版) 较之于非注解版本,发生一下变化: 1.配置文件需要配置的标签有: <!-- 包的扫描,此包下面的所有包都启用注解 --> <context:compon ...

  8. 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式

    腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式 某移动公司实时 ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

  10. SpringMVC注解HelloWorld

    今天整理一下SpringMVC注解 欢迎拍砖 @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是 ...

随机推荐

  1. [CareerCup] 15.4 Types of Join 各种交

    15.4 What are the different types of joins? Please explain how they differ and why certain types are ...

  2. HDU5831

    Rikka with Parenthesis II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  3. 中介者模式(Mediator)

    GOF:用一个中介对象来封装一系列的对象交互.中介者使对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 类图:

  4. FCM算法

    FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小.模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则 ...

  5. Windows2003中IIS的安全设置技巧

    在Windows Server 2003中对于IIS的安全设置具有十分重要的意义,所以掌握IIS安全设置的六大技巧是一个网管员必备的基本技能.下面就是对IIS的安全设置的六大技巧. 技巧1.安装系统补 ...

  6. ThinkPHP 3.2.3 自动加载公共函数文件的方法

    方法一.加载默认的公共函数文件 在 ThinkPHP 3.2.3 中,默认的公共函数文件位于公共模块 ./Application/Common 下,访问所有的模块之前都会首先加载公共模块下面的配置文件 ...

  7. 拒绝IE8-,CSS3 transform rotate旋转动画效果(支持IE9+/chrome/firefox)

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...

  8. [troubleshoot][archlinux][X] GPU HANG

    前言:如下内容已经是在hang完大概半个多月后了,当时想写,一直没过来写,写blog果然也是已经花费时间的事情. 最近一直在休假,电脑的使用频率也不多.后来还是为了生活,不情愿的去开始上班了,上班的第 ...

  9. Android百分比布局支持库介绍——com.android.support:percent(转)

    转载自http://www.apkbus.com/forum.php?mod=viewthread&tid=244752&extra=&_dsign=0b699c42 在此之前 ...

  10. ios开发xcode中设置代码块

    在开发中有很多重复的代码,很多开发者把常用的代码做成代码块提高开发效率. 在xcode里选中代码块的时候总是很不容易,点击选中的代码(文字),不要移动和松开鼠标左键,当竖线变成像拉长了的x(我也不知道 ...