JavaEE开发框架-SpringMVC
文章目录
概述
srpingmvc功能
-
Controller为中心完成对系统流程的控制管理
-
从请求中搜集数据
-
对传入的参数进行验证
-
将结果返回给视图
-
针对不同的视图提供不同的解决方案
-
针对jsp视图技术提供标签库
-
拦截器
-
上传文件
springmvc结构
-
DispatcherServlet:中央控制器,把请求给转发到具体的控制类
-
Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)
-
handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略
-
ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配
-
ViewResolver & View:视图解析器,解析具体的视图
-
Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)
springmvc模式
springmvc流程图
应用
导包
配置中央控制器
在web工程的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">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
创建配置文件
在WEB-INF下创建xml文件
命名规则:
中央控制器(servlet的名称)的名称+"-servlet.xml”
如
springmvc-servlet.xml
- 在配置文件中添加spring的头信息
- 在配置文件中配置controller和视图解析器
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
">
<!--配置controller-->
<bean id="myController" name="/hello.do" class="com.controller.TestController" ></bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀:所有jsp的公共路径-->
<property name="prefix" value="/WEB-INF/"></property>
<!--后缀:所有jsp的文件格式:.jsp-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
创建Controller类并继承AbstractController
package com.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
return new ModelAndView("index");
}
}
启动Tomcat查看效果
参数控制器
参数控制器可以使我们无需创建Controller类实现跳转
ParameterizableViewController(参数控制器)
在配置文件中配置参数控制器
<bean name="/toIndex.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<!--配置索要跳转到视图的名称-->
<property name="viewName" value="index"></property>
</bean>
效果
SpringMVC基于注解开发
在springmvc的配置文件中指定注解驱动,配置扫描器
<!--开启注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--开启扫描器-->
<context:component-scan base-package="com.controller"></context:component-scan>
在com.controller下创建控制类
@controller:标识当前类是控制层的一个具体的实现,标注在类上
@requestMapping:
- 放在方法上面用来指定某个方法的路径
- 放在类上的时候相当于命名空间,需要组合方法上的requestmapping来访问
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/hello.do")
public String hello(){
return "index" ;
}
}
效果
参数接收
在方法中可以自己随意去定义方法的参数,如果方法的参数的名称与传入参数的name匹配就会自动接收,并且转换我们所定义的数据类型,如果参数列表里定义了自定义的类,springmvc会给我们把匹配的参数收集起来并且组装成对象
@RequestMapping("/hello.do")
public String hello(String name ){
System.out.println(name);
return "index" ;
}
结果为后台打印出sanjin
返回数据给视图
后台代码:
利用Model类
@RequestMapping("/hello.do")
public String hello(Model model){
Person person = new Person() ;
person.setName("三金");
person.setAddr("深圳");
model.addAttribute("person",person) ;
return "index" ;
}
前台代码:
效果:
Ajax调用SpringMVC的方法
ajax.jsp
<script type="text/javascript">
$(function(){
$("#myButton").click(function(){
var mytext = $("#mytext").val();
$.ajax({
url:"test/ajax.do",
type:"post",
dataType:"text",
data:{
name:mytext
},
success:function(responseText){
alert(responseText);
},
error:function(){
alert("system error");
}
});
});
})
</script>
<body>
<input type="text" id="mytext">
<input type="button" id="myButton" value="click">
</body>
@RequestMapping("/toAjax.do")
public String ajax(){
return "ajax" ;
}
/*无中文参数下的ajax返回数据*/
@RequestMapping("/ajax.do")
public void ajax(String name , PrintWriter out){
String resulet = "hello"+name ;
out.write(resulet);
}
/*有中文参数下的ajax返回数据*/
/* @RequestMapping("/ajax.do")
public void ajax(String name , HttpServletResponse response){
String resulet = "hello"+name ;
try {
response.getWriter().write(resulet);
} catch (IOException e) {
e.printStackTrace();
}*/
重定向
/**
* 同一个Controller内部的重定向 return "redirect:"+要重定向到的方法的@RequestMapping值
*/
@RequestMapping("/redirect.do")
public String redirect(){
return "redirect:toAjax.do";
}
/**
* Controller之间的重定向
* return "redirect:"加上/目标Controller的命名空间+@RequestMapping值
*/
@RequestMapping("/redirect1.do")
public String redirect1(){
return "redirect:/test3/toAjax.do";
}