# Spring MVC 作業 ## tomcat Server下 的context.xml ``` <!-- SQL Server Jndi setting --> <Resource name="connectSqlServerJdbc/SystemService" type="javax.sql.DataSource" auth="Container" username="watcher" password="P@ssw0rd" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=LeonPower;encrypt=true;trustServerCertificate=true" /> <!-- MySQL Jndi setting--> <Resource name="connectMySQLJdbc/SystemService" type="javax.sql.DataSource" auth="Container" username="watcher" password="P@ssw0rd" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/LeonPower?serverTimezone=UTC" /> <!-- HW SQL Server Jndi setting --> <Resource name="connectSqlServerJdbc/GymProject" type="javax.sql.DataSource" auth="Container" username="sa" password="sa1234" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=servdb;encrypt=true;trustServerCertificate=true" /> ``` --- JSP taglib ``` <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> ``` ``` <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ``` ## web.xml 被java設定檔取代了應該 "用不上" ``` <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/beans.config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>myCharacterEncodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>myCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` ### spring mvc 的pom.xml 在package下面 ``` <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>11.2.3.jre17</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.2.2.Final</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>6.0.9</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.1</version> </dependency> </dependencies> ``` --- ### 用java組態取代設定檔 1. web.xml 2. mvc-servlet.mxl 3. beans.config.xml --- 可以在webapp同層建立一個html來測試 其餘都是透過controller來跳轉 因為是放在WEB-INF下面, 所以才要透過controller來跳轉 --- 除了dao/service要分別宣告@ 介面也要@ 和交易的@ ## 在service實作時 宣告dao時,要先IDao dao; 因為autowired 會先找到介面dao,才能找到實作的dao 透過介面找到實作 ## controller 內要宣告Iservice(service介面)的實例 沒有介面就直接宣告service ``` @autowired private IXXXervice ms; ``` ## controller ``` public String ArticleIndex(Model m){ List<ArticleBean> articleBean=ms.selectAll(); m.addAttribute("articleBean",articleBean); return "Forum/ArticleIndex"; //retrun 跳轉到網頁 } ``` --- ![](https://hackmd.io/_uploads/rJywO_Z83.png) 要記得把要執行的專案拉回去右邊 --- ## 0529 更改作業的步驟 bean 新增@Component註解 ![](https://hackmd.io/_uploads/SkPRJK-Un.png) dao和service 介面單純新增註解 Idao ![](https://hackmd.io/_uploads/HJ7VbKWLn.png) Iservice ![](https://hackmd.io/_uploads/B1DSbKZIn.png) dao實作 1. 改成SessionFactory 2. 新增註解 ![](https://hackmd.io/_uploads/Bk70bYWI2.png) 每個方法內的第一行新增這一行 透過工廠開連線後,把連線存到session中 因為是openSession 所以記得在方法結束前 session.close(); 關閉連線 ``` Session session = factory.openSession(); ``` 如果有兩種return情況,就是在兩地方都要關連線 ![](https://hackmd.io/_uploads/rJZHHKZI2.png) service 實作 單純改成宣告介面的dao 讓autowired去搜尋 ![](https://hackmd.io/_uploads/HyS5fF-In.png) --- 在新增操作時候 在persist下一行flush ![](https://hackmd.io/_uploads/SysXDK-L2.png) --- 建立controller的class,看要集中還是每個功能一個class request變成model? --- ![](https://hackmd.io/_uploads/SyXGMHEUh.png) ![](https://hackmd.io/_uploads/BJtmMBNL3.png)