• springmvc+hibernate入门-揭开神秘的面纱


            Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer PagesJSP)技术、VelocityTilesiText 和 POISpring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
            和目前比较流行的ssh2(Struts2+Spring+hibernate)框架相比,springmvc的性能可能还在之上。这主要是由于Struts2的值栈、OGNL表达式、struts2标签库等导致性能下降。自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在越来越多的开发团队选择了Spring MVC。
            从网上摘录常见的mvc框架性能比较,可以参考参考。
            运行性能上:

                Jsp+servlet>struts1>spring mvc>struts2+freemarker>>struts2,ognl,值栈。

        开发效率上,基本正好相反。值得强调的是,spring mvc开发效率和struts2不相上下。

         现在用一个例子来证明springmvc的魅力吧。例子是基于xml配置的springmvc+hibernate。

         新建项目什么的,就不说了哈。现在没有Struts2了。所以也就没有Struts.xml文件了。和传统的ssh相比只多了springmvc的配置文件。先从web.xml文件开始说起吧。

     

        web.xml

        

        首先配置一个Servlet,用来拦截请求。如:

     

      

      <servlet>
    
            <servlet-name>dispatcherServlet</servlet-name>
    
            <servlet-class>
    
                org.springframework.web.servlet.DispatcherServlet
    
            </servlet-class>
    
            <init-param>
    
                <param-name>contextConfigLocation</param-name>
    
                <param-value>/WEB-INF/spring-*.xml</param-value>
    
            </init-param>
    
            <load-on-startup>1</load-on-startup>
    
        </servlet>
    
        <servlet-mapping>
    
            <servlet-name>dispatcherServlet</servlet-name>
    
            <url-pattern>*.do</url-pattern>
    
        </servlet-mapping>
    

        spring-*.xml表示加载WEB-INF下所有以spring-开头的配置文件。学校里面教的可能有一个applicationContent.xml文件,然后把所有的东西都配在这里面。从例子角度上考虑可以这么做。但是从企业级的应用上考虑,不推荐采用这种方式。推荐将applicationContent.xml中的东西进行分离。dao.xml只写与Dao层相关的东西,service.xml只写与Service层相关的东西。而dataSource、sessionFactory以及事务用hibernate.xml保存。mvc.xml则写与控制器相关的东西。

        dao、service和hibernate的配置文件就不多说了,和以前没有什么两样。如果想看具体内容,可以去文章最后指定的链接下载即可。

    重点说说mvc.xml的内容。

        

        mvc.xml

        

        这个文件主要定义了控制器方法调用规则、视图层的基本设置、Servlet的映射列表以及具体的控制器等等。主要代码:

     

      <!-- Controller方法调用规则定义 -->
    
    <bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    
    <property name="paramName" value="action" />
    
    <property name="defaultMethodName" value="list" />
    
    </bean>
    
    <!-- 页面View层基本信息设定 -->
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    
    <!--前缀 -->
    
    <!--<property name="prefix" value="/myjsp/"/> -->
    
    <!--后缀 -->
    
    <property name="suffix" value=".jsp" />
    
    </bean>
    
    <!-- servlet映射列表,所有控制层Controller的servlet在这里定义 -->
    
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    
    <property name="mappings">
    
    <props>
    
    <prop key="user.do">empController</prop>
    
    </props>
    
    </property>
    
    </bean>
    
    <bean id="empController" class="com.test.controller.EmpController">
    
    <property name="empService" ref="empService"></property>
    
    </bean>
    

        前面两个bean基本上不用设置什么,主要是后面两个需要注意。从代码层面可以看出请求user.do的时候会交给empController来处理。

    我们看看EmpController类有什么东西。

     

      public class EmpController implements Controller {
    
    private EmpService empService;
    
     
    
    @Override
    
    public ModelAndView handleRequest(HttpServletRequest request,
    
    HttpServletResponse response) throws Exception {
    
    System.out.println("handleRequest..............");
    
    Emp emp = new Emp();
    
    emp.setName(request.getParameter("name").toString());
    
    empService.saveEmp(emp);
    
    return new ModelAndView("main");
    
    }
    
     
    
    public EmpService getEmpService() {
    
    return empService;
    
    }
    
     
    
    public void setEmpService(EmpService empService) {
    
    this.empService = empService;
    
    }
    
    }
    

        在控制器里面实现Controller接口并重写handleRequest方法。这个地方是不是有点熟悉呀,和Servlet很相似吧。然后调用服务层的方法返回字符串或者ModelAndView对象。处理成功以后会跳转到main.jsp页面。至于并没有写视图的名称为啥能跳转到main.jsp呢,是因为在mvc.xml中定义了视图的后缀。

        光看代码还是有点枯燥,来看看项目结构图吧。

        如果想参考源码可以去http://pan.baidu.com/share/link?shareid=3240675456&uk=587859240下载。如果有什么不明白的地方可以留言。

  • 相关阅读:
    MySQL的视图和存储
    MySQL的练习题及答案
    C#调用SQL Server参数过程传参
    C#显示SQL语句格式
    在SQL2008R2查询分析器出错(在执行批处理时出现错误。错误消息为: 目录名称无效。)
    公用表表达式(CTE)引发的改变执行顺序同WHERE条件顺序引发的bug
    【同步复制常见错误处理3】找不到存储的过程 sp_MSins_tablename
    SQL2012数据库加密方法
    【整理贴】DBA-常用到的动态视图分析语句
    【同步复制常见错误处理2】同步复制数据引起的同步失败错误
  • 原文地址:https://www.cnblogs.com/hongzai/p/3177611.html
Copyright © 2020-2023  润新知