您的位置:首页 > 编程语言 > Java开发

Java知识总结---MVC模式解析之SpringMVC(三)

2015-08-24 11:55 603 查看
在上一篇文章中,我们使用SpringMVC、Mybatis、Spring快速的搭建了一个简单的项目。今天呢,跟大家简单的聊一聊MVC模式。很多人特别是Java开发者,都在说MVC,都挺别人说MVC,那么MVC到底是什么,这个又跟SSH、SSM有什么关系呢?

MVC其实是一种设计的架构模式,Model+View+Controller。这个跟我们现在Web开发有很大的关系。Web开发我们需要前台页面展示给用户,我们需要处理业务逻辑,需要跟数据库打交道。如果把这些操作都放到一起,那么不仅没有良好的展现形式,开发人员也不好维护,所以就有了分层。把这些操作都分开,各自负责各自的功能,这样就很清晰了,这就是MVC产生的背景。

首先来说说V,就是View,也就是视图层,最终展现给用户看的东西,大部分都是jsp,或者其他的页面展现技术。M,就是Model,模型层,主要负责对也逻辑进行处理,例如,用户登录,用户注册等。C,就是Controller,控制层,主要负责前台和后台交互的中间层,包括获取前台传入的参数,向前台发送数据,跳转页面等。

那么我们再来看看现在流行的框架都实现了哪些部分,对于Controller层,现在主要有SpringMVC 、Struts等。而Hibernate、MyBatis呢,它们主要是对数据库操作的封装,是Model层的一部分,那Spring呢,它其实贯穿了MVC之中,它主要是一个容器,来帮助我们管理我们的对象。

以上是对MVC模式的解析。下边呢就结合项目,来看看springMVC的使用。

SpringMVC的核心就是Controller,新建一个类,加上@Controller注解,它就成了一个SpringMVC控制器,除此之外,我们还需要的spring-servlet.xml中配置一个:

<context:component-scan base-package="com.demo.controller" />


这句话,就是扫描包用的,我们配置了@Controller注解,也得告诉spring去哪找吧。这样在spring启动的时候,就会在这个路径下找@Controller注解,把这个类当成是一个控制器。

在配置文件中,这两个配置也是必不可少的。
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
第一个配置时说明了我们要使用注解的方式,否则@Controller他是不认识的。

第二个配置则配置了我们使用的视图解析器。viewClass指明了你是哪种视图,pdf,jsp还是其他,prefix指定了页面的前缀,一般都配置页面的路径,suffiex则是页面的后缀,一般都是页面的类型。

我们来看看UserController这个类:

@Controller
@RequestMapping("/user/")
public class UserController {
@Autowired
private UserService userService;

@RequestMapping("addUser.do")
public String addUser() {
return "addUser";
}

@RequestMapping("saveUser.do")
public ModelAndView saveUser(UserModel userModel) {
ModelAndView mv = new ModelAndView();
boolean b = userService.insertUser(userModel);
if(b) {
mv.setViewName("addUserSuccess");
} else {
mv.setViewName("addUserFail");
}
return mv;
}
}


@Controller这个注解表明了这个类是个控制器。

@RequestMapping这个是用来指明一个请求的映射关系,把UserController这个类映射到/user/这个路径下,如果这个注解是在方法上,那就把路径映射到方法上,类加方法就唯一的表示了一个特定的url,如/user/addUser.do就表明了我要访问UserController类的addUser方法,并且这个路径必须的全局唯一的。一般情况下,在开发过程中,类的RequestMapping就表示了某一个模块,而方法的RequestMapping就是使用方法名。这样就保证了类模块名+方法名的唯一。

@AutoWired注解表示了这个属性是spring容器自动注入,我们不需要自己去创建对象,这就是spring的IOC。

接下来就说说controller中的方法怎么写,在上边的代码中,有两个方法,一个方法的返回值是String,一个方法的返回值是ModelAndView。这两种都是springmvc支持的写法。

先说说返回String的,返回的就是我们要跳转的页面,这个页面必须是spring-servlet.xml中配置的prefix和suffix中。

返回ModelAndView的,先要创建这个对象,而需要跳转的页面通过setViewName进行设置。

那么,如何将数据返回到页面呢?这也有两种方法。第一种使用ModelMap对象,调用ModelMap的addAttribute方法。

@RequestMapping("getUserById")
public String getUserById(String id,ModelMap modelMap) {
if(StringUtils.isNotBlank(id)) {
int userId = Integer.parseInt(id);
UserModel userModel = userService.getUser(userId);
modelMap.addAttribute("userModel", userModel);
}
return "showUser";
}
第二种使用ModelAndView对象,调用addObject方法。

@RequestMapping("getUserById1")
public ModelAndView getUserById1(String id) {
ModelAndView mv = new ModelAndView();
if(StringUtils.isNotBlank(id)) {
int userId = Integer.parseInt(id);
UserModel userModel = userService.getUser(userId);
mv.addObject("userModel", userModel);
}
mv.setViewName("showUser");
return mv;
}


在工作中可能还有一种情况,如果需要使用request或者response怎么办呢,这个就更简单了,直接在方法中写这两个参数就可以了。

@RequestMapping("addUser.do")
public String addUser(HttpServletRequest request,HttpServletResponse response) {
return "addUser";
}


除此之外,还有一些注解的使用都是很常见的,比如@ModelAttribute,@InitBinder,@PathVarivable等等。

当然,以上的介绍都是一些非常基本的东西,至于SpringMVC一些更深入的的东西,就需要大家自己去研究了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: