(若是要整合AspectJ)css
原本applicationContext.xml、dispatcher-servlet.xml、web.xml都在WEB-INF下的,由於ssm配置文件多,通常都拿出來單獨放在一個文件夾裏,只在WEB-INF下留一個web.xml。前端
在spring配置文件中引入mybatis配置文件,而後在web.xml中引入spring配置文件、springmvc配置文件。web服務器默認加載WEB-INF下的web.xml,web.xml不能移到別處。java
其實spring、springmvc的配置文件都是spring的配置文件,能夠寫在一個xml中,但ssm配置多,分開來寫,使單個xml不臃腫,即模塊化配置。mysql
springmvc配置文件中通常只寫springmvc相關的配置,好比springmvc的註解驅動、視圖解析、controller層的包掃描、springmvc的攔截器,其它配置都寫到spring配置文件中。web
若是spring配置文件很大,也能夠劃分爲多個xml,好比spring-tx.xml(事務配置)、spring-db.xml(數據庫相關配置).....在web.xml中使用spring-*.xml引入便可。ajax
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
jdbc.username=chy
jdbc.password=abcd
jdbc.initialSize=5
jdbc.maxTotal=30
jdbc.maxIdle=10
# Global logging configuration
log4j.rootLogger=DEBUG, stdout,D
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#若是查看調試信息,改成DEBUG便可
log4j.appender.stdout.Threshold = ERROR
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
# File output...
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#相對路徑,部署到tomcat後,會輸出日誌到tomcat的logs文件夾下的error.log中
log4j.appender.D.File = ../logs/error.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.D.encoding=UTF-8
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--只需配置數據庫實體類的別名--> <typeAliases> <package name="com.chy.po"/> </typeAliases> </configuration>
數據庫配置、mapper指定都移到spring配置文件中去了,mybatis配置文件只需指定po類的別名。spring
dao下面放mapper接口、映射文件。sql
service下放業務層的接口、實現類,能夠建一個子包impl來放實現類。數據庫
controller不須要寫接口。express
若是po類須要序列化,須要implements Serializable。
WEB-INF下新建lib文件夾來存放jar包,新建jsp文件夾來存放jsp文件。
靜態資源的放法不少:
<?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: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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--包掃描--> <context:component-scan base-package="com.chy.controller" /> <!--mvc的註解驅動,會自動註冊HandlerMapping、HandlerAdapter,使用json轉換器來支持ajax的json交互--> <mvc:annotation-driven /> <!--視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!--靜態資源配置--> <mvc:default-servlet-handler default-servlet-name="default"/> <!--下面這種配置靜態資源的方式容易出錯,儘可能使用上面那種--> <!--<mvc:resources mapping="/resource/js/**" location="/resource/js/**" />--> <!--<mvc:resources mapping="/resource/css/**" location="/resource/css/**" />--> <!--<mvc:resources mapping="/resource/image/**" location="/resource/image/**" />--> </beans>
既然是springmvc,那mvc(表現層,前端+controller)的controller(包掃描)、view(視圖解析器)、前端要用的靜態資源都要配置,
至於model,表現層、業務層、持久層都要用,放到spring配置文件中去配置。
看到<mvc: />、<tx: />開頭的標籤,十有八九IDEA要導錯約束,將cache換爲mvc、tx便可,xsi中對應的部分也要改(已標紅)。
若是不改,會報錯:「通配符的匹配很全面, 但沒法找到元素 'mvc:annotation-driven' 的聲明。」、沒有這樣的bean。
靜態資源路徑的2種寫法:(不能直接使用IDEA提示的路徑)
<%-- 相對路徑,可能會出現問題--%> <img src="resource/image/1.jpg" /> <%--絕對路徑--%> <img src="${pageContext.request.contextPath}/resource/image/1.jpg" />
靜態資源的配置,有時候代碼自己沒有錯誤,報404多是由於:
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--引入數據庫鏈接信息--> <context:property-placeholder location="classpath:db.properties" /> <!--配置數據源,此處使用dbcp--> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="initialSize" value="${jdbc.initialSize}" /> <property name="maxTotal" value="${jdbc.maxTotal}" /> <property name="maxIdle" value="${jdbc.maxIdle}" /> </bean> <!--配置MyBatis的SqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--注入數據源--> <property name="dataSource" ref="dataSource" /> <!--指定mybatis配置文件的位置--> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!--配置事務管理器--> <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">--> <!-- <!–注入數據源–>--> <!-- <property name="dataSource" ref="dataSource" />--> <!--</bean>--> <!--開啓事務註解,指定要使用的事務管理器--> <!--<tx:annotation-driven transaction-manager="transactionManager" />--> <!--包掃描--> <context:component-scan base-package="com.chy.service,com.chy.po" /> <!--mapper掃描配置--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--指定mapper接口所在的包,有多個包時使用逗號或分號隔開--> <property name="basePackage" value="com.chy.dao" /> </bean> </beans>
@Component public class User implements Serializable { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
public interface UserDao { public User queryUserById(Integer id); }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.chy.dao.UserDao"> <select id="queryUserById" parameterType="integer" resultType="user"> select * from user_tb where id=#{id} </select> </mapper>
這2個是mapper接口、映射文件。
public interface UserService { public User queryUserById(Integer id); }
@Service("userService") public class UserServiceImpl implements UserService { private UserDao userDao; @Autowired public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public User queryUserById(Integer id) { return userDao.queryUserById(id); } }
@Controller @RequestMapping("/user") public class UserController { private UserService userService; @Autowired public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("/{id}") public String queryUserById(@PathVariable Integer id, Model model){ User user = userService.queryUserById(id); model.addAttribute("user", user); return "user_info"; } }