SpringMVC-控制器Controller
1- 控制器Controller
控制器复杂提供访问应⽤程序的⾏为,通常通过接⼝定义或注解定义两种⽅法实现。
控制器负责解析⽤户的请求并将其转换为⼀个模型。
在Spring MVC中⼀个控制器类可以包含多个⽅法,在Spring MVC中,对于Controller的配置⽅式有很多种1.1 实现Controller接⼝
1.1.1项⽬⽬录
1.1.2 操作业务Controller
实现Controller接⼝,从⽽获得控制器功能
package ller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Controller详解
*/
public class TestController1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)throws Exception {
// 1.返回⼀个模型视图对象
ModelAndView mv =new ModelAndView();
// 2.封装对象,放在ModelAndView中。
mv.addObject("msg","TestController1");
// 3. 封装跳转的视图
mv.setViewName("test");
return mv;
}
}
1.1.3 SpringMVC的配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<!--注册bean,将类提交给springIOC容器来管理-->
<bean id="/test1"class="ller.TestController1"/>
<!--4.视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix"value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix"value=".jsp"/>
</bean>
</beans>
1.1.4 创建视图层
在WEB-INF/ jsp⽬录中创建hello.jsp,视图可以直接取出并展⽰从Controller带回的信息。可以通过EL表⽰取出Model中存放的值,或者对象。
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>guardwhy</title>
</head>
<body>
${msg}
</body>
</html>
4.1.5 执⾏结果
注意点
实现接⼝Controller定义控制器是较⽼的办法。
⼀个控制器中只有⼀个⽅法,如果要多个⽅法则需要定义多个Controller。定义的⽅式⽐较⿇烦。
1.2 使⽤注解@Controller
1.2.1 操作业务Controller
package ller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 注解形式
*/
@Controller// 代表这个类会被Spring接管,被这个注解的类中的所有⽅法,如果返回值是Spring
// 并且有具体页⾯可以跳转,那么就会被视图解析器解析。
public class TestController2 {
// 映射访问路径
@RequestMapping("/test2")
public String Test(Model model){
// ⾃动实例化⼀个Model对象⽤于向视图中传值
model.addAttribute("msg","ControllerTest2");
return"test";// 会被拼接成//WEB-INF//jsp//test.jsp
}
}
1.2.2 SpringMVC的配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
context="/schema/context"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd
/schema/context
/schema/context/spring-context.xsd">
<!-- ⾃动扫描指定的包,下⾯所有注解类交给IOC容器管理 -->
<component-scan base-package="ller"/>
<!--4.视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="InternalResourceViewResolver"> <!--前缀-->
<property name="prefix"value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix"value=".jsp"/>
</bean>
</beans>
1.2.3 执⾏结果
1.3 RequestMapping
@RequestMapping注解⽤于映射url到控制器类或⼀个特定的处理程序⽅法。
可⽤于类或⽅法上,⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径。
1.3.1 注解在⽅法上
package ller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController3 {
@RequestMapping("/test3")
public String Test3(Model model){
// ⾃动实例化⼀个Model对象⽤于向视图中传值
model.addAttribute("msg","ControllerTest3");
return"test";
}
}
1.3.2 同时注解类与⽅法
package ller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/guardwhy")
public class TestController3 {
@RequestMapping("/test3")
public String Test3(Model model){
// ⾃动实例化⼀个Model对象⽤于向视图中传值
model.addAttribute("msg","ControllerTest3");
return"test";
}
}
1.4 RestFul风格
Restful就是⼀个资源定位及资源操作的风格。不是标准也不是协议,只是⼀种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
1.4.1 项⽬⽬录
1.4.2 基本作⽤
资源:互联⽹所有的事物都可以被抽象为资源。
资源操作:使⽤POST、DELETE、PUT、GET,使⽤不同⽅法对资源进⾏操作。分别对应 添加、 删除、修改、查询。
传统⽅式操作资源
通过不同的参数来实现不同的效果
localhost:8080/query.stu?id=1 查询,GET
localhost:8080/save.stu 新增,POST
spring ioc注解localhost:8080/update.stu 更新,POST
localhost:8080/delete.stu?id=1 删除 POST
使⽤RESTful操作资源
可以通过不同的请求⽅式来实现不同的效果!!注意,请求地址⼀样,但是功能可以不同

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。