关于现下流行的框架,自己做个整合,如果有想自己写个框架的,可以参考下,包含内容
1)MVC 框架(SpringMVC)
2)数据池(druid)
3)映射框架(hibernate) ---- 用 hibernate 做的映射,操作数据库采用 Hibernate+SpringJdbc 的方式
4)CSS 框架(bootstrap)
5)日志管理(slf4j+log4j)
6)缓存管理(oacache)
7)异常管理
8)AOP
9)注解声明式事务管理
10)伪静态页面(thymeleaf)
11)文件系统(Webservice)
一:注解型 SpringMVC
我们先来说说 MVC 的概念:浏览器发送请求,核心控制器参考配置文件将各个请求分配给不同的 action 去处理,在控制器把请求交给 action 去处理之前,会将请求参数封装成一个参数对象,参数对象获得后调用校验方法进行校验,通过后将对象传递给指定的方法,action 执行完后返回结果视图,通过路径解析关联到某个页面。
1 核心控制器
web 程序入口在 web.xml,配置 DispatcherServlet,相当于 struts2 的 FilterDispatcher,也是作为 Spring 的入口,所有*.action 的请求都会进入这个调度器分发执行,他是负责流程控制(职责调度)的一个 Servlet,他同时会把 default.xml 下的 bean 实例化到容器中。
<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>
Spring4 下程序可继承 WebApplicationInitializer 随容器一起启动
@Configuration
public class ViewConfig extends WebMvcConfigurerAdapter
ServletRegistration.Dynamic registration =
servletContext.addServlet("dispatcher", new DispatcherServlet(webContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
因为 maven 打包 web 项目会去找 web.xml 文件,此时去掉 web.xml 后需要配置 maven 打包插件,添加 failOnMissingWebXml 属性
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warName>${war-name}</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
注:之后所有的配置均采用零配置文件的方式,不会把 xml 配置文件和 java 配置文件都写出来
初始化 DispatcherServlet 会把 Bean 实例化到容器中,我们采用注解的方式注明哪些 Bean 需要实例化
@Configuration
@ComponentScan(basePackages = {
"com.es.*"
})
public class WebConfig extends WebMvcConfigurationSupport
2 参数对象 + 结果视图
bean 初始化之后,请求根据转向路径进入不同的 action,在控制器把请求交给 action 去处理之前,会将请求参数封装成一个参数对象,在 spring 里面就是一个 ModelAndView 对象(spring 参数对象颇多,此处先用 ModelAndView 做例,下面会详细介绍),用来替代 struts2 繁琐的属性封装,ModelAndView=model+view,model 就是他作为容器和页面共享数据的意思(其实他们都相当于一个参数对象的 map 而已),view 是指 Action 执行完后要返回的结果视图,当然这个视图和 struts2 一样也可以是一个字符串,再通过路径解析找到页面
对转向页面的路径解析(结果视图解析):
@Bean
public ViewResolver getViewResolver(ContentNegotiationManager manager){
logger.info("ViewResolver");
ContentNegotiatingViewResolver bean = new ContentNegotiatingViewResolver();
bean.setContentNegotiationManager(manager);
List<ViewResolver> viewResolvers = new ArrayList<ViewResolver>();
viewResolvers.add(new BeanNameViewResolver());
//viewResolvers.add(new XmlViewResolver());
viewResolvers.add(new JsonViewResolver());
InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();
jspViewResolver.setPrefix("/jsp/");
jspViewResolver.setSuffix(".jsp");
viewResolvers.add(jspViewResolver);
bean.setViewResolvers(viewResolvers);
return bean;
}
@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 映射和操作数据库。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于