首页 > 代码库 > 注解型SpringMvc为基础的框架设计(一)

注解型SpringMvc为基础的框架设计(一)

最近(2014年底)关于现下流行的框架,自己做个整合,如果有想自己写个框架的,可以参考下,包含内容

1)MVC框架(SpringMVC)
2)数据池(dbcp)
3)映射框架(hibernate) ---- 用hibernate做的映射,操作数据库采用Hibernate+SpringJdbc的方式
4)CSS框架(bootstrap
5)日志管理(slf4j+log4j) ---- thymeleaf框架采用slf4j,所以用slf4j做框架,引用lig4j做的日志
6)缓存管理(oacache)
7)一个AOP实例(可以做,异常处理、日志管理等,实例已写好,自己发挥)
8)优化项目启动时间(no http) ---- no
9)事务管理(注解声明式)
10)静态页面thymeleaf
11)文件系统(webservice)


---------------------------------------------------------分割线--------------------------------------------------------------

 一:注解型SpringMVC
web程序入口在web.xml,写个Dispatcher(调度)Servlet,相当于struts2的FilterDispatcher,也是作为Spring的入口,所有*.action的请求都会进入这个调度器分发执行,他是负责流程控制(职责调度)的一个Servlet,他同时会把default.xml下的bean实例化到容器中。
<!-- spring Mvc配置 -->
<servlet>
	<servlet-name>spring</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/default.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>spring</servlet-name>
	<url-pattern>*.action</url-pattern>
</servlet-mapping></span>
在default.xml下把bean对象创建出来,我们采用注解的方式
<!-- 启动spring mvc注解功能 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" lazy-init="false" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
选择扫描包路径,我们把dao、service、action 3层的包都扫描一遍
<!-- 设置使用注解的类所在的package包 -->
<context:component-scan base-package="com.mysi.dao"></context:component-scan>
<context:component-scan base-package="com.mysi.service"></context:component-scan>
<context:component-scan base-package="com.mysi.action"></context:component-scan>
bean初始化之后,请求根据转向路径进入不同的action,控制器把请求交给action去处理之前,会将请求参数封装成一个参数对象,在spring里面就是一个ModelAndView对象(spring参数对象颇多,此处先用ModelAndView做例,下面会详细介绍),用来替代struts2繁琐的属性封装,ModelAndView=model+view,model就是他作为容器和页面共享数据的意思(其实他们都相当于一个参数对象的map而已),view是指Action执行完后要返回的结果视图,当然这个视图和struts2一样也可以是一个字符串,再通过路径解析找到页面
<!-- 对转向页面的路径解析 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp"/>
@Controller
public class MainAction {
	@RequestMapping("/mainPage")
	//如果你要返回一个string作为结果视图,那么你需要把一个modelMap作为参数,把对象共享在容器中
	public String mainPage(HttpServletRequest request,ModelMap modelMap) {
		String message = request.getParameter("message");
		modelMap.addAttribute("message",message);
		return "main/main";
	}
	
	@RequestMapping("/mainPage1")
	//如果你返回一个ModelAndView那么把共享的对象放在ModelAndView里面(此时没有路径解析)
	public ModelAndView mainPage1(HttpServletRequest request) {
		String message = request.getParameter("message");
		ModelMap modelMap = new ModelMap();
		modelMap.addAttribute("message",message);
		return new ModelAndView("forward:jsp/main/main.jsp",modelMap);
	}
}
在页面上接收message直接采用${message}即可。
由此为止,一个请求到处理结束的转发均已完成,也就是一个MVC的完成。
明天写数据池、hibernate映射和操作数据库。




注解型SpringMvc为基础的框架设计(一)