MVC设计模式:
MVC流程:
SpringMVC:
SpringMVC详解:
SpringMVC实现流程:
SpringMVC深入使用:
SpringMVC--基于XML配置:
1、创建一个maven web工程:并在pom.xml里导入依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<!-- 导入servlet相关jar包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 导入SpringMVC需要的jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
</dependencies>
在web.xml配置前置控制器:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定配置springmvc的路径-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
springmvc.xml:配置请求和相应的处理操作,根据请求配置相应Handler和jsp页面.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置HandlerMapping,将url请求映射到Handler-->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 配置mapping-->
<property name="mappings">
<props>
<!--配置test请求对应的handler-->
<prop key="/test">testHandler</prop>
</props>
</property>
</bean>
<!--配置Handler-->
<bean id="testHandler" class="com.imooc.handler.MyHandler"></bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀-->
<property name="prefix" value="/"></property>
<!-- 配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
MyHandler:
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class MyHandler implements Controller {
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//装载模型数据和逻辑视图
ModelAndView modelAndView = new ModelAndView();
//添加模型数据
modelAndView.addObject("name","TOM");
//添加逻辑视图
modelAndView.setViewName("show");
return modelAndView;
}
}
show.jsp:test请求都有本页面进行显示。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
hello ${name}.
</body>
</html>
测试:访问 http://localhost:8080/SpringMVCTest/test
输出结果:
SpringMVC--基于注解:
AnnotationHandler: 配置注解Handler
package com.imooc.handler;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//基于注解的方式,不需要实现Controller类
//设置其为控制器
@Controller
public class AnnotationHandler {
/**
* 业务方法:ModelAndView完成数据的传递,视图的解析
*/
//设置匹配的请求
@RequestMapping("/AnnotationTest")
public ModelAndView modelAndViewTest(){
//创建ModelAndView对象
//装载模型数据和逻辑视图
ModelAndView modelAndView = new ModelAndView();
//添加模型数据
modelAndView.addObject("name","Jack");
//添加逻辑视图
modelAndView.setViewName("show");
return modelAndView;
}
}
在springmvc.xml配置,实现自动扫描功能,将注解Handler添加到IOC容器中:
<?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.xsd">
<!-- 将注解Handler自动扫描到IOC容器中-->
<context:component-scan base-package="com.imooc.handler"></context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀-->
<property name="prefix" value="/"></property>
<!-- 配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
测试:访问 http://localhost:8080/SpringMVCTest/AnnotationTest
输出结果:
注解实现的业务方法2:Model传值,String进行视图解析
AnnotationHandler:
package com.imooc.handler;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
//基于注解的方式,不需要实现Controller类
//设置其为控制器
@Controller
public class AnnotationHandler {
/**
* 方法2:
* 业务方法:Model传值,String进行视图解析
*/
@RequestMapping("/ModelTest")
public String ModelTest(Model model){
//填充模型数据
model.addAttribute("name","jerry");
//设置逻辑视图
return "show";
}
}
输出结果:
注解实现的业务方法3:
Map传值,String进行视图解析
AnnotationHandler:
package com.imooc.handler;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
//基于注解的方式,不需要实现Controller类
//设置其为控制器
@Controller
public class AnnotationHandler {
/**
* 方法3:
* 业务方法:Map传值,String进行视图解析
*/
@RequestMapping("/MapTest")
public String MapTest(Map<String,String> map){
//填充模型数据
map.put("name","cat");
//设置逻辑视图
return "show";
}
}
输出结果:
案例展示:处理前台添加商品,并将其显示到页面上
Goods实体类:
package com.imooc.entity;
/**
* Created by Administrator.
*/
public class Goods {
private String name;
private double price;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public double getPrice(){
return this.price;
}
public void setPrice(double price){
this.price = price;
}
}
add.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>add</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<style type="text/css">
body{
overflow-x:hidden;
}
</style>
</head>
<body>
<form class="form-horizontal" role="form" action="addGoods" method="post">
<div class="form-group">
<label class="col-sm-1 control-label">名称</label>
<div class="col-sm-3">
<input type="text" class="form-control" name="name" placeholder="请输入商品名称">
</div>
</div>
<div class="form-group">
<label class="col-sm-1 control-label">价格</label>
<div class="col-sm-3">
<input type="text" class="form-control" name="price" placeholder="请输入商品价格">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-3">
<button type="submit" class="btn btn-default">提交</button>
</div>
</div>
</form>
</body>
</html>
AnnotationHandler:
package com.imooc.handler;
import com.imooc.entity.Goods;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
//基于注解的方式,不需要实现Controller类
//设置其为控制器
@Controller
public class AnnotationHandler {
/**
* 添加商品并展示
*/
@RequestMapping("/addGoods")
public ModelAndView addGoods(Goods goods){
System.out.println(goods.getName()+"---"+goods.getPrice());
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("goods",goods);
modelAndView.setViewName("show");
return modelAndView;
}
}
在web.xml配置其中文乱码和静态资源的正常使用:
<!-- 处理中文乱码-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 设置访问静态资源-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
输出结果:
总结: