当前位置:   article > 正文

SpringMVC框架基本原理_spring mvc的康

spring mvc的康

        SpringMVC基本框架图:


SpringMVC基本框架图

        SpringMVC注解:

把类声明为Spring容器的bean文件,可以再其他地方调用。

@Controllers声明控制层;

@Service声明服务层;

@Repository声明持久层(数据传输层DAO)。

@RequestMapping把一个POJO声明为Spring里的Controller,如果不声明要写Controller类就要从Spring的Controller类继承,并重新handleRequest方法。

@RequestMapping(value="*.htm",method=RequestMethod.GET)属性value声明Controller处理的请求,method声明处理请求的类型,可声明在类头上,也可声明在方法头上;

@RequestParam绑定参数与请求参数

例如:public String Controller(@RequestParam("id") int topicId, User user)

把参数topicId与请求的参数“id”绑定,id的值传入topicId。


Spring常用注解

@AutoWired根据类型自动装配,可放在属性上,set方法上,构造方法上,与@AutoWired配套使用的是@Qualifier。按名字自动装配,

例如@AutoWired

@Qualifier("userDAO") UserDAO userDAO

@Resource 与@AutoWired类似

默认按名字匹配,有两个属性name,type;

如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;

如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;

如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;

如果既没有指定name,又没有指定type,则自动按照byName方式进行;

如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配。


DispatcherServlet

SpringMVC中前端控制器是org,springframework,web,servlet,DispatcherServlet

负责将请求分配给控制对象,所以使用SpringMVC的第一步是在web.xml中定义DispatcherServlet

  1. <servlet>
  2. <servlet-name>spring<servlet-name>
  3. <servlet-class>org.springframework,web.servlet.DispatcherServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>spring</servlet-name>
  7. <url-pattern>*.htm</url-pattern>
  8. </servlet-mapping>
可加上contextConfigLocation的初始化参数,用来舍子Bean定义文件的位置和名称,默认使用"Servlet(名称)-servlet.xml"如本例的spring-servlet.xml
  1. <servlet>
  2. <servlet-name>spring<servlet-name>
  3. <servlet-class>org.springframework,web.servlet.DispatcherServlet</servlet-class>
  4. <init-class>
  5. <param-name>contextConfigLocation</param-name>
  6. <param-value>/WEB-INF/mvc-config.xml,/WEB-INFO/spring-config.xml</param-value> //<strong><span style="color:#cc0000;">两个bean文件来源</span></strong>
  7. </init-param>
  8. </servlet>

spring-servlet.xml模板

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Bean头部 -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xmlns:context="http://www.springframework.org/schema/context"
  8. xmlns:util="http://www.springframework.org/schema/util"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  11. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  12. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
  13. <!-- 加载权限设置 -->
  14. <bean id="security" class="com.boaotech.util.Security"
  15. p:contextConfigLocation="WEB-INF/security.xml" />
  16. <!-- 加载菜单项 -->
  17. <bean id="menus" class="com.boaotech.util.Menus"
  18. p:contextConfigLocation="WEB-INF/menus.xml" p:security-ref="security" />
  19. <!-- Json返回格式化转换 -->
  20. <bean id="mappingJacksonHttpMessageConverter"
  21. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
  22. <!-- 设置全局日期参数的字符串表示格式 -->
  23. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  24. <property name="webBindingInitializer">
  25. <bean class="com.boaotech.util.CommonBindingInitializer"/>
  26. </property>
  27. <property name="messageConverters">
  28. <list>
  29. <ref bean="mappingJacksonHttpMessageConverter"/>
  30. </list>
  31. </property>
  32. </bean>
  33. <!-- 激活@Controller模式 -->
  34. <mvc:annotation-driven />
  35. <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改-->
  36. <context:component-scan base-package="com.boaotech.zhaotaoerp" />
  37. <context:annotation-config/>
  38. <!-- 激活计划任务注解 -->
  39. <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
  40. <task:scheduler id="myScheduler" pool-size="1"/>
  41. <task:executor id="myExecutor" pool-size="1"/>
  42. <!-- 配置拦截器 -->
  43. <mvc:interceptors>
  44. <bean id="authorizeInterceptor" class="com.boaotech.util.AuthorizeInterceptor" />
  45. </mvc:interceptors>
  46. <!-- 类名到视图名的自动映射 -->
  47. <!-- bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/ -->
  48. <!-- FreeMarker配置文件 -->
  49. <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  50. <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
  51. <property name="freemarkerSettings">
  52. <props>
  53. <prop key="template_update_delay">5</prop>
  54. <prop key="default_encoding">UTF-8</prop>
  55. <prop key="locale">zh_CN</prop>
  56. </props>
  57. </property>
  58. </bean>
  59. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  60. <bean id="viewResolver"
  61. class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
  62. p:cache="true" p:prefix="" p:suffix=".ftl"
  63. p:contentType="text/html;charset=UTF-8"
  64. p:exposeRequestAttributes="true" p:exposeSessionAttributes="true"
  65. />
  66. <!-- bean id="viewResolver"
  67. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  68. p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/jsp/"
  69. p:suffix=".jsp" / -->
  70. </beans>

spring 3.0 application-conext.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. <!-- 数据库配置 -->
  9. <context:property-placeholder location="WEB-INF/mysql.properties, WEB-INF/bonecp.properties"/>
  10. <!-- 激活@Required 和 @Autowired注解功能 -->
  11. <context:annotation-config/>
  12. <!-- 加载中文字符串转拼音的bean -->
  13. <!-- bean id="cnToSpell" class="com.boaotech.util.CnToSpell" / -->
  14. <!-- 缓存配置 -->
  15. <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
  16. p:configLocation="WEB-INF/ehcache.xml" p:shared="true"/>
  17. <!-- 数据库源配置 -->
  18. <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"
  19. p:driverClass="${jdbc.driverClassName}"
  20. p:jdbcUrl="${jdbc.url}"
  21. p:username="${jdbc.username}"
  22. p:password="${jdbc.password}"
  23. p:idleConnectionTestPeriod="${bonecp.idleConnectionTestPeriod}"
  24. p:idleMaxAge="${bonecp.idleMaxAge}"
  25. p:partitionCount="${bonecp.partitionCount}"
  26. p:minConnectionsPerPartition="${bonecp.minConnectionsPerPartition}"
  27. p:maxConnectionsPerPartition="${bonecp.maxConnectionsPerPartition}"
  28. p:acquireIncrement="${bonecp.acquireIncrement}"
  29. p:poolAvailabilityThreshold="${bonecp.poolAvailabilityThreshold}"
  30. p:connectionTimeout="${bonecp.connectionTimeout}"
  31. p:statementsCacheSize="${bonecp.statementsCacheSize}"
  32. p:releaseHelperThreads="${bonecp.releaseHelperThreads}"
  33. p:statementReleaseHelperThreads="${bonecp.statementReleaseHelperThreads}"
  34. p:disableJMX="true" />
  35. <!-- 使用iBatis作为持久层 -->
  36. <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
  37. p:configLocation="WEB-INF/sqlmap-config.xml"
  38. p:dataSource-ref="dataSource"/>
  39. <!-- 声明事务管理bean -->
  40. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  41. p:dataSource-ref="dataSource" />
  42. <!-- 激活@Transactional 和 @ManagedOperation 注解,事物管理功能 -->
  43. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
  44. </beans>


Controller层

    @Controller //将类声明为Spring容器里的Bean,Spring调用时实例化

    @RequestMapping(“index.htm”)//声明这个Controller处理的请求是什么

public class IndexController{

@RequestMapping(method = RequestMethod.GET)  //请求的方法默认为get

public String doGet(){

return "index";     //返回“index”,交由ViewResolver解析,返回调用 “/WEB-INF/index.jsp"

}

}


//处理post请求的Controller

@Controller

@RequestMapping(value="index.htm",method = RequestMethod.POST)

public String doPost(String username, String password, ModeMap modelMap) throws Exception{  //ModelMap,String提供的集合可以传递数据到返回的jsp页面

modelMap.addAttribute("name",username); //把username以键值对的形式存入ModelMap,在index.jsp中用request对象接收

return "index";

}


Service层

注:面向接口编程,降低各层之间的耦合度

  1. public interface UserService{
  2. boolean login(String user,String pwd) throws Exception;
  3. }
  4. @Service("userService")
  5. public UserServiceImpl implements UserSerivce{
  6. //实现接口方法
  7. boolean login(String user,String pwd) throws Exception{
  8. return true;
  9. }

DAO层

  1. <strong>public interface UserDAO{
  2. public User selectByname(String user) throws Exception;
  3. }
  4. @Repository("userDAO")
  5. public userDAOImpl implements UserDAO{
  6. //实现接口方法
  7. public User selectByname(String user){
  8. return null;
  9. }
  10. }</strong>




本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号