对Spring MVC的思考

  最近连续几个项目,都用到Spring MVC,在开发项目的过程中,有着对Spring MVC的思考,在这里就谈一谈我的思考吧。

一、为什么会学习Spring MVC?

  在接触Spring MVC之前,我都是用Servlet+JSP进行编程的,记得当时在做一个网上云打印店的项目,开始时项目规模比较少,但后来发现,随着功能的增多,Servlet类也越来越多,记得当时还没有用到Servlet的注解技术,每新增一个Servlet,都要调整web.xml,这样对多人协作开发,带来了很多的不便。面对着一大堆的Servlet,有没有办法减少他们的数量呢?答案是有的,最原始的方法,当然就是把一个URL请求,通过传一个参数来做标记,如xxx?action=getAllOrder,servlet接收到action参数,再把请求分发到不同的方法。对于这样的请求分发,当时我们自己尝试实现了一下:

     String action = request.getParameter("action");
        if(action==null)
        {
            action="myMessages";
        }
        
        if("submitMessage".equals(action))
        {
            submitMessage(request, response);
        }else if("myMessages".equals(action))
        {
            myMessages(request, response);
        }else if("adminMessages".equals(action))
        {
            adminMessages(request, response);
        }else if("userMessages".equals(action))
        {
            userMessages(request, response);
        }else if("viewMessage".equals(action))
        {
            viewMessage(request, response);
        }else  if("allMessages".equals(action))
        {
            allMessages(request, response);
        }else if("markMessage".equals(action)){
            markMessage(request, response);
        }
             

  通过对action参数的匹配,去调用不同的方法,这样一来,这个servlet就集合了对Message的操作的逻辑。而这个Servlet,我们也称作Message的控制器。

这样做的好处是,我们可以按照功能,对Servlet进行分类,同一个功能模块的操作,都可以放到一个Servlet类里面了。即:以前URL跟Servlet类进行映射,现在变为URL跟类里面的方法进行映射了。很显然,映射到方法上,项目的架构上没这么臃肿,Servlet类本身充当控制器的角色,其职责功能已经不再是单一功能。然而,在没用框架的情况下,要实现请求的分发,往往要用上if else或者 switch 去实现,代码上不够简洁。而在此时,我们刚好遇到了Spring MVC的诞生,它的思想,跟我们不谋而合,于是便开始了学习Spring MVC之旅。

二、Spring MVC的优势

  用上了Spring MVC,一开始的感觉简直就是觉得他是神器,基于注解的配置,加快了开发的效率,一个@RequestMapping的注解,就能将一个url绑定到控制器的方法上。调用方法时,Spring MVC用了动态参数注入,能把Http请求携带的参数注入,这样一来,就省了很多过去Servlet时代的冗长代码。

  在Servlet时代,我是这样写的:

    @Override
    public void doPost(HttpServletRequest req,HttpServletResponse res){

        String pagePram = req.getParameter("page");
        if(pagePram==null){
            pagePram="0";
        }
        int page = Integer.parseInt(pagePram);
        //...Some Code

    }

  用了Spring MVC后:

@RequestMapping(value="findUserList")
public
String findUserList(   @RequestParam(defaultValue="1")   int page){     //...Some Code }

  在获取数据后,要把数据传向JSP,在Servlet时代,是这样的: 

// Some Code
request.setAttribute("list", list);
request.setAttribute("name", name);
//Some Code...

  SpringMVC:

//Some Code...

mav.addObject("list",list);
mav.addObject("name",name);

//Some Code...

   那如何指定哪个JSP页面呢?在Servlet时代:

request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);

   在SpringMVC里面,这些前端的JSP文件,其实就是View,通过配置视图解析器,然后每个JSP都会有它自己的ViewName,然后在控制器的代码里面,把这个ViewName设置好就行。

在xml下配置的 视图解析器 :

<bean
   class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:viewClass="org.springframework.web.servlet.view.JstlView"
        p:prefix="/WEB-INF/views/" 
        p:suffix=".jsp" />

配置完毕后,假设我web目录下,存在WEB-INF/views/index.jsp,那么index就是view的名字,视图解析器会自动找到对应的jsp文件,在控制器的代码里面,只需:

mav.setViewName("index");

三、对Spring MVC的总结

 SpringMVC本质上是对Java Web Servlet的封装,使得开发Java Web项目没有那么臃肿。Spring MVC是后端渲染式的后台开发框架,没有做到前后端分离,对前端开发人员也要求有Java Web的开发环境。前端人员作出的静态Html页面,也需要进行整合,改为Spring MVC里的View。在某些项目上来说(例如需求固定的传统IT项目),Spring MVC有他独有的优势,但是在一些项目上,特别是互联网项目,我们往往需要前后端分离。做到后台,前端相对独立开发,进一步减少前端View对后台Controller的耦合。

 

转载于:https://www.cnblogs.com/xillkey/p/5126102.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值