javascript
SpringMVC项目配置全过程详解
剛學習springmvc不久,各種配置我怕記不住,就寫個隨筆記錄一下。
我的項目是springmvc+hibernate4。環境是windows+myeclipse(或eclipse)+jdk7+tomcat7+mysql
項目文件層級關系如圖所示:
配置springmvc+hibernate4步驟:(如果使用hibernate3會有一些差別)
第一步:引入jar包。第一次為了方便,我將很多jar包和依賴包全部直接拷進去了,實際上只需要一部分。具體需要什么,就加什么,可以在網上查到。
注意:把jar包導入后需要對所有包Add to Build Path;然后對工程名右鍵Build Path——>configure Build Path——>Add External JARS選擇tomcat路徑,添加"servlet-api.jar" ?"el-api.jar" ?"jsp-api.jar" 這三個jar包。
?
第二步:配置數據源,注解掃描包。spring-context.xml(名字可以隨便取)
<?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:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"><!-- 注解掃描包 --><context:component-scan base-package="main.java.lms" /><!-- 開啟注解 --><context:annotation-config /><!--數據源-mysql --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/laboratory" /><property name="username" value="root" /><property name="password" value="root" /></bean><!--數據源-sqlserver --><!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=laboratory"/> <property name="username" value="root" /> <property name="password" value="root" /> </bean> --><!--數據源-oracle --><!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="username" value="root" /> <property name="password" value="root" /> </bean> --><!-- Hibernate SessionFactory,hibernate3為class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" --><!--設置屬性說明 --><!--hibernate.dialect設置方言 --><!--hibernate.format_sql輸出格式化的sql --><!--hibernate.show_sql控制臺輸出sql --><!--hibernate.hbm2ddl.auto 自動創建|更新|驗證數據庫表結構。有以下幾個參數: create:每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等 應用第一次運行起來后才會。validate :每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。 --><!--current_session_context_class使用緩存機制。(hibernate3:Thread或jta);(hibernate4:org.springframework.orm.hibernate4.SpringSessionContext) --><!--hibernate.cache.provider_class 使用Ehcache緩存;hibernate3是org.hibernate.cache.HashtableCacheProvider;hibernate4是net.sf.ehcache.hibernate.EhCacheProvider --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop><!-- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> --><!-- <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> --><prop key="hibernate.show_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.format_sql">true</prop></props></property><!--自動掃描(實體類)注解包 --><property name="packagesToScan" value="main.java.lms"></property></bean> </beans>?
?
第三步:配置試圖解析器等,springmvc-context.xml
<?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:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"><!-- 注解掃描包 --><context:component-scan base-package="main.java.lms" /><mvc:annotation-driven /><mvc:default-servlet-handler /><!-- spring mvc 視圖解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix"><value>/WEB-INF/pages/</value></property><property name="suffix"><value>.jsp</value></property></bean><!--spring對hibernate的事務管理 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 自動掃描事務注解 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- <bean id="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="defaultErrorView"><value>error</value></property><property name="exceptionMappings"><props><prop key="java.lang.RuntimeException">error</prop></props></property></bean> --><import resource="spring-context.xml" /> </beans>?
?
第四步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>LaboratorySystemSpringmvc</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>3000</param-value></context-param><listener><listener-class> org.springframework.web.util.Log4jConfigListener </listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-context.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><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-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener><servlet><servlet-name>Spring MVC Dispatcher Servlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-context.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Spring MVC Dispatcher Servlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--getCurrentSession()事務會自動關閉,所以在所有jsp頁面查詢數據都會關閉session。要想在jsp查詢數據庫需要加入下面這個 --><filter><filter-name>SpringOpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>SpringOpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> </web-app>?
?
第五步:新建實例
package main.java.lms.entities;import java.io.Serializable;import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;/*** 用戶表* */ @Entity @Table(name="lms_user") public class User implements Serializable {/*** */private static final long serialVersionUID = -1461373625778051299L;private int userId;private String loginNumber;// 登陸名,即學號或工號private String loginPassword;private String userName;private String userIdentity;// 身份:學生,老師管理員:3,2,1// 用戶擴展表(與用戶一對一級聯關系)private UserExtends userExtends;public User(String loginNumber, String loginPassword) {this.loginNumber = loginNumber;this.loginPassword = loginPassword;}public User() {}@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name="user_ex_loginName",unique=true,referencedColumnName="user_ex_loginName")public UserExtends getUserExtends() {return userExtends;}public void setUserExtends(UserExtends userExtends) {this.userExtends = userExtends;}@Id@Column(name = "user_id", unique = true, nullable = false)public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}@Column(name = "user_loginName", unique = true, nullable = false)public String getLoginNumber() {return loginNumber;}public void setLoginNumber(String loginNumber) {this.loginNumber = loginNumber;}@Column(name = "user_loginPassword", nullable = false)public String getLoginPassword() {return loginPassword;}public void setLoginPassword(String loginPassword) {this.loginPassword = loginPassword;}@Column(name = "user_name", nullable = false)public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Column(name = "user_identity", nullable = false)public String getUserIdentity() {return userIdentity;}public void setUserIdentity(String userIdentity) {this.userIdentity = userIdentity;}}?
package main.java.lms.entities;import java.io.Serializable;import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter;/*** 用戶擴展表* */ @Entity @Table(name = "lms_userextends") public class UserExtends implements Serializable {/*** */private static final long serialVersionUID = 8046904045928469438L;// 用戶(與用戶擴展表一對一級聯關系)private User user;private String userExLoginNumber;private int sex;private String idCard;private String national;// 民族private String politicalLandscape;// 政治面貌private String placeOfOrigin;// 籍貫private String studyType;// 學生類別,本科專科:1本2專private String studentDepartment;// 所在系別private String studentProfessional;// 專業private String studentProfessionalDirection;// 專業方向private int stduentClass;// 班級private int grade;// 年級private String workDepartment;// 工作部門單位private String workPosition;// 工作職位private String workTitle;// 職稱private String phoneNumber;private String email;private String address;private int postalCode;@OneToOne(mappedBy="userExtends",cascade=CascadeType.ALL)public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Id@Column(name = "user_ex_loginName", unique = true, nullable = false)public String getUserExLoginNumber() {return userExLoginNumber;}public void setUserExLoginNumber(String userExLoginNumber) {this.userExLoginNumber = userExLoginNumber;}@Column(name = "user_sex")public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}@Column(name = "user_idCard")public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard = idCard;}@Column(name = "user_national")public String getNational() {return national;}public void setNational(String national) {this.national = national;}@Column(name = "user_politicalLandscape")public String getPoliticalLandscape() {return politicalLandscape;}public void setPoliticalLandscape(String politicalLandscape) {this.politicalLandscape = politicalLandscape;}@Column(name = "user_placeOfOrigin")public String getPlaceOfOrigin() {return placeOfOrigin;}public void setPlaceOfOrigin(String placeOfOrigin) {this.placeOfOrigin = placeOfOrigin;}@Column(name = "user_studyType")public String getStudyType() {return studyType;}public void setStudyType(String studyType) {this.studyType = studyType;}@Column(name = "user_studentDepartment")public String getStudentDepartment() {return studentDepartment;}public void setStudentDepartment(String studentDepartment) {this.studentDepartment = studentDepartment;}@Column(name = "user_studentProfessional")public String getStudentProfessional() {return studentProfessional;}public void setStudentProfessional(String studentProfessional) {this.studentProfessional = studentProfessional;}@Column(name = "user_studentProfessionalDirection")public String getStudentProfessionalDirection() {return studentProfessionalDirection;}public void setStudentProfessionalDirection(String studentProfessionalDirection) {this.studentProfessionalDirection = studentProfessionalDirection;}@Column(name = "user_studentClass")public int getStduentClass() {return stduentClass;}public void setStduentClass(int stduentClass) {this.stduentClass = stduentClass;}@Column(name = "user_grade")public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}@Column(name = "user_workDepartment")public String getWorkDepartment() {return workDepartment;}public void setWorkDepartment(String workDepartment) {this.workDepartment = workDepartment;}@Column(name = "user_workPosition")public String getWorkPosition() {return workPosition;}public void setWorkPosition(String workPosition) {this.workPosition = workPosition;}@Column(name = "user_workTitle")public String getWorkTitle() {return workTitle;}public void setWorkTitle(String workTitle) {this.workTitle = workTitle;}@Column(name = "user_phoneNumber")public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}@Column(name = "user_email")public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Column(name = "user_address")public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Column(name = "user_postalCode")public int getPostalCode() {return postalCode;}public void setPostalCode(int postalCode) {this.postalCode = postalCode;}}?
第六步:controller層
@Controller public class UserController {@Autowiredprivate UserServices userServices;/*** 映射首頁的地址,如果已登錄跳轉到首頁,未登錄跳轉到登錄界面* @param request* @param response* @return*/@RequestMapping(value="/index.html",method=RequestMethod.GET)public String toIndex(HttpServletRequest request,HttpServletResponse response){HttpSession session=request.getSession();if(session.getAttribute("user")!=null){return "user/index";}else {try {response.sendRedirect(request.getContextPath()+"/login.html");} catch (IOException e) {e.printStackTrace();}return "user/login";}}/*** 執行登錄操作* @param request* @param response* @throws IOException*/@RequestMapping(value="/login.action",method=RequestMethod.POST)public void Login(HttpServletRequest request,HttpServletResponse response) throws IOException{HttpSession session=request.getSession();String userName=request.getParameter("loginName");String userPassword=request.getParameter("loginPassword");String yanzhengma=request.getParameter("yanzhengma");String randNum=(String) request.getSession().getAttribute("random");System.out.println("系統生成的驗證碼:"+randNum);System.out.println("登陸界面傳過來的驗證碼:"+yanzhengma);//不區分大小寫比較相等if(!randNum.equalsIgnoreCase(yanzhengma)){response.setContentType("text/html;charset=UTF-8");response.getWriter().print("yanzhengmaError");return;}User user=new User();user.setLoginNumber(userName);user.setLoginPassword(userPassword);user=this.userServices.userLogin(user);response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");try {if(user!=null){session.setAttribute("user", user);response.getWriter().print("true");}else {response.getWriter().print("false");}} catch (Exception e) {}} }?
第七步:service層?
@Transactional @Service("userService") public class UserServicesImpl implements UserServices{@Autowiredprivate UserDao userDao;@Overridepublic User userLogin(User user) {System.out.println("call service");User user2=this.userDao.userLogin(user);return user2;} }?
?第八步:dao層
(1)使用hql
@Repository("userDao") public class UserDaoImpl implements UserDao {@Autowiredprivate SessionFactory sessionFactory;@Overridepublic User userLogin(User user) {System.out.println("call dao");User user2 = (User) this.sessionFactory.getCurrentSession().createQuery("FROM User u where u.loginNumber=:loginName and u.loginPassword=:password").setString("loginName", user.getLoginNumber()).setString("password", user.getLoginPassword()).uniqueResult();return user2;} }
(2)使用原生sql
@Repository("deviceDao") @SuppressWarnings("unchecked") public class DeviceDaoImpl implements DeviceDao {@Autowiredprivate SessionFactory sessionFactory;/*** 查詢所有倉庫設備* */@Overridepublic List<Device> getDevice() {// isdelete = 2199-12-31 23:59:59,表示有效String sql = "SELECT id AS deviceId,name,info,avaiNum,damageNum FROM lms_device WHERE isDelete = '2199-12-31 23:59:59'";SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(sql);query.addScalar("deviceId", StandardBasicTypes.INTEGER);query.addScalar("name", StandardBasicTypes.STRING);query.addScalar("info", StandardBasicTypes.STRING);query.addScalar("avaiNum", StandardBasicTypes.INTEGER);query.addScalar("damageNum", StandardBasicTypes.INTEGER);query.setResultTransformer(Transformers.aliasToBean(Device.class));return query.list();} }?
最后補充:為了方便在控制臺看見后臺操作的結果,能夠輸出后臺執行情況,再加一個文件log4j.properties
1 ##OFF->FATAL->ERROR->WARN->INFO->DEBUG->ALL 2 ##ERROR->WARN->INFO->DEBUG 3 # define a logger named CONSOLE 4 log4j.rootLogger=INFO, CONSOLE 5 # CONSOLE logger - console 6 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 7 # COSOLE Layout 8 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 9 # CONSOLE format Layout 10 log4j.appender.CONSOLE.layout.ConversionPattern=%5p %d{yyyy-MM-dd HH:mm:ss,SSS} %c:(%F:%L) - %m%n?
所有的配置文件就是下面這幾個。
到這里,再寫好jsp頁面就可以運行一個springmvc的網站了。
?
第一次寫博客,謹記。
轉載于:https://www.cnblogs.com/liuqinc/p/5764448.html
總結
以上是生活随笔為你收集整理的SpringMVC项目配置全过程详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 列表的推导器和内置函数
- 下一篇: JavaScript eval() 函数