需要准备的环境:
idea .3.2
jdk1.8
Maven 3.3.9
请提前将idea与Maven、jdk配置好,本次项目用的都是比较新的
注:配置完ide红线报错没关系!可以run!
第一步:创建Maven
一、创建项目
1、 新建project,选择maven项目,勾选“Create from archetype”,选择相应的jdk以及webapp,进行下一步。
配置:src/main/resources包下 新建三个文件夹
点击src/main/resources —右键----new----other----General-----Folder
有人会问arhetype-webapp 和arhetype-quickstart 前者是前后台 后者只有后台的普通JAVA工程 常用的还是前者。
2、设置项目名称以及版本。这边需要填写组织名称、项目名称以及版本号,版本号可以默认。
3、设置maven。这边一般不选择IDEA自带的maven,一般下载最新版的maven以及本地配置自己的仓库路径,最好是在maven中配置相应的阿里云镜像等。
maven下载安装环境配置
/qq_30225725/article/details/109664519
Maven配置本地仓库
/qq_30225725/article/details/109664793
4、设置参数,加快jar包下载速度。
如果没有配置这个参数,在maven生成骨架的时候将会非常慢,有时候直接卡住。archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了所以导致很慢,指定internal来表示仅使用内部元数据。
二、创建java和resources
首先创建两个文件夹并命名,然后再分别进行标记
java:
resources:
…
二、项目启动
1、项目架构
通过前面的创建步骤,等待一会就创建成功了。
2、配置tomcat。
项目新建成功后,需要配置容器运行项目。这边选择tomcat进行项目启动,本地需要下载相应的tomcat。
Tomcat的下载及环境变量配置
/qq_30225725/article/details/109665406
在IntelliJ IDEA配置Tomcat
/qq_30225725/article/details/109665651
3.SSM新建目录结构
(1)配置pom.xml 加载maven工厂
<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>camel.xxgzhpt.cs</groupId><artifactId>camel.xxgzhpt.cs</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>camel.xxgzhpt.cs Maven Webapp</name><!-- FIXME change it to the project's website --><url></url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>1.7</piler.source><piler.target>1.7</piler.target><!-- spring版本号 --><spring.version>4.0.0.RELEASE</spring.version><!-- mybatis版本号 --><mybatis.version>3.4.1</mybatis.version><!-- mybatis/spring版本号 --><mybatis.spring.version>1.3.1</mybatis.spring.version><!-- log4j日志文件管理包版本 --><slf4j.version>1.7.7</slf4j.version><log4j.version>1.2.17</log4j.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><!-- 表示开发的时候引入,发布的时候不会加载此包 --><scope>test</scope></dependency><!-- spring核心包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- mybatis核心包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- mybatis/spring包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><!-- 导入Mysql数据库链接jar包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version><!--<scope>runtime</scope>--></dependency><!-- 日志文件管理包 --><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!-- 上传组件包 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version></dependency><!-- mybatis分页插件依赖 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.0.0</version></dependency><!--前后端分离解决跨域的jar包--><dependency><groupId>com.thetransactioncompany</groupId><artifactId>cors-filter</artifactId><version>2.6</version></dependency><!--Springmvc的AOP配合shiro实现权限管理--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.6.11</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.3</version></dependency><!-- c3p0 数据库连接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!--json的jar包--><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><!-- /artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- /artifact/javax.servlet/jstl --><!-- jsp 标签库--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 日期时间工具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency><!-- java对象和json相互转化--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.3.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.3.3</version></dependency><!-- 接口的日志包--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.7</version></dependency></dependencies><build><finalName>camel.xxgzhpt.cs</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see /ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin><!--mybatis-generator插件,主要用于mybatis自动生成dao,model,mapping--><!-- 血泪史 下载mybatis plugs idea直接闪退--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><verbose>true</verbose><overwrite>true</overwrite></configuration></plugin></plugins></pluginManagement></build></project>
(2)web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd" version="2.5"><!-- 定义了WEB应用的名字--><display-name>Archetype Created Web Application</display-name><!-- 声明WEB应用的描述信息--><description>weixingongzhonghao-pingtai</description><!-- <filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。--><!-- 编码过滤器 --><filter><filter-name>encodingFilter</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-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联--><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- <listener></listener>servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。--><!-- Listener元素指出事件监听程序类。--><!-- Spring监听器 监听加载相关配置文件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- <servlet></servlet> 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。--><!-- 基本配置 :--><!-- <servlet>--><!-- <servlet-name>snoop</servlet-name>--><!-- <servlet-class>SnoopServlet</servlet-class>--><!-- </servlet>--><!-- <servlet-mapping>--><!-- <servlet-name>snoop</servlet-name>--><!-- <url-pattern>/snoop</url-pattern>--><!-- </servlet-mapping>--><!-- 高级配置--><!-- <servlet>--><!-- <servlet-name>snoop</servlet-name>--><!-- <servlet-class>SnoopServlet</servlet-class>--><!-- <init-param>--><!--<param-name>foo</param-name>--><!--<param-value>bar</param-value>--><!-- </init-param>--><!-- <run-as>--><!--<description>Security role for anonymous access</description>--><!--<role-name>tomcat</role-name>--><!-- </run-as>--><!-- </servlet>--><!-- <servlet-mapping>--><!--Spring MVC servlet--><!-- 配置springmvc的前端控制器 指向spring-mvc.xml 程序在启动的时候就加载springmvc 可以接受所有请求 load-on-startup:表示启动容器时初始化该Servlet; --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 可以自定义servlet.xml配置文件的位置和名称, 默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring/applicationContext-web.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 取消对某一类文件的拦截--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- <listener>--><!-- <listener-class>--><!--org.springframework.web.context.request.RequestContextListener--><!-- </listener-class>--><!-- </listener>--><!-- <!– shiro的filter –>--><!-- <!– shiro过虑器,DelegatingFilterProxy通过代理模式将spring容器中的bean和filter关联起来 –>--><!-- <filter>--><!-- <filter-name>shiroFilter</filter-name>--><!-- <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>--><!-- <!– 设置true由servlet容器控制filter的生命周期 –>--><!-- <init-param>--><!--<param-name>targetFilterLifecycle</param-name>--><!--<param-value>true</param-value>--><!-- </init-param>--><!-- <!– 设置spring容器filter的bean id,如果不设置则找与filter-name一致的bean–>--><!-- <init-param>--><!--<param-name>targetBeanName</param-name>--><!--<param-value>shiroFilter</param-value>--><!-- </init-param>--><!-- </filter>--><!-- <filter-mapping>--><!-- <filter-name>shiroFilter</filter-name>--><!-- <url-pattern>/*</url-pattern>--><!-- </filter-mapping>--><!-- <servlet-name>snoop</servlet-name>--><!-- <url-pattern>/snoop</url-pattern>--><!-- </servlet-mapping>--><!-- <servlet-mapping></servlet-mapping> 服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName。--><!-- 但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。--><!-- 元素说明--><!-- <servlet></servlet> 用来声明一个servlet的数据,主要有以下子元素:--><!-- <servlet-name></servlet-name> 指定servlet的名称--><!-- <servlet-class></servlet-class> 指定servlet的类名称--><!-- <jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径--><!-- <init-param></init-param> 用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数--><!-- <load-on-startup></load-on-startup>指定当Web应用启动时,装载Servlet的次序。--><!-- 当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.--><!-- 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它--><!-- <servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素--><!-- <servlet-name></servlet-name> 指定servlet的名称--><!-- <url-pattern></url-pattern> 指定servlet所对应的URL--><!-- <session-config></session-config> 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。--><!-- 可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。--><session-config><session-timeout>120</session-timeout></session-config><!-- MIME类型配置--><!-- <mime-mapping></mime-mapping>如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。--><!-- <mime-mapping>--><!-- <extension>htm</extension>--><!-- <mime-type>text/html</mime-type>--><!-- </mime-mapping>--><!-- 指定欢迎文件页配置--><!-- <welcome-file-list></welcome-file-list> 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。--><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file></welcome-file-list><!-- 11、配置错误页面--><!-- 11.1、 通过错误码来配置error-page--><!-- <error-page></error-page> 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。--><!-- <error-page>--><!-- <error-code>404</error-code>--><!--<!– <location>/NotFound.jsp</location>–>--><!-- </error-page>--><!-- <taglib></taglib> 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,--><!-- 而不用编辑使用这些文件的JSP页面。--><!-- <jsp-config>--><!-- <taglib>--><!-- <taglib-uri>/tomcat/debug-taglib</taglib-uri>--><!-- <taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location>--><!-- </taglib>--><!-- </jsp-config>--><!-- 资源管理对象配置--><!-- <resource-env-ref></resource-env-ref>声明与资源相关的一个管理对象。--><!-- <resource-env-ref>--><!-- <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>--><!-- </resource-env-ref>--><!-- 资源工厂配置--><!-- <resource-ref></resource-ref> 声明一个资源工厂使用的外部资源。--><!-- <resource-ref>--><!-- <res-ref-name>mail/Session</res-ref-name>--><!-- <res-type>javax.mail.Session</res-type>--><!-- <res-auth>Container</res-auth>--><!-- </resource-ref>--><!-- 配置数据库连接池就可在此配置:--><!-- <resource-ref>--><!-- <description>JNDI JDBC DataSource of shop</description>--><!-- <res-ref-name>jdbc/sample_db</res-ref-name>--><!-- <res-type>javax.sql.DataSource</res-type>--><!-- <res-auth>Container</res-auth>--><!-- </resource-ref>--><!-- 安全限制配置--><!-- <security-constraint></security-constraint> 制定应该保护的URL。它与login-config元素联合使用--><!-- <security-constraint>--><!-- <display-name>Example Security Constraint</display-name>--><!-- <web-resource-collection>--><!--<web-resource-name>Protected Area</web-resource-name>--><!--<url-pattern>/jsp/security/protected/*</url-pattern>--><!--<http-method>DELETE</http-method>--><!--<http-method>GET</http-method>--><!--<http-method>POST</http-method>--><!--<http-method>PUT</http-method>--><!-- </web-resource-collection>--><!-- <auth-constraint>--><!--<role-name>tomcat</role-name>--><!--<role-name>role1</role-name>--><!-- </auth-constraint>--><!-- </security-constraint>--><!-- 登陆验证配置--><!-- <login-config></login-config> 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。--><!-- <login-config>--><!-- <auth-method>FORM</auth-method>--><!-- <realm-name>Example-Based Authentiation Area</realm-name>--><!-- <form-login-config>--><!--<form-login-page>/jsp/security/protected/login.jsp</form-login-page>--><!--<form-error-page>/jsp/security/protected/error.jsp</form-error-page>--><!-- </form-login-config>--><!-- </login-config>--><!-- <security-role></security-role>给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素--><!-- 的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。--><!-- 安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。--><!-- 分别地声明角色可使高级IDE处理安全信息更为容易。--><!-- <security-role>--><!-- <role-name>tomcat</role-name>--><!-- </security-role>--><!-- <env-entry></env-entry>声明Web应用的环境项。--><!-- Web环境参数:env-entry元素声明Web应用的环境项--><!-- <env-entry>--><!-- <env-entry-name>minExemptions</env-entry-name>--><!-- <env-entry-value>1</env-entry-value>--><!-- <env-entry-type>java.lang.Integer</env-entry-type>--><!-- </env-entry>--><!-- EJB 声明--><!-- <ejb-ref></ejb-ref>声明一个EJB的主目录的引用。--><!-- <ejb-ref>--><!-- <description>Example EJB reference</decription>--><!-- <ejb-ref-name>ejb/Account</ejb-ref-name>--><!-- <ejb-ref-type>Entity</ejb-ref-type>--><!-- <home>com.mycompany.mypackage.AccountHome</home>--><!-- <remote>com.mycompany.mypackage.Account</remote>--><!-- </ejb-ref>--><!-- 本地EJB声明--><!-- < ejb-local-ref></ ejb-local-ref>声明一个EJB的本地主目录的应用。--><!-- <ejb-local-ref>--><!-- <description>Example Loacal EJB reference</decription>--><!-- <ejb-ref-name>ejb/ProcessOrder</ejb-ref-name>--><!-- <ejb-ref-type>Session</ejb-ref-type>--><!-- <local-home>com.mycompany.mypackage.ProcessOrderHome</local-home>--><!-- <local>com.mycompany.mypackage.ProcessOrder</local>--><!-- </ejb-local-ref>--><!-- 配置DWR--><!-- <servlet>--><!-- <servlet-name>dwr-invoker</servlet-name>--><!-- <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>--><!-- </servlet>--><!-- <servlet-mapping>--><!-- <servlet-name>dwr-invoker</servlet-name>--><!-- <url-pattern>/dwr/*</url-pattern>--><!-- </servlet-mapping>--><!-- 配置Struts--><!-- <filter>--><!-- <filter-name>struts</filter-name>--><!-- <filter-class>--><!--org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>--><!-- </filter>--><!-- <filter-mapping>--><!-- <filter-name>struts</filter-name>--><!-- <url-pattern>/*</url-pattern>--><!-- </filter-mapping>--><!--spring的其他配置文件(包括mybatis配置文件) --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring/applicationContext.xml</param-value></context-param><!--log4j日志--><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.xml</param-value></context-param></web-app>
mapper文件夹 主要放xml文件 AdDao.xml 属于bean的实现类 写SQL
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><!--namespace命名空间 ,它的作用是对SQL进行分类化管理 --><mapper namespace="com.camel.ssm.dao.AdDao"><!--<insert id="insert" parameterType="Ad">--><!--insert into ad(title,img_file_name,link,weight) values(#{title},#{imgFileName},#{link},#{weight})--><!--</insert>--><!--<select id="selectByPage" resultType="Ad" parameterType="Ad">--><!--select id,title,img_file_name,link,weight from ad--><!--<where>--><!--<if test="title!=null and title!=''">--><!--title like '%${title}%'--><!--</if>--><!--</where>--><!--order by weight desc,id--><!--</select>--></mapper>
properties文件夹
dao.properties 数据库的信息
#mysqldataSource.url=jdbc:mysql://localhost:3306/dzdp?useUnicode=true&characterEncoding=utf8dataSource.username=rootdataSource.password=dataSource.initialSize=3dataSource.maxActive=1000dataSource.minIdle=0dataSource.maxWait=6000dataSource.removeAbandoned=truedataSource.removeAbandonedTimeout=1800dataSource.timeBetweenEvictionRunsMillis=60000dataSource.minEvictableIdleTimeMillis=25200000dataSource.validationQuery=select getdate()dataSource.testWhileIdle=falsedataSource.testOnBorrow=falsedataSource.testOnReturn=false
logback.properties 日记Log4J
或者log4j.xml 二选一
logback.properties配置如下
log.base=d:/logs/log.level=DEBUGlog.appender.ref=stdout
log4j.xml 配置如下
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j='/log4j/'><!--ConsoleAppender:输出到控制台--><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><!--<param name="encoding" value="UTF-8"/>--><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d [%t] %p - %m%n"/></layout><filter class="org.apache.log4j.varia.LevelRangeFilter"><!-- 设置日志输出的最小级别 --><param name="levelMin" value="DEBUG"/><!-- 设置日志输出的最大级别 --><param name="levelMax" value="FATAL"/><!-- 设置日志输出的xxx,默认是false --><param name="AcceptOnMatch" value="true"/></filter></appender><!--输出到日志文件--><appender name="PROJECT" class="org.apache.log4j.DailyRollingFileAppender"><!-- 设置日志信息输出文件全路径名 --><param name="file" value="${catalina.home}/logs/ceshi/info.log"/><!--日志文件编码--><param name="encoding" value="UTF-8"/><!--此日志文件级别--><param name="threshold" value="info"/><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --><param name="Append" value="true"/><!-- 设置保存备份回滚日志的最大个数 --><param name="MaxBackupIndex" value="10"/><!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB --><param name="MaxFileSize" value="50MB"/><!-- 设置日志输出的样式 --><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d [%X{requestURIWithQueryString}] %-5p %c{2} - %m%n"/></layout></appender><appender name="PROJECT-ERROR" class="org.apache.log4j.DailyRollingFileAppender"><param name="file" value="${catalina.home}/logs/ceshi/error.log"/><param name="append" value="true"/><param name="encoding" value="UTF-8"/><param name="threshold" value="error"/><param name="MaxBackupIndex" value="10"/><param name="MaxFileSize" value="50MB"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d [%X{requestURIWithQueryString}] %-5p %c{2} - %m%n"/></layout></appender><!--开发测试使用debug级别--><appender name="PROJECT-DEBUG" class="org.apache.log4j.DailyRollingFileAppender"><param name="file" value="${catalina.home}/logs/ceshi/debug.log"/><param name="append" value="false"/><param name="encoding" value="UTF-8"/><param name="threshold" value="debug"/><param name="MaxBackupIndex" value="10"/><param name="MaxFileSize" value="50MB"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d [%X{requestURIWithQueryString}] %-5p %c{2} - %m%n"/></layout></appender><!--总的日志级别--><root><level value="DEBUG"/><appender-ref ref="PROJECT"/><appender-ref ref="PROJECT-DEBUG"/><appender-ref ref="PROJECT-ERROR"/><appender-ref ref="STDOUT"/></root></log4j:configuration>
PS 复制下图的地址时会报错URI未注册(设置|语言和框架|模式和dtd)
解决方法:
File - Settings - schemas and DtDs
点击加号 把路径考进去
更多免费教学文章请关注这里
system.properties 图片服务器tomcat引用地址
adImage.savePath=D:/apache-tomcat-7.0.86-windows-x64/apache-tomcat-7.0.86/wtpwebapps/upload/ad/
4.spring文件夹包括
applicationContext-dao.xml 底层与数据库连接 基于mybatis 连接数据池,简化JDBC代码 持久层框架
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/context /schema/context/spring-context.xsd"><!-- 配置数据源 --><bean id="dataSource" class="com.mchange.boPooledDataSource" destroy-method="close"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="${dataSource.url}"></property><property name="user" value="${dataSource.username}"></property><property name="password" value="${dataSource.password}"></property><!-- 每60秒检查所有连接池中的空闲连接。Default: 0 --><property name="idleConnectionTestPeriod" value="60" /><!-- 初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --><property name="initialPoolSize" value="5" /><!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --><property name="maxIdleTime" value="60" /><!-- 连接池中保留的最大连接数。Default: 15 --><property name="maxPoolSize" value="10" /><!-- 连接池中保留的最小连接数。 --><property name="minPoolSize" value="5" /><!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0--><property name="maxStatements" value="100" /><!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 --><property name="maxStatementsPerConnection" value="3" /><!-- 定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个显著提高测试速度。注意:测试的表必须在初始数据源的时候就存在。Default: null --><property name="preferredTestQuery" value="select 1" /><!-- 定义在从数据库获取新连接失败后重复尝试的次数。Default: 30--><property name="acquireRetryAttempts" value="3" /><!-- 两次连接中间隔时间,单位毫秒。Default: 1000 --><property name="acquireRetryDelay" value="1000" /><!-- 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0 --><property name="checkoutTimeout" value="30000" /></bean><!-- MyBatis SqlSessionFactoryBean 配置sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入数据源 --><property name="dataSource" ref="dataSource"/><!-- 扫描mybatis核心配置文件 --><property name="configLocation" value="classpath:spring/mybatis.xml"/><!-- 扫描java bean,自动使用别名 --><property name="typeAliasesPackage" value="com.camel.ssm.bean"/><!-- 扫描mybatis的SQL配置文件(映射文件) --><property name="mapperLocations" value="classpath:mapper/*.xml"/></bean><!-- 扫描Dao接口包 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="com.camel.ssm.dao"/></bean><!--<!– (事务管理)transaction manager, use JtaTransactionManager for global tx –>--><!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">--><!--<property name="dataSource" ref="dataSource" />--><!--</bean>--><!--<tx:annotation-driven transaction-manager="transactionManager"/>--></beans>
修改:
<property name="typeAliasesPackage" value="com.camel.bean"/><property name="basePackage" value="com.camel.dao.bean"/>
其中
name的值 为配置数据源中的ID
<!-- 扫描mybatis核心配置文件 对应拦截器分页功能--><property name="configLocation" value="classpath:spring/mybatis.xml"/>
找到spring包下mybatis.xml文件
<!-- 扫描mybatis的SQL配置文件(映射文件) --><property name="mapperLocations" value="classpath:mapper/*.xml"/>
找到mapper包下所有的.xml文件进行解析
<!-- 扫描Dao接口包 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="com.camel.dao.bean"/></bean>
关联dao层的文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><plugins><plugin interceptor="com.camel.dao.interceptor.PageInterceptor"></plugin></plugins></configuration>
修改
<plugin interceptor="com.camel.dao.interceptor.PageInterceptor"></plugin>
mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><!--| plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:| properties?, settings?,| typeAliases?, typeHandlers?,| objectFactory?,objectWrapperFactory?,| plugins?,| environments?, databaseIdProvider?, mappers?|--><configuration><!--| 全局配置设置|| 可配置选项 默认值,描述|| aggressiveLazyLoading true,当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。| multipleResultSetsEnabled true,允许和不允许单条语句返回多个数据集(取决于驱动需求)| useColumnLabel true,使用列标签代替列名称。不同的驱动器有不同的作法。参考一下驱动器文档,或者用这两个不同的选项进行测试一下。| useGeneratedKeys false, 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。| autoMappingBehavior PARTIAL, 指定MyBatis 是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL 将自动映射所有复杂的结果。| defaultExecutorType SIMPLE, 配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新。| defaultStatementTimeoutnull,设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时| --><settings><!-- 这个配置使全局的映射器启用或禁用缓存 --><setting name="cacheEnabled" value="true"/><!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 --><setting name="lazyLoadingEnabled" value="true"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="true"/><setting name="defaultExecutorType" value="REUSE"/><setting name="defaultStatementTimeout" value="25000"/><!-- 让控制台打印sql语句,注释掉则没有 --><setting name="logImpl" value="STDOUT_LOGGING" /><setting name="callSettersOnNulls" value="true" /></settings><!-- <plugins><plugin interceptor="com.foreknow.dao.interceptor.PageInterceptor"></plugin></plugins> --></configuration>
applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/context /schema/context/spring-context.xsd/schema/tx /schema/tx/spring-tx.xsd"><!-- 扫描service包 --><context:component-scan base-package="com.camel.service" /><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/></bean><!-- 事务采用全注解方式 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>
修改:
<context:component-scan base-package="com.camel.service" />
applicationContext-web.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xmlns:aop="/schema/aop"xmlns:task="/schema/task"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/mvc/schema/mvc/spring-mvc.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/task/schema/task/spring-task-3.0.xsd"><!-- 开启注解映射的支持 --><mvc:annotation-driven/><!-- 允许对静态资源文件的访问 --><mvc:default-servlet-handler/><aop:aspectj-autoproxy proxy-target-class="true"/><!--避免IE执行AJAX时,返回JSON出现下载文件 --><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!--定时器配置--><task:executor id="executor" pool-size="5" /><task:scheduler id="scheduler" pool-size="10" /><task:annotation-driven executor="executor" scheduler="scheduler" /><!-- 总错误处理--><bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><!--<property name="defaultErrorView"><value>/base/error</value></property>--><property name="defaultStatusCode"><value>500</value></property><property name="warnLogCategory"><value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value></property></bean><!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/><ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 --></list></property></bean><!--<!–对上传文件的支持,springMVC其实是用common-upload来实现 –><bean id="multipartResolver" class="org.springframework.monsMultipartResolver"><!–设置上传文件的最大值,这里是字节–><property name="maxUploadSize" value="102400000"></property> <!– 100M –><property name="defaultEncoding" value="utf-8"></property></bean>--><!--配置静态资源映射,防止静态资源被拦截 --><!-- <mvc:interceptors><mvc:interceptor>拦截哪些请求,因为以后的菜单很多,所以要使用一些通配符<mvc:mapping path="/**"/>排除哪些请求不要拦截,只要是登录的CONTROLLER都不拦截<mvc:exclude-mapping path="/login/**"/><mvc:exclude-mapping path="/login/validate"/><mvc:exclude-mapping path="/css/**"/><mvc:exclude-mapping path="/js/**"/><mvc:exclude-mapping path="/images/**"/><mvc:exclude-mapping path="/api/**"/><bean class="com.xianzhi.controller.interceptor.SessionInterceptor"></bean></mvc:interceptor></mvc:interceptors> --><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/jsp"/><property name="suffix" value=".jsp"></property></bean><mvc:resources mapping="/css/**" location="/css/"/><mvc:resources mapping="/images/**" location="/images/"/><mvc:resources mapping="/js/**" location="/js/"/><!-- 自动扫描的包名 --><context:component-scan base-package="com.camel.ssm.controller"/></beans>
修改:
<context:component-scan base-package="com.camel.controller.*"/>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/context /schema/context/spring-context.xsd"><!--整合mybatis和spring--><context:property-placeholder location="classpath:properties/*.properties"/><import resource="applicationContext-*.xml"/></beans>
root-context.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/context /schema/context/spring-context.xsd/schema/mvc /schema/mvc/spring-mvc.xsd"><!-- 配置文件上传解析器 --><bean id="multipartResolver" class="org.springframework.monsMultipartResolver"> <!-- 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="20000000"/><property name="defaultEncoding" value="utf-8"></property></bean></beans>
Ad.java
package com.camel.ssm.bean;public class Ad {private Long id;private String title;private String imgFileName;//文件的名称private String link;private Long weight;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getImgFileName() {return imgFileName;}public void setImgFileName(String imgFileName) {this.imgFileName = imgFileName;}public String getLink() {return link;}public void setLink(String link) {this.link = link;}public Long getWeight() {return weight;}public void setWeight(Long weight) {this.weight = weight;}}
AdDao.java
package com.camel.ssm.dao;import com.camel.ssm.bean.Ad;import java.util.List;public interface AdDao {/*** 添加广告信息* @param ad* @return*/public int insert(Ad ad);/*** 根据条件进行查询* @param ad* @return*/public List<Ad> selectByPage(Ad ad);/*** 修改广告信息* @param ad* @return*/public int update(Ad ad);/*** 根据id进行查询* @param id* @return*/public Ad selectById(Long id);}
在src–main—webapp—创建一个文件夹—专门放css js images
WEB-INF中放静态页面 jsp 和tags 自定义标签
在src/main/java 中创建包