SpringMVC框架
1.学习SpringMVC前言
[1]目前学习的知识
Mybatis-------解决sql语句和java代码块之间的耦合----优化了dao层
spring-----解决业务层和其他各层之间的耦合-----优化了service层
springMVC-----解决java代码和servlet之间的耦合------优化了controlller层
[2]为什么学习springMVC?
现在遇到的问题:
A、我们发现,每当后台发送一个请求,就对应后台一个servlet。如果用户有100个请求,就需要为用户书写100个servlet。
B、使用现在的servlet进行页面的数据接受时,我们发现相当的麻烦。有多少个参数,就要写多少条req.getParamater("")语句。
C、我们书写的java代码和servlet之间耦合度太高。
[3]解决方案
springMVC
springmvc就是对servlet进行的封装,实现了java代码个servlet之间的解耦。
[4]springMVC的概念
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
类似框架:Struts 2、JFinal
2.SpringMVC的框架搭建
[1]导包
[2]配置web.xml文件
<servlet>
<servlet-name>mvc</servlet-name>
<!-- 在spring-webmvc jar包下-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<!-- /表示出了jsp外的所有请求资源-->
<url-pattern>/</url-pattern>
</servlet-mapping>
[3]配置扫描文件
<!--扫描注解@Controller("abc")-->
<context:component-scan base-package="cn.qt.controller"></context:component-scan>
<!--扫描@RequestMapping-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源的放行-->
<!-- mapping:指代的是网络的地址 location:指代的是方行本地的什么资源 -->
<mvc:resources mapping="/img/**" location="/img/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
[4]书写自己的单元控制方法
package cn.qt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping("abc")
public String demo1(){
//接受页面数据
//处理数据
System.out.println("进入了demo");
//做出响应
//转发到名为index.jsp的文件
return "index.jsp";
}
}
3.SpringMVC进行参数接收
前端页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户注册</title>
</head>
<body>
<form action="demo04" method="post">
<p>
姓名:<input type="text" name="name" />
</p>
<p>
密码:<input type="text" name="pwd" />
</p>
<p>
年龄:<input type="text" name="age" />
</p>
<p>
爱好:
吃:<input type="checkbox" name="hobby" value="chi" />
喝:<input type="checkbox" name="hobby" value="he" />
睡:<input type="checkbox" name="hobby" value="shui" />
</p>
<p>
生日:<input type="text" name="birth"/>
</p>
<p>
<input type="submit" value="提交" />
</p>
<a href="demo05/sxt/987">get方式访问demo5</a>
</form>
</body>
</html>
[1]方式一
/*
* 参数获得方式一:
* String name = request.getParameter("name");
* 注意:我们需要的内置对象可以当做参数进行传递过来直接使用
* */
@RequestMapping("demo01")
public String demo1(HttpServletRequest request){
//接受页面信息
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
//处理数据
System.out.println(name+"---"+pwd);
//做出响应
return "success.jsp";
}
[2]方式二
/*
* 获取参数方式二:
* 注意:使用这种方式进行数据接受时,需要保证形参名和前台form表单name的值必须一致
* 400:数据类型转化处理错误!!!
* */
@RequestMapping("demo02")
public String demo02(String name,String pwd,int age){
System.out.println(name+"--"+pwd+"--"+age);
return "success.jsp";
}
[3]方式三
/*
* 获取参数方式三:
* 参数可以直接使用参数进行接收
* 使用对象进行接收参数时需要注意:
* 表单中的name属性必须和接收参数对象中的实体属性名保持一致
* */
@RequestMapping("demo03")
public String demo03(User user){
System.out.println(user);
return "success.jsp";
}
[4]方式四
/*
* 获取参数方式四:
* 可以接收字符串或者字符串数组
*
* sql中的Date:只含有年月日
* util中的Date:不仅含有年月日,还有时分秒
*@DateTimeFormat:接收日期格式的数据,也可以写在实体类的属性中
* @DateTimeFormat(pattern = "HH:mm:ss"):接收指定日期格式数据
* */
@RequestMapping("demo04")
public String demo04(String[] hobby,@DateTimeFormat(pattern = "HH:mm:ss") Date birth){
System.out.println(hobby[0]+birth);
return "success.jsp";
}
[5]使用RESTFUL的方式传递数据
/*
* /springmvc01/demo05/sxt/987
* RESTFUL是一种数据传递的方式,使数据传递变得更安全
* */
@RequestMapping("/demo05/{name}/{pwd}")
public String demo05(@PathVariable String name,@PathVariable String pwd){
System.out.println(name+"--"+pwd);
return "success.jsp";
}
4.SSM框架整合
-
导包
-
配置各种xml文件
applicationContext-*.xml
springmvc.xml -
在web.xml中进行文件解析
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>ssm_login</display-name>
<!--用来解析applicationContext-*.xml-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--读取解析springmvc.xml-->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<!-- /表示出了jsp外的所有请求资源-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- 书写各种包中的代码即可
5.springMVC结合AJAx的使用
[1]传统方式结合ajax
/*
* 使用传统的方式做出ajax响应
* */
@RequestMapping("ajax1")
public void ajax1(String name,HttpServletResponse resp) throws IOException {
resp.setContentType("text/html;charset=utf-8");
//获取页面参数
//处理数据
Student student = new Student(name,"男",18);
//做出响应
String json = new Gson().toJson(student);
resp.getWriter().println(json);
}
[2]springmvc方式结合ajax
/*
* springmvc 结合ajax的使用
* 注意:
* A、方法的返回值可以是对象或集合,需要在方法上添加@ResponseBody
* B、响应给前台的对象直接是json对象,需要gson jar包或者是jackson jar包
* jackson jar包更契合spring框架
* @RequestMapping(value = "ajax2",produces = "text/html;charset=GBK")表示:
* 请求的url为ajax2,响应数据为json格式,字符串charset为GBK
*
* */
@RequestMapping(value = "ajax2",produces = "application/json;charset=gbk")
@ResponseBody
public Student ajax2(String name){
Student student = new Student(name, "男", 18);
return student;
}