首先创建基于Maven的Web项目,这里不多说,我博客里就有自己找下学习就可以。
具体主要jar包的版本如下所示:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.2.4.RELEASE</spring.version> <hibernate.version>4.3.11.Final</hibernate.version> <slf4j.version>1.7.12</slf4j.version> <jersey.version>1.19</jersey.version> <aspectj.version>1.8.6</aspectj.version> </properties>
这里说明下几个比较特殊的jar,其他的不进行说明了,后面会提供完成pom.xml进行下载:
阿里的数据源,可以进行监控
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.16</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
Jersey提供基于rest的服务
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>${jersey.version}</version> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>lyt-jersey-sjpa</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 400 404 500 处理 --> <!-- 出错页面定义 --> <error-page> <error-code>400</error-code> <location>/errors/400.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/errors/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/errors/500.jsp</location> </error-page> <!-- 监听器 任务定时调度 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-quartz.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- spring mvc配置 --> <servlet> <servlet-name>dispatcher-servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher-servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 中文乱码问题 --> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 数据监控 http://localhost:8080/project/druid/ 地址,会看到监控界面 --> <servlet> <servlet-name>DruidStatusView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatusView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <!-- 使用jersey 达到rest风格 --> <servlet> <description>Do not modify</description> <servlet-name>jersey-servlet</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>org.lyt.edu.webservice</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <!-- 配置session超时时间,单位分钟 --> <session-config> <session-timeout>120</session-timeout> </session-config> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="spring.data.jpa" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/lyt-jersey-sjpa?useUnicode=true&characterEncoding=utf8" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update"/> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="20" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT 'x'" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --> <property name="filters" value="stat" /> </properties> </persistence-unit> </persistence>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd"> <!-- 配置文件 --> <util:properties id="jdbc" location="classpath:db.properties"></util:properties> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="spring.data.jpa"></property> <property name="persistenceXmlLocation" value="classpath:persistence.xml"></property> </bean> <!-- 自动扫描并注入Spring Data JPA --> <jpa:repositories base-package="org.lyt.edu.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="txManager"> </jpa:repositories> <!-- 定义事务管理Bean --> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"> </property> </bean> <!-- 开启@Transactional注解事务控制 --> <tx:annotation-driven transaction-manager="txManager" /> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- 组件扫描 --> <context:component-scan base-package="org.lyt.edu"></context:component-scan> <mvc:annotation-driven> <!-- 返回json数据,IE浏览器返回json会下载文件 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <context:annotation-config /> <!-- 定义视图组件 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/mainView/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --> <property name="exceptionAttribute" value="ex"></property> <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 --> <property name="exceptionMappings"> <props> <prop key="IOException">error/ioexp</prop> <prop key="java.lang.NullPointerException">error</prop> </props> </property> </bean> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!--拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*/*" /> <!--不拦截用户登录组件 --> <mvc:exclude-mapping path="/user/*" /> <!--指定拦截器实现的组件:权限检查 --> <bean class="org.lyt.edu.interceptor.AdminPrivilegeInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- 计划调度管理工厂 --> <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cornTrigger" /> </list> </property> </bean> <!-- 定义任务调度组件调用的对象和方法 --> <bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="job"> </property> <property name="targetMethod" value="execute"> </property> </bean> <!-- 定义任务组件触发的时间 --> <bean id="cornTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobTask" /> </property> <property name="cronExpression"> <value>0 15 10 15 * ?</value> </property> </bean> <!-- 要调用的工作Bean组件 --> <bean id="job" class="org.lyt.edu.procedure.TimePlan"></bean> <!-- 【字符说明】 字段名 允许的值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日 1-31 , - * ? / L W C 月 1-12 or JAN-DEC , - * / 周几 1-7 or SUN-SAT , - * ? / L C # 年 (可选字段) empty, 1970-2099 , - * / * 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 ? 表示不确定的值 , 指定数个值 - 指定一个值的范围 / 指定一个值的增加幅度。n/m表示从n开始,每次增加m L 用在日表示一个月中的最后一天,用在周表示该月最后一个星期X W 指定离给定日期最近的工作日(周一到周五) # 表示该月第几个周X。6#3表示该月第3个周五 【常用示例】 0 15 10 15 * ? 每月15号上午10点15分触发 0 15 10 L * ? 每月最后一天的10点15分触发 0 * 14 * * ? 每天下午的 2点到2点59分每分触发 0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节) --> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- 组件 --> <bean id="loggerBean" class="org.lyt.edu.aspect.LoggerBean"></bean> <!-- 开启aop扫描 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
### set log levels ### log4j.rootLogger = INFO , C , D , E ### console ### log4j.appender.C = org.apache.log4j.ConsoleAppender log4j.appender.C.Target = System.out log4j.appender.C.layout = org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern = [lyt-jersey-sjpa][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n ### log file ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = logs/lyt-jersey-sjpa.log log4j.appender.D.Append = true log4j.appender.D.Threshold = INFO log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = [lyt-jersey-sjpa][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n ### exception ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = logs/lyt-jersey-sjpa_error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = [lyt-jersey-sjpa][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
package org.lyt.edu.aspect; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; /** * * @author liuyuantao * @Desc方面组件[基于注解方式] * @version 1.0 */ @Component @Aspect public class LoggerBean { @Before("within(org.lyt.edu.controller..*)") public void before() { // System.out.println(new java.util.Date()+" ...前面执行了"); } @After("within(org.lyt.edu.controller..*)") public void end() { // System.out.println("后面调用"); } // 异常通知 @AfterThrowing(throwing = "ex", pointcut = "within(org.lyt.edu.controller..*)") public void exception(Exception ex) { // System.out.println("出问题了"+ex); } }
package org.lyt.edu.interceptor; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.lyt.edu.entity.Admin; import org.lyt.edu.util.Constant; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * 权限检查拦截器 * * @author liuyuantao * */ public class AdminPrivilegeInterceptor implements HandlerInterceptor { public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("最后执行..."); } /** * 这个部分实现页面的凹凸效果 */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) throws Exception { // 当前页效果 int current = 1; // 获得用户的访问地址 /xxx/xxx String url = request.getServletPath(); // 获得访问前缀 url = url.substring(1, url.indexOf("/", 1)); if ("role".equals(url)) { current = 1; } else if ("admin".equals(url)) { current = 2; } else if ("fee".equals(url)) { current = 3; } else if ("account".equals(url)) { current = 4; } else if ("service".equals(url)) { current = 5; } else if ("bill".equals(url)) { current = 6; } else if ("report".equals(url)) { current = 7; } else { current = 0; } request.getSession().setAttribute("current", current); System.out.println("中间执行...."); } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { System.out.println("开始执行...."); // 获得项目名 String path = request.getContextPath(); HttpSession session = request.getSession(); // 从session中获得用户,查看用户是否登录 Admin admin = (Admin) session.getAttribute(Constant.USERNAME); // 没有登录 if (admin == null) { response.sendRedirect(path + "/user/login"); // 跳转到登录界面 return false; } // 获得用户的访问地址/xxx/xxx String url = request.getServletPath(); // 用户登录后检查权限 @SuppressWarnings("unchecked") Set<String> urls = (Set<String>) session.getAttribute(path + "urls"); // 如果用户有权限访问就跳转到对应页面 if (urls.contains(url)) { return true; } // 跳转到没有权限页面 response.sendRedirect(path + "/nopower.jsp"); return true; } }
package org.lyt.edu.procedure; public class TimePlan { public void execute() { System.out.println("定时任务执行!"); } }
package org.lyt.edu.webservice; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.lyt.edu.entity.Admin; /** * * @author liuyuantao * */ @Path("/helloService") public class HelloService { /** * * @param id * @return */ @GET @Path("getAdmin") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Admin getPaperById(@DefaultValue("") @QueryParam("id") Integer id) { Admin admin = new Admin(); admin.setId(id); admin.setName("Administrator"); return admin; } }
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building lyt-jersey-sjpa Maven Webapp 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-jetty-plugin:6.1.26:run (default-cli) > test-compile @ lyt-jersey-sjpa >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ lyt-jersey-sjpa --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 9 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ lyt-jersey-sjpa --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ lyt-jersey-sjpa --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ lyt-jersey-sjpa --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< maven-jetty-plugin:6.1.26:run (default-cli) < test-compile @ lyt-jersey-sjpa <<< [INFO] [INFO] --- maven-jetty-plugin:6.1.26:run (default-cli) @ lyt-jersey-sjpa --- [INFO] Configuring Jetty for project: lyt-jersey-sjpa Maven Webapp [INFO] Webapp source directory = E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\src\main\webapp [INFO] Reload Mechanic: automatic [INFO] Classes = E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes [INFO] Logging to org.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog [INFO] Context path = /lyt-jersey-sjpa [INFO] Tmp directory = determined at runtime [INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml [INFO] Web overrides = none [INFO] web.xml file = E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\src\main\webapp\WEB-INF\web.xml [INFO] Webapp directory = E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\src\main\webapp [INFO] Starting jetty 6.1.26 ... [INFO] jetty-6.1.26 [INFO] No Transaction manager found - if your webapp requires one, please configure one. [INFO] Initializing Spring root WebApplicationContext 一月 13, 2016 7:07:48 下午 org.springframework.web.context.ContextLoader initWebApplicationContext 信息: Root WebApplicationContext: initialization started 一月 13, 2016 7:07:48 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing Root WebApplicationContext: startup date [Wed Jan 13 19:07:48 CST 2016]; root of context hierarchy 一月 13, 2016 7:07:48 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from class path resource [applicationContext-quartz.xml] 一月 13, 2016 7:07:49 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Using default implementation for ThreadExecutor 一月 13, 2016 7:07:49 下午 org.quartz.core.SchedulerSignalerImpl <init> 信息: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 一月 13, 2016 7:07:49 下午 org.quartz.core.QuartzScheduler <init> 信息: Quartz Scheduler v.2.2.2 created. 一月 13, 2016 7:07:49 下午 org.quartz.simpl.RAMJobStore initialize 信息: RAMJobStore initialized. 一月 13, 2016 7:07:49 下午 org.quartz.core.QuartzScheduler initialize 信息: Scheduler meta-data: Quartz Scheduler (v2.2.2) 'schedulerFactoryBean' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 一月 13, 2016 7:07:49 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler 'schedulerFactoryBean' initialized from an externally provided properties instance. 一月 13, 2016 7:07:49 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler version: 2.2.2 一月 13, 2016 7:07:49 下午 org.quartz.core.QuartzScheduler setJobFactory 信息: JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@50ca11b3 一月 13, 2016 7:07:49 下午 org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start 信息: Starting beans in phase 2147483647 一月 13, 2016 7:07:49 下午 org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler 信息: Starting Quartz Scheduler now 一月 13, 2016 7:07:49 下午 org.quartz.core.QuartzScheduler start 信息: Scheduler schedulerFactoryBean_$_NON_CLUSTERED started. 一月 13, 2016 7:07:49 下午 org.springframework.web.context.ContextLoader initWebApplicationContext 信息: Root WebApplicationContext: initialization completed in 1128 ms 一月 13, 2016 7:07:49 下午 com.sun.jersey.api.core.PackagesResourceConfig init 信息: Scanning for root resource and provider classes in the packages: org.lyt.edu.webservice 一月 13, 2016 7:07:49 下午 com.sun.jersey.api.core.ScanningResourceConfig logClasses 信息: Root resource classes found: class org.lyt.edu.webservice.HelloService 一月 13, 2016 7:07:49 下午 com.sun.jersey.api.core.ScanningResourceConfig init 信息: No provider classes found. 一月 13, 2016 7:07:49 下午 com.sun.jersey.spi.spring.container.servlet.SpringServlet getContext 信息: Using default applicationContext 一月 13, 2016 7:07:49 下午 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 信息: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM' [INFO] Initializing Spring FrameworkServlet 'dispatcher-servlet' 一月 13, 2016 7:07:50 下午 org.springframework.web.servlet.FrameworkServlet initServletBean 信息: FrameworkServlet 'dispatcher-servlet': initialization started 一月 13, 2016 7:07:50 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing WebApplicationContext for namespace 'dispatcher-servlet-servlet': startup date [Wed Jan 13 19:07:50 CST 2016]; parent: Root WebApplicationContext 一月 13, 2016 7:07:50 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-aop.xml] 一月 13, 2016 7:07:50 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-datasource.xml] 一月 13, 2016 7:07:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-exception.xml] 一月 13, 2016 7:07:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-interceptor.xml] 一月 13, 2016 7:07:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-quartz.xml] 一月 13, 2016 7:07:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\OneDrive\DevelopCode\j2ee\practice\lyt-jersey-sjpa\target\classes\applicationContext-webmvc.xml] 一月 13, 2016 7:07:51 下午 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init> 信息: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 一月 13, 2016 7:07:52 下午 org.springframework.orm.jpa.persistenceunit.PersistenceUnitReader determinePersistenceUnitRootUrl 信息: persistence.xml should be located inside META-INF directory; cannot determine persistence unit root URL for class path resource [persistence.xml] 一月 13, 2016 7:07:52 下午 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory 信息: Building JPA container EntityManagerFactory for persistence unit 'spring.data.jpa' 一月 13, 2016 7:07:52 下午 org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. 一月 13, 2016 7:07:52 下午 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: spring.data.jpa ...] 一月 13, 2016 7:07:52 下午 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.3.11.Final} 一月 13, 2016 7:07:52 下午 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 一月 13, 2016 7:07:52 下午 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 一月 13, 2016 7:07:52 下午 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 一月 13, 2016 7:07:52 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 一月 13, 2016 7:07:53 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/lyt-jersey-sjpa?useUnicode=true&characterEncoding=utf8] 一月 13, 2016 7:07:53 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} 一月 13, 2016 7:07:53 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false 一月 13, 2016 7:07:53 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 一月 13, 2016 7:07:53 下午 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 一月 13, 2016 7:07:54 下午 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000228: Running hbm2ddl schema update 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000102: Fetching database metadata 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000396: Updating schema 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: lyt-jersey-sjpa.admin_info 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [id, email, name, admin_code, enrolldate, telephone, password] 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [] 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [primary] 一月 13, 2016 7:07:54 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000232: Schema update complete 一月 13, 2016 7:07:54 下午 org.springframework.core.io.support.PropertiesLoaderSupport loadProperties 信息: Loading properties file from class path resource [db.properties] 一月 13, 2016 7:07:55 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Using default implementation for ThreadExecutor 一月 13, 2016 7:07:55 下午 org.quartz.core.SchedulerSignalerImpl <init> 信息: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 一月 13, 2016 7:07:55 下午 org.quartz.core.QuartzScheduler <init> 信息: Quartz Scheduler v.2.2.2 created. 一月 13, 2016 7:07:55 下午 org.quartz.simpl.RAMJobStore initialize 信息: RAMJobStore initialized. 一月 13, 2016 7:07:55 下午 org.quartz.core.QuartzScheduler initialize 信息: Scheduler meta-data: Quartz Scheduler (v2.2.2) 'schedulerFactoryBean' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 一月 13, 2016 7:07:55 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler 'schedulerFactoryBean' initialized from an externally provided properties instance. 一月 13, 2016 7:07:55 下午 org.quartz.impl.StdSchedulerFactory instantiate 信息: Quartz scheduler version: 2.2.2 一月 13, 2016 7:07:55 下午 org.quartz.core.QuartzScheduler setJobFactory 信息: JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@159b572b 一月 13, 2016 7:07:55 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register 信息: Mapped "{[/admin/getAdmin2Json/{id}]}" onto public org.lyt.edu.entity.Admin org.lyt.edu.controller.AdminController.getAdmin2Json(java.lang.Integer) 一月 13, 2016 7:07:55 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register 信息: Mapped "{[/admin/toadmin]}" onto public java.lang.String org.lyt.edu.controller.AdminController.toadmin() 一月 13, 2016 7:07:56 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache 信息: Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet-servlet': startup date [Wed Jan 13 19:07:50 CST 2016]; parent: Root WebApplicationContext 一月 13, 2016 7:07:56 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache 信息: Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet-servlet': startup date [Wed Jan 13 19:07:50 CST 2016]; parent: Root WebApplicationContext 一月 13, 2016 7:07:56 下午 org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start 信息: Starting beans in phase 2147483647 一月 13, 2016 7:07:56 下午 org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler 信息: Starting Quartz Scheduler now 一月 13, 2016 7:07:56 下午 org.quartz.core.QuartzScheduler start 信息: Scheduler schedulerFactoryBean_$_NON_CLUSTERED started. 一月 13, 2016 7:07:56 下午 org.springframework.web.servlet.FrameworkServlet initServletBean 信息: FrameworkServlet 'dispatcher-servlet': initialization completed in 6171 ms [INFO] Started [email protected]:8080 [INFO] Started Jetty Server [INFO] Starting scanner at interval of 1 seconds.至此整个项目的搭建完成