นอกจาก struts แล้วเฟรมเวิร์ก MVC ของ Web Mainstream ปัจจุบันยังมี Spring MVC ด้วย นี่เป็นเพราะสปริง MVC ค่อนข้างง่ายในการกำหนดค่าและใช้งานได้ชัดเจนมาก มันมีความยืดหยุ่นมากมีการบูรณาการที่ดีกับฤดูใบไม้ผลิและรองรับ APIs ที่พักผ่อนได้ดีกว่า struts
MyBatis เป็น Ibatis รุ่นอัพเกรด ในฐานะที่เป็นคู่แข่งเก่าแก่ไฮเบอร์เนตมันเป็นเฟรมเวิร์กเลเยอร์ถาวรที่สามารถปรับแต่ง SQL ขั้นตอนที่เก็บไว้และการแมปขั้นสูง
ความแตกต่างที่สำคัญกับไฮเบอร์เนตคือ mybatis เป็นแบบกึ่งอัตโนมัติในขณะที่ไฮเบอร์เนตนั้นเป็นไปโดยอัตโนมัติอย่างสมบูรณ์ดังนั้นเมื่อข้อกำหนดของแอปพลิเคชันมีความซับซ้อนมากขึ้นเรื่อย ๆ SQL อัตโนมัติดูเหมือนจะเงอะงะมากขึ้น
ตั้งแต่ฉันทำโครงการเมื่อไม่นานมานี้ฉันต้องการใช้ SpringMVC เพื่อทำมันดังนั้นฉันจึงเริ่มเล่นเกมรวมกรอบกับทัศนคติการฝึกฝน ผู้ที่มักจะสร้างเฟรมควรรู้ว่าแกนกลางของการสร้างเฟรมคือไฟล์การกำหนดค่า ดังนั้นฉันจึงโพสต์รหัสไฟล์การกำหนดค่าส่วนใหญ่ เช่นเดียวกันกับฉันหลังจากที่ฉันเขียนไฟล์การกำหนดค่าฉันวิ่งข้อผิดพลาดและเพิ่ม JAR นี่คือแพ็คเกจขวดที่ฉันใช้ (ควรเป็นอย่างน้อยที่สุด):
หมายเหตุ: มีขวดพิเศษบางอย่างในภาพด้านบนตัวอย่างเช่นพูลการเชื่อมต่อฐานข้อมูลที่ฉันใช้คือ Druid และ Log Frame-Logback ของ Alibaba ดังนั้นจึงมีการแนะนำขวดที่เกี่ยวข้อง การใช้และการกำหนดค่าของสองเฟรมเวิร์กนี้ง่ายมากดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่
1. รวม SpringMVC
springmybatis-servlet.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/MVC http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc. สแกนชื่อแพ็คเกจโดยอัตโนมัติทำให้การรองรับสปริงการตรวจจับส่วนประกอบโดยอัตโนมัติเช่นคอนโทรลเลอร์คำอธิบายประกอบ-> <บริบท: ส่วนประกอบ-สแกนฐานแพคเกจ = "com.alibaba.controller" /> <บริบท: ส่วนประกอบ-สแกน package = "com.alibaba.service" /> id = "viewResolver"> <property name = "คำนำหน้า" value = "/web-inf/jsp/"/> <property name = "suffix" value = ". jsp"/> <! <MVC: Interceptor> <!-เส้นทาง URL ที่ตรงกัน-> <MVC: เส้นทางการแมป = "/ผู้ใช้/**"/> <mvc: เส้นทางการแมป = "/test/**"/> <bean> interceptor ในลำดับย้อนกลับ-> </mvc: interceptors> </ebeans>
2. รวม mybatis
Spring-dao.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: mybatis = "http://mybatis.org/schema/mybatis-spring" xmlns: บริบท = "http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-beans.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <! ได้รับการแนะนำโดยอัตโนมัติ-> <mybatis: scan base-package = "com.alibaba.dao"/> <!-แนะนำไฟล์อสังหาริมทรัพย์-> <บริบท: สถานที่ตั้งของผู้ถือครองทรัพย์สิน = "classpath: การกำหนดค่า properties"/> <! value = "$ {jdbc.url}"/> <property name = "username" value = "$ {jdbc.username}"/> <property name = "รหัสผ่าน" value = "$ {jdbc.password}"/> <! name = "maxactive"> <value> 5 </value> </property> <property name = "minidle"> <alde> 1 </value> </property> <!-กำหนดค่าเวลาในการรับการเชื่อมต่อเวลารอการเชื่อมต่อ-> <property name = "MaxWait" name = "ตัวกรอง"> <value> stat </value> </property> <!-กำหนดค่าระยะเวลาในการดำเนินการในการตรวจจับเพื่อตรวจจับการเชื่อมต่อที่ไม่ได้ใช้งานที่ต้องปิดในมิลลิวินาที-> <property name = "timebetweenevictionrunsmillis" name = "minevictableidletimeMillis"> <value> 300000 </value> </property> <!- <property name = "ValidationQuery"> <value> เลือก 'x' </value> </คุณสมบัติ> <property name = "testharyidle" name = "testOnReturn"> <value> false </value> </คุณสมบัติ> <property name = "PoolPreparedStatements"> <dange> true </value> </porement> <property name = "MaxOpenPreparedStatements"> <dance> 20 </value> name = "dataSource" ref = "dataSource"/> </ebean> </epeans> 3.web.xml รวม SpringMVC และ MyBatis
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5_5.xsd" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" เวอร์ชัน = "3.0"> < / สแตติก / ไดเรกทอรี ตัวอย่างเช่นเมื่อคุณเยี่ยมชม http: //localhost/foo.css ตอนนี้ http: //localhost/static/foo.css-> <!-อย่าสกัดกั้นไฟล์คงที่-> <servlet-mapping> <servlet-name> <url-pattern>/css/*</url-pattern> <url-pattern>/images/*</url-pattern> <url-pattern>/Fonts/*</url-pattern> </servlet-mapping> <! <Tilter-class> org.springframework.web.filter.characterencodingFilter </filter-class> <init-Param> <param-Name> การเข้ารหัส </param-name> <param-value> UTF-8 </param-value> <param-value> true </param-value> </itrin-Param> </filter> <filter-mapping> <scod-name> encodingFilter </filter-name> <url-pattern>/*</url-pattern> </filter-maping> <! ไดเรกทอรี web-inf และกำหนดถั่วที่เกี่ยวข้องที่นั่นเอาชนะถั่วใด ๆ ที่กำหนดไว้ทั่วโลก-> <servlet> <servlet-name> springmybatis </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet <servlet-name> springmybatis </servlet-name> <!-คำขอทั้งหมดจะถูกประมวลผลโดย dispatcherservlet-> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name> </context-Param> <Sistener> <Sistener-Lass> org.springframework.web.context.contextloaderlistener </listener-class> </listener> <!-การตรวจสอบเว็บ Druid-> <servlet> <servlet-class> com.alibaba.druid.support.http.statviewservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> druidstatview </servlet-name> <location> /error/404.jsp </location> </errors-page> <rerors-page> <srorscode> 500 </ข้อผิดพลาด> <location>/error/500.jsp </location> </srors-page>
4.logback.xml การกำหนดค่าบันทึก
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <การกำหนดค่า> <appender name = "stdout"> <encoder> <mmet> %d {hh: mm: ss.sss} [ %thread] %-5Level %logger {36}- %msg %n </pattern> level = "trace" /> <logger name = "com.alibaba.controller.testController" level = "trace" /> <logger name = "org.springframework.web.servlet.dispatcherservlet" level = "debug" Spring-config บันทึก SQL จะไม่ปรากฏขึ้น Logback เป็นเพียงการใช้งาน SLF4J-> <root level = "debug"> <appender-ref ref = "stdout"/> </root> </การกำหนดค่า> 5. การกำหนดค่าการกำหนดค่าการกำหนดค่า
jdbc.url = jdbc/: mysql/: // localhost/: 3306/druid? useunicode/= true & cyratecoding/= utf-8 & zerodatetimebehavior/= Converttonull Jdbc.username = root jdbc.password = 123456
6. ทดสอบว่าการก่อสร้างนั้นประสบความสำเร็จรหัสพื้นหลัง
ก่อนอื่นเข้าสู่ระบบใช้การเข้ารหัสคุณสามารถลบออกได้
แพ็คเกจ com.alibaba.Controller; นำเข้า Javax.annotation.Resource; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า org.apache.commons.codec.digest.digestutils; นำเข้า org.slf4j.logger; นำเข้า org.slf4j.loggerfactory; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestmethod; นำเข้า org.springframework.web.bind.annotation.requestparam; นำเข้า com.alibaba.model.user; นำเข้า com.alibaba.service.userservice; นำเข้า com.alibaba.util.requestutil; / ** * @author tfj * 2014-7-26 */ @controller คลาสสาธารณะ SystemController {logger สุดท้าย logger สุดท้าย = loggerFactory.getLogger (SystemController.class); @Resource ผู้ใช้ส่วนตัวผู้ใช้บริการ; @RequestMapping (value = "/", method = requestMethod.get) สตริงสาธารณะที่บ้าน () {log.info ("กลับไปที่หน้าแรก!"); กลับ "ดัชนี"; } @RequestMapping (value = "/test/hello", method = requestMethod.get) สตริงสาธารณะ testhello () {log.info ("ดำเนินการวิธี testhello!"); กลับ "Testhello"; } @RequestMapping (value = "/login", method = requestMethod.post) String Public String TestLogin (คำขอ httpservletRequest, @questparam String username, @requestparam รหัสผ่านสตริง) {log.info ("วิธีการทดสอบ testlogin!"); user user = userservice.finduserByName (ชื่อผู้ใช้); if (user! = null) {ถ้า (user.getPassword (). เท่ากับ (digestutils.md5hex (รหัสผ่าน))) {request.getSession (). setAttribute ("userId", user.getId ()); request.getSession (). setAttribute ("ผู้ใช้", ชื่อผู้ใช้); return "Redirect:" + requestutil.RetrievEsavedRequest (); // ข้ามไปยังหน้าเข้าถึง} else {log.info ("ข้อผิดพลาดรหัสผ่าน"); request.getSession (). setAttribute ("ข้อความ", "ชื่อผู้ใช้และรหัสผ่านไม่ถูกต้องโปรดเข้าสู่ระบบอีกครั้ง"); กลับ "เข้าสู่ระบบ"; }} else {log.info ("ชื่อผู้ใช้ไม่มีอยู่"); request.getSession (). setAttribute ("ข้อความ", "ชื่อผู้ใช้ไม่มีอยู่โปรดเข้าสู่ระบบอีกครั้ง"); กลับ "เข้าสู่ระบบ"; - ฉันจะไม่เขียนเกี่ยวกับบริการและรุ่นฉันจะเขียนเกี่ยวกับแผนที่คลาส Mybatis 'Maper
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "com.alibaba.dao.usermapper"> <select id = "findUserByName" resultType = "com.alibaba.model.user"> เลือก ID ชื่อผู้ใช้รหัสผ่านจาก Sysuser
7. แผนกต้อนรับส่วนหน้าส่วนใหญ่เป็นหน้าเว็บที่เข้าสู่ระบบและเข้าสู่ระบบสำเร็จดังนั้นฉันจะไม่เขียนมัน
โพสต์ภาพหน้าจอ:
ณ จุดนี้การรวม SpringMVC+MyBatis ประสบความสำเร็จ ต่อมาฟังก์ชั่นที่ซับซ้อนที่จะเพิ่ม
สิ่งที่ควรทราบ
1. การกำหนดค่าของ DRUID และ LOGBACK ในเฟรมเวิร์กถูกคัดลอกจากเว็บไซต์อย่างเป็นทางการดังนั้นพวกเขาจึงเป็นพื้นฐานที่สุด ผู้อ่านสามารถเพิกเฉยต่อพวกเขาหรือสามารถแทนที่ด้วยส่วนประกอบฐานข้อมูลและเฟรมเวิร์กบันทึกที่ผู้อ่านคุ้นเคยเช่น C3P0 และ LOG4J
2. รหัสมีการจัดการสิทธิ์เพิ่มนั่นคือคุณต้องเข้าสู่ระบบก่อนที่จะเข้าถึงแล้วข้ามไปที่หน้าเพื่อเข้าถึงหลังจากเข้าสู่ระบบสำหรับการจัดการสิทธิ์ของ SpringMVC โปรดดู: http://www.vevb.com/article/99569.htm
3. บทความนี้เป็นรหัสพื้นฐานที่ง่ายที่สุดและพื้นฐานที่สุดที่ถูกถอดออกจากรหัสทดสอบของฉัน โปรดยกโทษให้ฉันสำหรับบางพื้นที่ที่ไม่ได้ถูกถอดออก
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น