springmvc笔记(二)

springmvc整合mybatis

为了更好的学习springmvc和mybatis整合开发的方法,需要将springmvc和mybatis进行整合。

整合目标:控制层采用springmvc、持久层使用mybatis实现。

需要的jar包

1.spring(包括springmvc)

2.mybatis

3.mybatis-spring整合包

4.数据库驱动

5.第三方连接池。

springmvc笔记(二)_第1张图片

整合思路

Dao层:

1.SqlMapConfig.xml,空文件即可,但是需要文件头。

2.applicationContext-dao.xml

3.数据库连接池

4.SqlSessionFactory对象,需要spring和mybatis整合包下的。

5.配置mapper文件扫描器。


Service层:

applicationContext-service.xml包扫描器,扫描@service注解的类。

applicationContext-trans.xml配置事务。


Controller层:

1.Springmvc.xml

2.包扫描器,扫描@Controller注解的类。

3.配置注解驱动

4.配置视图解析器


Web.xml文件:

1.配置spring

2.配置前端控制器。


创建动态web工程springmvc-web

复制jar包到/WEB-INF/lib中

工程自动加载jar包

创建资源文件夹config

在其下创建mybatis和spring文件夹,用来存放配置文件。


sqlMapConfig.xml

使用逆向工程来生成Mapper相关代码,不需要配置别名。

在config/mybatis下创建SqlMapConfig.xml

"1.0" encoding="UTF-8"?>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">


applicationContext-dao.xml

配置数据源、配置SqlSessionFactory、mapper扫描器。

springmvc笔记(二)_第2张图片
springmvc笔记(二)_第3张图片
springmvc笔记(二)_第4张图片

配置数据库相关信息

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/springmvc?characterEncoding=utf-8

jdbc.username=root

jdbc.password=root


applicationContext-service.xml

springmvc笔记(二)_第5张图片

applicationContext-trans.xml

springmvc笔记(二)_第6张图片
springmvc笔记(二)_第7张图片
springmvc笔记(二)_第8张图片

springmvc.xml

springmvc笔记(二)_第9张图片
springmvc笔记(二)_第10张图片

web.xml

"1.0" encoding="UTF-8"?>

"http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID" version="2.5">

springmvc-web

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp


contextConfigLocation

classpath:spring/applicationContext*.xml

org.springframework.web.context.ContextLoaderListener

springmvc-web

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring/springmvc.xml

springmvc-web

*.action


复制课前资料的itemList.jsp和itemEdit.jsp到工程中

配置完效果如下图:

springmvc笔记(二)_第11张图片


实现商品列表显示

使用逆向工程,生成代码

注意修改逆向工程的配置文件

ItemService接口

springmvc笔记(二)_第12张图片


ItemServiceImpl实现类

springmvc笔记(二)_第13张图片

ItemController

springmvc笔记(二)_第14张图片

访问url:

http://127.0.0.1:8080/springmvc-web/itemList.action

效果如下图:

springmvc笔记(二)_第15张图片


参数绑定

打开商品编辑页面,展示商品信息。

编辑商品信息,首先要显示商品详情

需要根据商品id查询商品信息,然后展示到页面。

请求的url:/itemEdit.action

参数:id(商品id)

响应结果:商品编辑页面,展示商品详细信息。

编写ItemService接口如下图:

springmvc笔记(二)_第16张图片

ItemServiceImpl实现类

@Override

public Item queryItemById(int id) {

Item item = this.itemMapper.selectByPrimaryKey(id);

return item;

}

ItemController

页面点击修改按钮,发起请求

http://127.0.0.1:8080/springmvc-web/itemEdit.action?id=1

需要从请求的参数中把请求的id取出来。

Id包含在Request对象中。可以从Request对象中取id。

想获得Request对象只需要在Controller方法的形参中添加一个参数即可。Springmvc框架会自动把Request对象传递给方法。

代码实现

springmvc笔记(二)_第17张图片

默认支持的参数类型

处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。

HttpServletRequest

通过request对象获取请求信息

HttpServletResponse

通过response处理响应信息

HttpSession

通过session对象得到session中存放的对象


Model/ModelMap

除了ModelAndView以外,还可以使用Model来向页面传递数据,

Model是一个接口,在参数里直接声明model即可。

如果使用Model则可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象则可以使用String返回值替代。

不管是Model还是ModelAndView,其本质都是使用Request对象向jsp传递数据。

代码实现:

springmvc笔记(二)_第18张图片

ModelMap是Model接口的实现类,也可以通过ModelMap向页面传递数据

使用Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap。

代码实现:

springmvc笔记(二)_第19张图片

绑定简单类型

当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。

这样,从Request取参数的方法就可以进一步简化。

@RequestMapping("/itemEdit")

public String queryItemById(int id, ModelMap model) {

// 根据id查询商品数据

Item item = this.itemService.queryItemById(id);

// 把商品数据放在模型中

model.addAttribute("item", item);

return "itemEdit";

}


参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

整形:Integer、int

字符串:String

单精度:Float、float

双精度:Double、double

布尔型:Boolean、boolean

说明:对于布尔类型的参数,请求的参数值为true或false。或者1或0

请求url:

http://localhost:8080/xxx.action?id=2&status=false

处理器方法:

public String editItem(Model model,Integer id,Boolean status)

@RequestParam

使用@RequestParam常用于处理简单类型的绑定。

value:参数名字,即入参的请求参数名字,如value=“itemId”表示请求的参数 区中的名字为itemId的参数的值将传入

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错

TTP Status 400 - Required Integer parameter 'XXXX' is not present

defaultValue:默认值,表示如果请求中没有同名参数时的默认值

定义如下:

springmvc笔记(二)_第20张图片

�在web.xml中加入:

encoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

encoding

/*

以上可以解决post请求乱码问题。

对于get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:

另外一种方法对参数进行重新编码:

String userName new

String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

springmvc与struts2不同

1.springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。

2.springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

3.Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用jstl。

你可能感兴趣的:(springmvc笔记(二))