From c26418aaf8c3826009ba8dca22b017649f06f3aa Mon Sep 17 00:00:00 2001 From: luffy9412 <1029559041@qq.com> Date: Mon, 7 Aug 2017 18:33:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 120 ++++++++++++++++++ src/main/java/org/pqh/aop/InsertAdvice.java | 17 +++ src/main/java/org/pqh/aop/InsertAdvisor.java | 17 +++ src/main/java/org/pqh/aop/LogAspect.java | 22 ++++ src/main/java/org/pqh/aop/MatcherRule.java | 11 ++ .../java/org/pqh/config/HibernateConfig.java | 60 +++++++++ .../java/org/pqh/config/SpringConfig.java | 27 ++++ src/main/java/org/pqh/config/WebConfig.java | 51 ++++++++ .../pqh/controller/AbstractController.java | 49 +++++++ .../org/pqh/controller/ParamController.java | 22 ++++ src/main/java/org/pqh/dao/BaseDao.java | 35 +++++ .../java/org/pqh/model/AbstractModel.java | 11 ++ src/main/java/org/pqh/model/Config.java | 47 +++++++ src/main/java/org/pqh/model/Param.java | 83 ++++++++++++ src/main/java/org/pqh/util/DBAction.java | 11 ++ src/main/resources/log4j2.xml | 26 ++++ src/main/webapp/WEB-INF/jsp/index.jsp | 10 ++ src/test/java/JunitTest.java | 41 ++++++ 18 files changed, 660 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/org/pqh/aop/InsertAdvice.java create mode 100644 src/main/java/org/pqh/aop/InsertAdvisor.java create mode 100644 src/main/java/org/pqh/aop/LogAspect.java create mode 100644 src/main/java/org/pqh/aop/MatcherRule.java create mode 100644 src/main/java/org/pqh/config/HibernateConfig.java create mode 100644 src/main/java/org/pqh/config/SpringConfig.java create mode 100644 src/main/java/org/pqh/config/WebConfig.java create mode 100644 src/main/java/org/pqh/controller/AbstractController.java create mode 100644 src/main/java/org/pqh/controller/ParamController.java create mode 100644 src/main/java/org/pqh/dao/BaseDao.java create mode 100644 src/main/java/org/pqh/model/AbstractModel.java create mode 100644 src/main/java/org/pqh/model/Config.java create mode 100644 src/main/java/org/pqh/model/Param.java create mode 100644 src/main/java/org/pqh/util/DBAction.java create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/main/webapp/WEB-INF/jsp/index.jsp create mode 100644 src/test/java/JunitTest.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..91d8903 --- /dev/null +++ b/pom.xml @@ -0,0 +1,120 @@ + + + 4.0.0 + + org.pqh + webCrawler + pom + 1.0 + + 简单的网络爬虫客户端 + + + UTF-8 + UTF-8 + 1.8 + 6.0.6 + + + + + + org.springframework + spring-web + LATEST + + + + org.springframework + spring-webmvc + LATEST + + + + org.springframework + spring-orm + LATEST + + + + + + + + + + + + + + + + org.apache.commons + commons-dbcp2 + LATEST + + + org.hibernate + hibernate-core + LATEST + + + + mysql + mysql-connector-java + ${mysql.version} + + + + com.fasterxml.jackson.core + jackson-databind + LATEST + + + + org.aspectj + aspectjweaver + LATEST + + + + org.apache.logging.log4j + log4j-api + LATEST + + + + org.apache.logging.log4j + log4j-core + LATEST + + + + org.fusesource.jansi + jansi + LATEST + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + diff --git a/src/main/java/org/pqh/aop/InsertAdvice.java b/src/main/java/org/pqh/aop/InsertAdvice.java new file mode 100644 index 0000000..4ec3ac2 --- /dev/null +++ b/src/main/java/org/pqh/aop/InsertAdvice.java @@ -0,0 +1,17 @@ +package org.pqh.aop; + +import org.springframework.aop.MethodBeforeAdvice; + +import java.lang.reflect.Method; +import java.util.Arrays; + +/** + * Created by reborn on 2017/8/3. + */ +public class InsertAdvice implements MethodBeforeAdvice { + + @Override + public void before(Method method, Object[] objects, Object o) throws Throwable { + System.out.println("类:"+o.getClass()+",方法:"+method.getName()+"被调用,传入参数:"+ Arrays.asList(objects)); + } +} diff --git a/src/main/java/org/pqh/aop/InsertAdvisor.java b/src/main/java/org/pqh/aop/InsertAdvisor.java new file mode 100644 index 0000000..9c0a8b7 --- /dev/null +++ b/src/main/java/org/pqh/aop/InsertAdvisor.java @@ -0,0 +1,17 @@ +package org.pqh.aop; + +import org.pqh.dao.BaseDao; +import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor; + +import java.lang.reflect.Method; + +/** + * Created by reborn on 2017/8/3. + */ +public class InsertAdvisor extends StaticMethodMatcherPointcutAdvisor { + @Override + public boolean matches(Method method, Class aClass) { + return method.getName().equals("get")&& BaseDao.class.isAssignableFrom(aClass); + } + +} diff --git a/src/main/java/org/pqh/aop/LogAspect.java b/src/main/java/org/pqh/aop/LogAspect.java new file mode 100644 index 0000000..0b4647d --- /dev/null +++ b/src/main/java/org/pqh/aop/LogAspect.java @@ -0,0 +1,22 @@ +package org.pqh.aop; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +/** + * Created by reborn on 2017/8/3. + */ +@Aspect +@Component +public class LogAspect { + + @Before(value = "org.pqh.aop.MatcherRule.biliDaoRule()") + public void curdCallAction(JoinPoint joinPoint){ + for(Object arg:joinPoint.getArgs()){ + System.out.println("参数"+arg); + } + } + +} diff --git a/src/main/java/org/pqh/aop/MatcherRule.java b/src/main/java/org/pqh/aop/MatcherRule.java new file mode 100644 index 0000000..ecce2be --- /dev/null +++ b/src/main/java/org/pqh/aop/MatcherRule.java @@ -0,0 +1,11 @@ +package org.pqh.aop; + +import org.aspectj.lang.annotation.Pointcut; + +/** + * Created by reborn on 2017/8/3. + */ +public class MatcherRule { + @Pointcut("execution(* org.pqh.dao.BaseDao.*(..))") + public void biliDaoRule(){} +} diff --git a/src/main/java/org/pqh/config/HibernateConfig.java b/src/main/java/org/pqh/config/HibernateConfig.java new file mode 100644 index 0000000..e20ba06 --- /dev/null +++ b/src/main/java/org/pqh/config/HibernateConfig.java @@ -0,0 +1,60 @@ +package org.pqh.config; + +import org.apache.commons.dbcp2.BasicDataSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.orm.hibernate5.HibernateTemplate; +import org.springframework.orm.hibernate5.HibernateTransactionManager; +import org.springframework.orm.hibernate5.LocalSessionFactoryBean; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import java.io.IOException; +import java.util.Properties; + +/** + * Created by reborn on 2017/7/28. + */ +@Configuration +@EnableTransactionManagement +public class HibernateConfig { + + private LocalSessionFactoryBean sessionFactoryBean; + private BasicDataSource dataSource; + + public HibernateConfig() { + dataSource=new BasicDataSource(); + dataSource.setUrl("jdbc:mysql://localhost:3306/bilibili?serverTimezone=UTC&&useSSL=true"); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUsername("root"); + dataSource.setPassword("123456"); + sessionFactoryBean = new LocalSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + Properties properties=new Properties(); + properties.setProperty("hibernate.connection.pool_size","5"); + properties.setProperty("hibernate.jdbc.fetch_size","50"); + properties.setProperty("hibernate.dialect","org.hibernate.dialect.MySQL57Dialect"); + sessionFactoryBean.setHibernateProperties(properties); + sessionFactoryBean.setPackagesToScan("org.pqh.model"); + try { + sessionFactoryBean.afterPropertiesSet(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Bean("transactionManager") + public HibernateTransactionManager hibernateTransactionManager(){ + HibernateTransactionManager hibernateTransactionManager=new HibernateTransactionManager(); + hibernateTransactionManager.setSessionFactory(this.sessionFactoryBean.getObject()); + return hibernateTransactionManager; + } + + @Bean(name="hibernateTemplate") + public HibernateTemplate hibernateTemplate(){ + HibernateTemplate hibernateTemplate=new HibernateTemplate(); + hibernateTemplate.setSessionFactory(sessionFactoryBean.getObject()); + return hibernateTemplate; + } + + +} diff --git a/src/main/java/org/pqh/config/SpringConfig.java b/src/main/java/org/pqh/config/SpringConfig.java new file mode 100644 index 0000000..4127739 --- /dev/null +++ b/src/main/java/org/pqh/config/SpringConfig.java @@ -0,0 +1,27 @@ +package org.pqh.config; + +import org.springframework.context.annotation.*; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +/** + * Created by reborn on 2017/7/28. + */ +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = "org.pqh") +@EnableAspectJAutoProxy +@Import(HibernateConfig.class) +public class SpringConfig{ + + + @Bean("viewReslover") + public InternalResourceViewResolver internalResourceViewResolver(){ + InternalResourceViewResolver internalResourceViewResolver=new InternalResourceViewResolver(); + internalResourceViewResolver.setPrefix("/WEB-INF/jsp/"); + internalResourceViewResolver.setSuffix(".jsp"); + return internalResourceViewResolver; + } + + +} diff --git a/src/main/java/org/pqh/config/WebConfig.java b/src/main/java/org/pqh/config/WebConfig.java new file mode 100644 index 0000000..13ffed1 --- /dev/null +++ b/src/main/java/org/pqh/config/WebConfig.java @@ -0,0 +1,51 @@ +package org.pqh.config; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.filter.CharacterEncodingFilter; +import org.springframework.web.servlet.DispatcherServlet; + +import javax.servlet.*; +import java.util.EnumSet; + +/** + * Created by reborn on 2017/7/28. + */ +public class WebConfig implements WebApplicationInitializer { + + private String suffix="*.miku"; + + private String fileEncoding="UTF-8"; + + public void onStartup(ServletContext servletContext) throws ServletException { + //基于注解配置的上下文 + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + //注册Spring容器配置类 + context.register(SpringConfig.class); + ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); + //配置映射路径 + servletContext.log("DispatcherServlet配置映射路径匹配规则:"+suffix); + servlet.addMapping("/",suffix); + //启动顺序 + servlet.setLoadOnStartup(1); + + + servletContext.addListener(new ContextLoaderListener(context)); + + FilterRegistration.Dynamic characterEncodingFilter=servletContext.addFilter("CharacterEncodingFilter", CharacterEncodingFilter.class); + servletContext.log("CharacterEncodingFilter设置编码:"+fileEncoding); + characterEncodingFilter.setInitParameter("encoding",fileEncoding); + characterEncodingFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*"); + +// FilterRegistration.Dynamic openSessionInViewFilter=servletContext.addFilter("OpenSessionInViewFilter", OpenSessionInViewFilter.class); +// openSessionInViewFilter.setInitParameter("flushMode","AUTO"); +// openSessionInViewFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*"); + + + + } + +} + + diff --git a/src/main/java/org/pqh/controller/AbstractController.java b/src/main/java/org/pqh/controller/AbstractController.java new file mode 100644 index 0000000..edb0f04 --- /dev/null +++ b/src/main/java/org/pqh/controller/AbstractController.java @@ -0,0 +1,49 @@ +package org.pqh.controller; + +import org.pqh.dao.BaseDao; +import org.pqh.model.AbstractModel; +import org.pqh.util.DBAction; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.annotation.Resource; + +/** + * Created by reborn on 2017/7/28. + */ +@Controller +public abstract class AbstractController { + + @Resource + private BaseDao baseDao; + + @RequestMapping("/") + public String index(){ + return "index"; + } + + + public String curd(DBAction action,T formModel){ + Class tClass= (Class) formModel.getClass(); + try { + switch (action) { + case Insert: + case Update: + baseDao.saveOrUpdate(formModel); + break; + case Select: + T model = baseDao.get(tClass, formModel.primaryKey()); + return model == null ? "找不到主键=" + formModel.primaryKey() + "" : model.toString(); + case Delete: + baseDao.delete(tClass, formModel.primaryKey()); + break; + } + return action+" success"; + }catch (DataAccessException e){ + + } + return action+" fail"; + } + +} diff --git a/src/main/java/org/pqh/controller/ParamController.java b/src/main/java/org/pqh/controller/ParamController.java new file mode 100644 index 0000000..c8f3b0c --- /dev/null +++ b/src/main/java/org/pqh/controller/ParamController.java @@ -0,0 +1,22 @@ +package org.pqh.controller; + +import org.pqh.model.Param; +import org.pqh.util.DBAction; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * Created by reborn on 2017/8/3. + */ +@Controller +public class ParamController extends AbstractController { + @Override + @ResponseBody + @RequestMapping(value = "/param/{action}",produces = "text/html;charset=UTF-8") + public String curd(@PathVariable DBAction action,@ModelAttribute Param formModel) { + return super.curd(action, formModel); + } +} diff --git a/src/main/java/org/pqh/dao/BaseDao.java b/src/main/java/org/pqh/dao/BaseDao.java new file mode 100644 index 0000000..1a3d860 --- /dev/null +++ b/src/main/java/org/pqh/dao/BaseDao.java @@ -0,0 +1,35 @@ +package org.pqh.dao; + +import org.pqh.model.AbstractModel; +import org.springframework.dao.DataAccessException; +import org.springframework.orm.hibernate5.HibernateTemplate; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.Serializable; + +/** + * Created by reborn on 2017/7/31. + */ +@Repository +@Transactional +public class BaseDao { + @Resource + private HibernateTemplate hibernateTemplate; + + public T get(Class T, Serializable pk) throws DataAccessException{ + return hibernateTemplate.get(T,pk); + } + + public void saveOrUpdate(T model)throws DataAccessException{ + hibernateTemplate.saveOrUpdate(model); + } + + public void delete(Class T,Serializable key) throws DataAccessException { + T model= get(T,key); + if(model!=null){ + hibernateTemplate.delete(model); + } + } +} diff --git a/src/main/java/org/pqh/model/AbstractModel.java b/src/main/java/org/pqh/model/AbstractModel.java new file mode 100644 index 0000000..2df4b98 --- /dev/null +++ b/src/main/java/org/pqh/model/AbstractModel.java @@ -0,0 +1,11 @@ +package org.pqh.model; + +import java.io.Serializable; + +/** + * Created by reborn on 2017/8/3. + */ + +public abstract class AbstractModel { + public abstract Serializable primaryKey(); +} diff --git a/src/main/java/org/pqh/model/Config.java b/src/main/java/org/pqh/model/Config.java new file mode 100644 index 0000000..69eea3d --- /dev/null +++ b/src/main/java/org/pqh/model/Config.java @@ -0,0 +1,47 @@ +package org.pqh.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * Created by reborn on 2017/8/3. + */ +@Entity +@Table(name="testjson") +public class Config extends AbstractModel{ + + private String jackson; + + @Id + @Column(name = "jackson") + public String getJackson() { + return jackson; + } + + public void setJackson(String jackson) { + this.jackson = jackson; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Config config = (Config) o; + + return jackson.equals(config.jackson); + } + + @Override + public int hashCode() { + return jackson.hashCode(); + } + + @Override + public Serializable primaryKey() { + return getJackson(); + } +} diff --git a/src/main/java/org/pqh/model/Param.java b/src/main/java/org/pqh/model/Param.java new file mode 100644 index 0000000..52ed8a7 --- /dev/null +++ b/src/main/java/org/pqh/model/Param.java @@ -0,0 +1,83 @@ +package org.pqh.model; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import java.io.Serializable; + +/** + * Created by reborn on 2017/7/31. + */ +@Entity +public class Param extends AbstractModel{ + private String key; + private String value; + private String desc; + + @Id + @Column(name = "`key`") + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + @Basic + @Column(name = "value") + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Basic + @Column(name = "`desc`") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Param param = (Param) o; + + if (key != null ? !key.equals(param.key) : param.key != null) return false; + if (value != null ? !value.equals(param.value) : param.value != null) return false; + if (desc != null ? !desc.equals(param.desc) : param.desc != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = key != null ? key.hashCode() : 0; + result = 31 * result + (value != null ? value.hashCode() : 0); + result = 31 * result + (desc != null ? desc.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "Param{" + + "key='" + key + '\'' + + ", value='" + value + '\'' + + ", desc='" + desc + '\'' + + '}'; + } + + @Override + public Serializable primaryKey() { + return getKey(); + } +} diff --git a/src/main/java/org/pqh/util/DBAction.java b/src/main/java/org/pqh/util/DBAction.java new file mode 100644 index 0000000..1fd431c --- /dev/null +++ b/src/main/java/org/pqh/util/DBAction.java @@ -0,0 +1,11 @@ +package org.pqh.util; + +/** + * Created by reborn on 2017/8/2. + */ +public enum DBAction { + Insert, + Update, + Delete, + Select +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..96f54c7 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,26 @@ + + + + %d{yyyy-MM-dd HH:mm:ss} %p %l%n%m%n + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/index.jsp b/src/main/webapp/WEB-INF/jsp/index.jsp new file mode 100644 index 0000000..7ec7e4e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/index.jsp @@ -0,0 +1,10 @@ + + + + + Title + + +

hello world

+ + \ No newline at end of file diff --git a/src/test/java/JunitTest.java b/src/test/java/JunitTest.java new file mode 100644 index 0000000..717ddb9 --- /dev/null +++ b/src/test/java/JunitTest.java @@ -0,0 +1,41 @@ +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LoggerContext; + +import java.net.URI; +import java.net.URISyntaxException; + +/** + * Created by reborn on 2017/8/3. + */ + +public class JunitTest { + private static final Logger rootLogger= LogManager.getLogger(); + private static final Logger consoleLogger= LogManager.getLogger("org.apache.logging.log4j.test1"); + private static final Logger loggerFile= LogManager.getLogger("org.apache.logging.log4j.test2"); + + public static void main(String[] args) { +// rootLogger.info("rootLogger"); +// consoleLogger.info("consoleLogger"); +// loggerFile.info("loggerFile"); + +// LoggerContext loggerContext= (LoggerContext) LogManager.getContext(false); +// +// Collection loggers=loggerContext.getLoggers(); +// for(org.apache.logging.log4j.core.Logger logger:loggers){ +// logger.info(logger.getName()); +// } + + LoggerContext loggerContext= (LoggerContext) LogManager.getContext(false); + try { + loggerContext.setConfigLocation(new URI("https://github.com/luffy9412/Bilibili/blob/master/src/main/resources/log4j.properties")); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + +// loggerContext.setConfigLocation(); + + loggerContext.reconfigure(); + } + +}