国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SSM_01_環境搭建

2019-11-08 03:00:58
字體:
來源:轉載
供稿:網友

用SPRingMVC+Spring+Mybati這三個框架用了這么長的時間了,雖然說會用,但是有種知其然不知其所以然的感覺,工作之余特地自己搭建了一個,對里面的各種配置了解得深入了一點,現總結如下,會穿插一點lz個人對其中的理解,有誤之處還望輕碰后指出,如果對后來人有所幫助,lz會非常開心,因為lz開始學的時候就是參考了非常多前輩寫的博客才有今天的。 1樓主用的是Myeclipse,創建一個java web 項目:需要說明的是,next到最后不要忘了點擊Generate web.xml deployment descriptor,會在WEB-INF中自動生成web.xml文件,不用在別的位置拷貝。 2,web.xml

<!-- Spring 配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <!-- 此處自定義配置文件位置,需加contextConfigLocation --> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <!-- ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。 --> <!-- 如果在web.xml中不寫任何參數配置信息,默認的路徑是/WEB-INF/applicationContext.xml, 在WEB-INF目錄下創建的xml文件的名稱必須是applicationContext.xml; --> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

說明1:classpath。 需要說明的是很多初學者(包括樓主)對這個classpath不知指的是哪個路徑 classpath:首先 classpath是指 WEB-INF文件夾下的classes目錄 ,可能有的人就會懵逼,在環境中哪里WEB-INF 哪里有classes,在計算機中找到你創建的項目進入到WEB-INF中就會發現有一個classes文件夾 如下:

附:在web.xml中classpath和classpath*的區別 classpath 和 classpath* 區別: classpath:只會到你指定的class路徑中查找找文件; classpath*:不僅包含class路徑,還包括jar文件中(class路徑)進行查找. 如果我在web.xml中定義的是:classpath:META-INF/spring/application-context.xml 那么只有META-INF/spring底下的application-context.xml會被加載到上下文中。 “**/” 表示的是任意目錄; “*/applicationContext-.xml” 表示任意目錄下的以”applicationContext-“開頭的XML文件。 程序部署到tomcat后,src目錄下的配置文件會和class文件一樣,自動copy到應用的 WEB-INF/classes目錄下 classpath:與classpath*:的區別在于, 前者只會從第一個classpath中加載,而 后者會從所有的classpath中加載 如果要加載的資源, 不在當前ClassLoader的路徑里,那么用classpath:前綴是找不到的, 這種情況下就需要使用classpath*:前綴 ,在多個classpath中存在同名資源,都需要加載, 那么用classpath:只會加載第一個,這種情況下也需要classpath*:前綴 注意: 用classpath*:需要遍歷所有的classpath,所以加載速度是很慢的,因此,在規劃的時候,應該盡可能規劃好資源文件所在的路徑,盡量避免使用classpath*。 參考:https://zhidao.baidu.com/question/919326352548812699.html,http://perfy315.iteye.com/blog/2009258 classpath:applicationContext.xml讀取的是web.xml同級目錄下classes中的Spring配置文件applicationContext.xml 說明一點,注意導入的包不要少添加了,或者class的包名加類不要寫錯了,寫完用ctrl+鼠標左鍵 檢查一下如果能跳轉到包下就說明沒問,如果點不動則說明包沒導入或包名加類寫的有問題。 說明2:contextConfigLocation ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。在web.xml配置這個監聽器,啟動容器時,就會默認執行它實現的方法。加載applicationContext.xml文件,如果在web.xml中不寫任何參數配置信息,默認的路徑是/WEB-INF/applicationContext.xml,在WEB-INF目錄下創建的xml文件的名稱必須是applicationContext.xml; 如果是要自定義文件名可以在web.xml里加入contextConfigLocation這個context參數:

<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext-*.xml </param-value> </context-param>

由此可見applicationContext.xml的文件位置就可以有兩種默認實現: 第一種:直接將之放到/WEB-INF下,之在web.xml中聲明一個listener; 第二種:將之放到classpath下,但是此時要在web.xml中加入,用它來指明你的applicationContext.xml的位置以供web容器來加載。 參考:http://blog.csdn.net/ysughw/article/details/8992322

<!-- SpringMVC 配置文件 --> <servlet> <!-- DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller來處理。 --> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- 與加載applicationContent類似 --> <param-value>classpath:mvc.xml</param-value> </init-param> <!-- 表示啟動容器時初始化該Servlet; --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 表示哪些請求交給Spring Web MVC處理 --> <url-pattern>*.do</url-pattern> </servlet-mapping>

說明1: DispatcherServlet主要用作職責調度工作,本身主要用于控制流程,主要職責如下: 1、文件上傳解析,如果請求類型是multipart將通過MultipartResolver進行文件上傳解析; 2、通過HandlerMapping,將請求映射到處理器(返回一個HandlerExecutionChain,它包括一個處理器、多個HandlerInterceptor攔截器); 3、 通過HandlerAdapter支持多種類型的處理器(HandlerExecutionChain中的處理器); 4、通過ViewResolver解析邏輯視圖名到具體視圖實現; 5、本地化解析; 6、渲染具體的視圖等; 7、如果執行過程中遇到異常將交給HandlerExceptionResolver來解析。 8、 如果只配置攔截類似于*.do格式的url,則對靜態資源的訪問是沒有問題的,但是如果配置攔截了所有的請求(如我們上面配置的“/”),就會造成js文件、CSS文件、圖片文件等靜態資源無法訪問。 9、處理靜態頁面,JS,CSS文件, 第一種是采用,(一般Web應用服務器默認的Servlet名稱是”default”,所以這里我們激活Tomcat的defaultServlet來處理靜態文件,在web.xml里配置如下代碼即可:)

<!-- 該servlet為tomcat,jetty等容器提供,將靜態資源映射從/改為/static/目錄,如原來訪問 http://localhost/foo.css ,現在http://localhost/static/foo.css --> <!-- 不攔截靜態文件 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/js/*</url-pattern> <url-pattern>/css/*</url-pattern> <url-pattern>/images/*</url-pattern> <url-pattern>/fonts/*</url-pattern> </servlet-mapping>

第二種是采用,在springmvc的配置文件中加入以下代碼:

<mvc:resources mapping="/js/**" location="/static_resources/Javascript/"/> <mvc:resources mapping="/styles/**" location="/static_resources/css/"/> <mvc:resources mapping="/images/**" location="/static_resources/images/"/>

說明2: load-on-startup:表示啟動容器時初始化該Servlet; url-pattern:表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。 參考:http://blog.csdn.net/lqx1988221/article/details/12620689 web.xml就寫這么多。 3:applicationContext.xml

<!-- 讀取屬性配置文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:db.properties"></property> </bean>

讀取的配置文件在src目錄下,如圖:

db.properties為:

driver=com.MySQL.jdbc.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassWord=123456<!-- 配置date source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </bean>

讀取配置文件中鍵值對通過¥{}來賦值

<!-- 配置工廠 --> <bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- SqlSessionFactory 有一個單獨的必須屬性,就是 JDBC 的 DataSource。這可以是任意 的 DataSource--> <property name="dataSource" ref="dataSource"/> <!-- 一個通用的屬性是 configLocation,它是用來指定 MyBatis 的 XML 配置文件路徑的。 --> <property name="configLocation" value="classpath:mybatis.cfg.xml"/> </bean><!-- 聲明式事務 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="save" propagation="REQUIRED"/> <tx:method name="get" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* cn.sxt.service.impl.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> <context:component-scan base-package="cn.sxt"/>

用法

@Transactional 可以作用于接口、接口方法、類以及類方法上。當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。 雖然 @Transactional 注解可以作用于接口、接口方法、類以及類方法上,但是 Spring 建議不要在接口或者接口方法上使用該注解,因為這只有在使用基于接口的代理時它才會生效。另外, @Transactional 注解應該只被應用到 public 方法上,這是由 Spring AOP 的本質決定的。如果你在 protected、private 或者默認可見性的方法上使用 @Transactional 注解,這將被忽略,也不會拋出任何異常。 默認情況下,只有來自外部的方法調用才會被AOP代理捕獲,也就是,類內部方法調用本類內部的其他方法并不會引起事務行為,即使被調用方法使用@Transactional注解進行修飾。

參考:http://blog.csdn.net/bao19901210/article/details/41724355

4mvc.xml

<!-- 掃描該包下的注解 --> <context:component-scan base-package="cn.sxt.controller"/>5mybatis.cfg.xml<mappers> <!-- 所有mapper文件填寫位置 --> <mapper resource="cn/sxt/vo/user.mapper.xml" /> </mappers>6user.mapper.xml<mapper namespace="cn.sxt.vo.user.mapper"> <select id="list" resultType="cn.sxt.vo.User"> select * from user </select></mapper>

7UserDaoImpl

/*@Repository用于標注數據訪問組件,即DAO組件*/@Repository("userDao")public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ @Autowired @Override public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { super.setSqlSessionFactory(sqlSessionFactory); } @Override public List<User> list() { // TODO Auto-generated method stub return getSqlSession().selectList("cn.sxt.vo.user.mapper.list"); }}

8UserServiceImpl

@Service("userService")public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; public void setUserDao(UserDao userDao){ this.userDao=userDao; } public List<User> list(){ return userDao.list(); }}@Controllerpublic class UserController { @Autowired private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("/list") public String list(ModelMap map){ map.addAttribute("list",userService.list()); return "/list.jsp"; }}

@Service用于標注業務層組件 @Controller用于標注控制層組件(如struts中的action @Repository用于標注數據訪問組件,即DAO組件 @Component泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。 附demo源碼:http://download.csdn.net/detail/btwangzhi/9752783


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浙江省| 桃园县| 阿勒泰市| 通道| 梁河县| 察隅县| 石嘴山市| 加查县| 黄石市| 江安县| 土默特左旗| 彝良县| 成都市| 兰州市| 泸溪县| 丰镇市| 泽库县| 汤阴县| 东乡| 营口市| 洛隆县| 响水县| 阿拉尔市| 新乡市| 莱阳市| 齐河县| 巫山县| 巨野县| 孟津县| 邹平县| 女性| 桑植县| 合作市| 塘沽区| 天全县| 石家庄市| 泸州市| 博罗县| 高雄市| 博客| 宽城|