• SpringMVC轻松学习-注解的使用(三)


    根据上一讲的例子,我们下面就注解的使用进行详细说明。

    我们采用sprng MVC开发项目时,通常都会采用注解的方式,这样可以大大提高我们的开发效率。实现零配置。下面我们从零开始重新做一个spring MVC的配置。这个项目完全采用注解的方式开发。同时,我们以后的spring MVC项目也都会采用注解的方式。

       修改web.xml,文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/hib-config.xml,/WEB-INF/springmvc-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
     
    </web-app>

    springmvc-servlet.xml配置内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="UTF-8"?>
    <beans
        xsi:schemaLocation="http://www.springframework.org/schema/beans
          
        <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
        <context:component-scan base-package="com.sxt"/>
     
        <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
     
        <!--对模型视图名称的解析,即在模型视图名称添加前后缀 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            p:suffix=".jsp"/>
    </beans>

    hib-config.xml(配置了spring集成hibernate)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?xml version="1.0" encoding="UTF-8"?>
        xsi:schemaLocation="
    ">
        <context:component-scan  base-package="com.sxt"/>  
        <!-- 支持aop注解 -->
        <aop:aspectj-autoproxy />
         
             
        <bean id="dataSource" 
                class="org.apache.commons.dbcp.BasicDataSource"
                <property name="driverClassName" 
                    value="com.mysql.jdbc.Driver"
                </property
                <property name="url" value="jdbc:mysql://localhost:3306/myhib"></property
                <property name="username" value="root"></property
                <property name="password" value="123456"></property>
        </bean
     
       <bean id="sessionFactory" 
           class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
               <property name="dataSource"
                   <ref bean="dataSource" /> 
               </property>
               <property name="hibernateProperties"
                   <props
                    <!-- key的名字前面都要加hibernate. -->
                       <prop key="hibernate.dialect"
                           org.hibernate.dialect.MySQLDialect 
                       </prop
                       <prop key="hibernate.show_sql">true</prop>
                       <prop key="hibernate.hbm2ddl.auto">update</prop>
                   </props>
               </property>
            <property name="packagesToScan">
                <value>com.sxt.po</value>
            </property>
       </bean
     
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
     
    <!--配置一个JdbcTemplate实例--> 
    <bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">  
         <property name="dataSource" ref="dataSource"/>  
    </bean
     
     
    <!-- 配置事务管理 -->
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />
    <aop:config>
        <aop:pointcut expression="execution(public * com.sxt.service.impl.*.*(..))" id="businessService"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
    </aop:config>
    <tx:advice id="txAdvice" transaction-manager="txManager" >
        <tx:attributes>
            <tx:method name="find*"  read-only="true" propagation="NOT_SUPPORTED"  />
            <!-- get开头的方法不需要在事务中运行 。
            有些情况是没有必要使用事务的,比如获取数据。开启事务本身对性能是有一定的影响的-->
            <tx:method name="*"/>    <!-- 其他方法在实务中运行 -->
        </tx:attributes>
    </tx:advice>
     
    </beans>


    reg.jsp如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
          
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
        
      <body>
    <form action="user.do">
      用户名:<input type=text name=uname /><br/>
    <input type=hidden name=method value=reg />
    <input type=submit value=注册 />
    </form>
      </body>
    </html>


    index.jsp 如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
         
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">   
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
       
      <body>
       <h1>**********${params.uname}</h1>
       <h1>**********${requestScope.u}</h1>
       <h1>**********${requestScope.user}</h1>
      </body>
    </html>

    User.java 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package com.sxt.po;
     
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
     
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private int id;
        private String uname;
        private String pwd;
         
         
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUname() {
            return uname;
        }
        public void setUname(String uname) {
            this.uname = uname;
        }
         
         
    }


    UserDao.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package com.sxt.dao;
     
    import javax.annotation.Resource;
     
    import org.springframework.orm.hibernate3.HibernateTemplate;
    import org.springframework.stereotype.Repository;
     
    import com.sxt.po.User;
     
    @Repository("userDao")
    public class UserDao {
        @Resource
        private HibernateTemplate hibernateTemplate;
         
        public void add(User u){
            System.out.println("UserDao.add()");
            hibernateTemplate.save(u);
        }
     
        public HibernateTemplate getHibernateTemplate() {
            return hibernateTemplate;
        }
     
        public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
            this.hibernateTemplate = hibernateTemplate;
        }
         
    }

    UserService.Java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    package com.sxt.service;
     
    import javax.annotation.Resource;
     
    import org.springframework.stereotype.Service;
     
    import com.sxt.dao.UserDao;
    import com.sxt.po.User;
     
    @Service("userService")
    public class UserService {
        @Resource
        private UserDao userDao;
         
        public void add(String uname){
            System.out.println("UserService.add()");
            User u = new User();
            u.setUname(uname);
            userDao.add(u);
        }
     
        public UserDao getUserDao() {
            return userDao;
        }
     
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
         
    }

    UserController.java 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.sxt.web;
     
    import javax.annotation.Resource;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.SessionAttributes;
     
    import com.sxt.po.User;
    import com.sxt.service.UserService;
     
     
    @Controller("userController")//这里的
    @RequestMapping("/user.do")    
    public class UserController  {
     
        @Resource
        private UserService userService;
         
        @RequestMapping(params="method=reg")
        public String reg(String uname) {
            System.out.println("HelloController.handleRequest()");
            userService.add(uname);
            return "index";
        }
         
        public UserService getUserService() {
            return userService;
        }
     
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
     
         
    }

    说明:

    • @Controller("userController")这里也可以使用component进行注解,这里的controller和component一样,但是一般不用component,而这样的注解还@Repository、@Service、@Controller大家估计都知道怎么使用了,不会的话看我的之前发的blog:http://www.cnblogs.com/wang3680/p/0f4eea023d8eb01b097c732fddba5725.html
    • @RequestMapping("/user.do") 注解说明:这个注解是页面提交到user.dao中进行操作的controller,之前我们的controller还需要进行实现controller接口,而现在不需要实现此接口了,而且controller里面的函数也不需要去复写handleRequest方法了,这里我们就可以自己写自己的方法了,但是我们怎么知道页面提交给那个方法了呢?
    • @RequestMapping(params="method=reg")说明:这个注解就是去解释页面提交的给了那个方法的,就是提交来的带有method=reg的就会调转到此方法中,我们上面的页面中是这样定义传值的<input type=hidden name=method value=reg />
    • 问题又来啦,struts2中我们是根据属性的set和get方法得到我们传递来的值得,这里怎么办呢?我们在controller方法中添加参数将传递的值传递来,public String reg(String uname) 这里的命名必须和页面传来的对应上。

    上面的controller中,我们传递的是uname,我们这样呢,将参数改成User user为public String reg(User user)

     

    1
    2
    3
    4
    5
    6
    @RequestMapping(params="method=reg2")
       public String reg(User user) {
           System.out.println("HelloController.handleRequest()");
           userService.add(user.getUname());
           return "index";
       }

    说明:

    这里呢其实是将User模型中的属性拿来用了,我们必须保证页面定义的名称和模型中的一样才行,这一点类此与struts2里面的模型驱动
























  • 相关阅读:
    mysql主从原理
    mysql锁和事物隔离
    mysql索引查找原理及调优
    MySQL高级查询
    周总结04
    冲刺第六天
    冲刺第五天
    冲刺第四天
    典型用户模板和用户场景模版
    冲刺第三天
  • 原文地址:https://www.cnblogs.com/wang3680/p/7025c11249d00de8b99433a458c715b4.html
Copyright © 2020-2023  润新知