一、项目目录结构

二、SpringMVC需要使用的jar包

  1. commons-logging-1.2.jar
  2. junit-4.10.jar
  3. log4j-api-2.0.2.jar
  4. log4j-core-2.0.2.jar
  5. log4j-web-2.0.2.jar
  6. spring-beans-3.2.4.RELEASE.jar
  7. spring-context-3.2.4.RELEASE.jar
  8. spring-core-4.0.5.RELEASE.jar
  9. spring-expression-3.2.4.RELEASE.jar
  10. spring-web-4.0.5.RELEASE.jar
  11. spring-webmvc-3.2.9.RELEASE.jar

三、在Web.xml配置SpringMVC控制器

在不设置contextConfigLocation参数的情况下,SpringMVC框架默认在WEB-INF路径下查找文件名为XXX-servlet.xml(XXX是web.xml中配置的SpringMVC框架控制器的名称)。可以通过设置contextConfigLocation参数,自定义SpringMVC-servlet.xml的路径。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>SpringMVC</display-name> <!-- 添加Spring控制器及映射规则 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 不设置contextConfigLocation,SpringMVC 会在WEB-INF文件夹下查找<servlet-name/>-servlet.xml,设置
contextConfigLocation,可自定义SpringMVC-servlet.xml的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/SpringMVC-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- 首页文件列表 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

四、配置SpringMVC-servlet.xml

在路径/SpringMVCDemo/src/comm/config/配置SpringMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
"> <!-- 自动扫描的包名 -->
<context:component-scan base-package="com.candy.dao"></context:component-scan>
<context:component-scan base-package="com.candy.service"></context:component-scan>
<context:component-scan base-package="com.candy.web"></context:component-scan> <!-- 添加注解驱动 -->
<mvc:annotation-driven/> <!-- 模型视图名称解析 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value></value>
</property>
</bean> <!-- 对静态资源文件的访问 方案 -->
<mvc:default-servlet-handler />
</beans>

五、编写Controller

BaseController:

package com.candy.web;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.propertyeditors.CustomCollectionEditor;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder; @Controller
public class BaseController { protected final Logger log = LogManager.getLogger(); /**
* 处理页面参数序列化后数据类型的问题
*
* @author Candy
* @date 2014-11-3
* @version V1.0
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
log.debug("initBinder");
SimpleDateFormat dataSdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dataTimesdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dataSdf,
true));
binder.registerCustomEditor(Timestamp.class, new CustomDateEditor(
dataTimesdf, true));
binder.registerCustomEditor(List.class, new CustomCollectionEditor(
List.class, true));
} /**
* 获取客户端真实IP地址
*
* @author Candy
* @date 2014-11-3
* @version V1.0
* @param request
* @return
*/
public String getIpAddr(HttpServletRequest request) {
log.debug("getIpAddr");
if (request == null) {
return null;
}
String ip = request.getRemoteAddr(); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("x-forwarded-for");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
return ip;
}
}

TestController:

/**
* @projectName SpringMVC
* @package com.candy.web.IndexController.java
* @Copyright Copyright(c) 2014 Candy工会
* @author Candy
* @date 2014-11-3
* @version V1.0
*/
package com.candy.web.test; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import com.candy.service.TestService;
import com.candy.web.BaseController; /**
* 测试Controller
*
* @author Candy
* @date 2014-11-3
* @version V1.0
*/
@Controller
public class TestController extends BaseController { @Autowired
private TestService testService;
/**
* 测试跳转
*
* @author Candy
* @date 2014-11-3
* @return
*/
@RequestMapping("/transfer")
public ModelAndView testTransfer() {
log.debug("控制器查找到请求的路径!");
String viewName =testService.testTransfer();
return new ModelAndView(viewName);
} }

六、编写测试页面

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html>
<html lang="zh"> <head>
<base href="<%=basePath%>"> <title>SpringMVCDemo-首页</title> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/css/styles.css"> </head> <body>
<div class="container">
<div class="header"></div>
<div class="content">
<a href="${pageContext.request.contextPath}/transfer">发起请求</a>,后台响应,跳转到指定页面!
</div>
<div class="footer"></div>
</div>
</body>
</html>

在路径/SpringMVCDemo/WebContent/WEB-INF/jsp/下编写success.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html>
<html lang="zh"> <head>
<base href="<%=basePath%>"> <title>SpringMVCDemo-成功页面</title> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/css/styles.css"> </head> <body>
<div class="container">
<div class="header"></div>
<div class="content">
<h3>跳转成功!</h3>
<p>当你看到这些文字时,说明SpringMVC配置成功了!</p>
</div>
<div class="footer"></div>
</div>
</body>
</html>

七、访问测试

在浏览器中访问http://localhost:8080/SpringMVCDemo/,根据Web.xml中的配置默认显示index.jsp

    <!-- 首页文件列表 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

点击index.jsp中的“发起请求”链接,根据index.jsp代码,此时,浏览器会向服务器发出请求访问路径为“/SpringMVCDemo/transfer"的资源。

<a href="${pageContext.request.contextPath}/transfer">发起请求</a>,后台响应,跳转到指定页面!

SpringMVC框架通过Web.xml中定义的控制器及映射规则,读取SpringMVC-servlet中的配置。

    <!-- 添加Spring3控制器及映射规则 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 不设置contextConfigLocation,SpringMVC 会在WEB-INF文件夹下查找<servlet-name/>-servlet.xml,设置
contextConfigLocation,可自定义SpringMVC-servlet.xml的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/SpringMVC-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

SpringMVC框架扫描各个包,查找注解为“@Controller”的类,并扫描注解为"@RequestMapping("/transfer")"对应的方法。

    <!-- 自动扫描的包名 -->
<context:component-scan base-package="com.candy.dao"></context:component-scan>
<context:component-scan base-package="com.candy.service"></context:component-scan>
<context:component-scan base-package="com.candy.web"></context:component-scan> <!-- 添加注解驱动 -->
<mvc:annotation-driven/>

此时SpringMVC框架已经定位到了com.candy.web.test.TestController.testTransfer()方法。

在TestController的testTransfer()方法中,SpringMVC框架根据注解和自动扫描配置,查找类名为“TestService”,类注解为“@Component”的类,完成自动注入(Autowired)。

此时,TestController的testTransfer()方法返回一个ModelAndView的对象。SpringMVC框架根据SpringMVC-servlet.xml中的配置,在路径/WEB-INF-jsp中查找success.jsp文件,并返回给客户端。

    <!-- 模型视图名称解析 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value></value>
</property>
</bean>

此时,你就可以看到成功访问的信息了。


注:以上博文中,简单的贴了下配置,并在第七步“访问测试”中,按照自己的理解,通过简单易懂的文字,描述了框架的执行顺序。

其实在项目启动时,SpringMVC框架就完成了以下工作:

  1. 读取web.xml,获取到contextConfigLocation中配置的SpringMVC-servlet.xml路径。
  2. 读取SpringMVC-servlet.xml,扫描配置的各个包。
  3. 根据注解,加载所有的Controller、Service等组件,并完成自动注入。
  4. 根据注解,计算可能多的访问路径。

源码下载地址:http://pan.baidu.com/s/1c0gZUXa


以下是搭建环境时,遇到的各种问题笔记。

  1. 搭建JUnit环境时,测试Controller时,提示“Caused by: javax.validation.ValidationException: Unable to instantiate Configuration.”

    2014-11-3 18:06:46 org.springframework.context.support.FileSystemXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@f81843: startup date [Mon Nov 03 18:06:46 CST 2014]; root of context hierarchy
    2014-11-3 18:06:46 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from file [D:\Workspaces\SpringMVCDemo\WebContent\WEB-INF\SpringMVC-servlet.xml]
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-330 'javax.inject.Named' annotation found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-330 'javax.inject.Named' annotation found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.context.annotation.ClassPathBeanDefinitionScanner registerDefaultFilters
    信息: JSR-330 'javax.inject.Named' annotation found and supported for component scanning
    2014-11-3 18:06:46 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init>
    信息: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
    2014-11-3 18:06:46 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@dda25b: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,baseController,testController,mvcContentNegotiationManager,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,viewResolver,org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
    ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
    2014-11-3 18:06:46 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping registerHandlerMethod
    信息: Mapped "{[/transfer],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.candy.web.test.TestController.referLogin()
    2014-11-3 18:06:46 org.hibernate.validator.util.Version <clinit>
    信息: Hibernate Validator bean-validator-3.0-JBoss-4.0.2
    2014-11-3 18:06:46 org.springframework.beans.factory.support.DefaultListableBeanFactory destroySingletons
    信息: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@dda25b: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,baseController,testController,mvcContentNegotiationManager,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,viewResolver,org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
    java.lang.ExceptionInInitializerError
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is javax.validation.ValidationException: Unable to instantiate Configuration.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    at com.candy.web.BaseController.<clinit>(BaseController.java:25)
    Caused by: javax.validation.ValidationException: Unable to instantiate Configuration.
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:272)
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:188)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
    ... 12 more
    Caused by: java.lang.NullPointerException
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:950)
    at org.hibernate.validator.engine.ResourceBundleMessageInterpolator.loadBundle(ResourceBundleMessageInterpolator.java:202)
    at org.hibernate.validator.engine.ResourceBundleMessageInterpolator.getFileBasedResourceBundle(ResourceBundleMessageInterpolator.java:182)
    at org.hibernate.validator.engine.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:81)
    at org.hibernate.validator.engine.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:73)
    at org.hibernate.validator.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:57)
    at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:43)
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269)
    ... 15 more
    Exception in thread "main"

    解决方案:删除JavaEE6中自带的jar包:bean-validator.jar

  2. 如何删除JavaEE6中自带的jar包?
          在MyEclipse的菜单:Window-->Properties-->MyEclipse-->Java Enterprise Project-->Library Sets中,选择到Java EE6.0选项卡(默认选中),然后选择bean-validator.jar,点击右侧的“Remove”按钮,然后点“OK”按钮即可。
  3. Log4j2输出到控制台的log是乱码。
    解决方案:在使用的PatternLayout中加入属性:charset="GBK"即可。
  4. ……

教你搭建SpringMVC框架( 更新中、附源码)的更多相关文章

  1. 手把手教你实现栈以及C#中Stack源码分析

    定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...

  2. 教你搭建SpringMVC框架( 附源码)

    一.项目目录结构 二.SpringMVC需要使用的jar包 commons-logging-1.2.jar junit-4.10.jar log4j-api-2.0.2.jar log4j-core- ...

  3. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  4. 我的SSH框架实例(附源码)

    整理一下从前写的SSH框架的例子,供新人学习,使用到了注解的方式. 源码和数据库文件在百度网盘:http://pan.baidu.com/s/1hsH3Hh6 提取码:br27 对新同学的建议:最好的 ...

  5. 基于Python接口自动化测试框架(初级篇)附源码

    引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...

  6. 自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]

    介绍 我很早之前一直在做mvc5 scaffolder的开发功能做的已经非常完善,使用代码对mvc5的项目开发效率确实能成倍的提高,就算是刚进团队的新成员也能很快上手,如果你感兴趣 可以参考 http ...

  7. springMVC框架核心方法调用源码解析

  8. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

  9. 手把手教你搭建SSH框架(Eclipse版)

    原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...

随机推荐

  1. Java 运行环境的安装、配置与运行

    (一)SDK 的下载与安装 1. 下载SDK 为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包.SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器. ...

  2. SQL Server 2012 学习笔记1

    1. 新建的数据库会产生两个文件(数据文件.mdf 和日志文件.ldf) 2. 编辑表格和为表格录入数据 "Design"为设计表格,"Edit Top 200 Rows ...

  3. 解决git pull 命令失效,不能从远程服务器上拉取代码问题

    用时候在用Git pull命令的时候不管用,拉取不下来远程分支上的代码,是因为本地分支和远程分支没有建立关联. 处理这种问题很简单就按照提示执行命令即可:git branch --set-upstre ...

  4. JavaWeb学习笔记——Ajax

  5. Js获取指定Url参数

    在 C#.PHP.JSP 中,都有直接获取 Url 中指定参数的方法,但 Javascript 却没有这样的现在方法,得自己写一个.在 Web 的开发过程中,获取 Url 中的参数是十分常用的操作,所 ...

  6. 深入理解docker的link机制

    https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来 ...

  7. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  8. C# Monitoring-network

    http://www.codeproject.com/Articles/6259/Monitoring-network-speed

  9. 代码中access 的使用

     C++代码:if(access(strZip.c_str(), 0) == 0){...}    此处为判断strZip中文件是否存在   .c_str() 是他自身字符串名称,该名称是一个压缩文件 ...

  10. java调用存储过程

    在做java调用sqlserver存储过程时遇到了各种各样的问题,不过在不懈的努力之下这些问题还是得以解决了.今天总结一下遇到的问题以及解决的方法. 首先调用存储过程的方法大家都很清楚: String ...