我好像很久都没有认认真真写过blog了,最近很闲,特别闲,到那种地步呢?两个月多没什么大事做,这期间我一直再看框架方面的知识,对很多东西都有了新的认识,O(∩_∩)O~~开心。
无意间,想起了多年前(其实也就是一年前(*^__^*)……)我去一家公司面试,一进去给台电脑笔试,用ssh写一个demo,把数据库里面的信息显示在页面上,对于刚毕业的我来说,算是个难点,ssh?前台后台结合?配置文件?怎么跟数据库连接?这一步步都是问题,因为我还没有到水到渠成的时候,一同面试的还有两个前辈,工作一两年了,我尽所能的写出我知道的东西。。
三个小时之后,我们都离开了办公室,所谓筋疲力尽,当时正值中午12点。又饿又累,虽然没做出来,但是确实努力了,我问了问一同面试的两个男生,他们最后做出来了吗?。。。。没有。。。哦,忘了说,我们用来开发的那台电脑,都是干净的什么都没装,开发工具,jdk什么的都没装,要自己安装,配置然后在开发。
写出来的东西尽显的平淡无味,切身体会过,再次回想起来心还是会波动。
我今天也用了一点时间,写了一个小demo,很简单,没什么功能就是把数据库里面的数据显示在页面上,用spring+hibernate +jsp
没用到什么技术,用spring ioc完成bean的配置
使用spring mvc构建表现层 用hibernate数据库操作组件实现数据库数据操作的具体实例,能实现我最基本的功能显示数据就可以了。
写这个blog的目的是为了纪念一年前的那次笔试。无他。
项目截图:
附加一个:
新建两张表 vet 和master 宠物和主人的表 create table master( id int primary key identity(1,1), name varchar(30) not null, age int not null, email varchar(30) not null, career varchar(30) not null ) insert into master values('舒婷',23,'wst1@163.com','java程序員') insert into master values('ken',33,'ken@163.com','老闆') insert into master values('herry',43,'herry@163.com','CEO') insert into master values('baby',53,'baby@163.com','經歷') create table vet( id int primary key identity(1,1), name varchar(30) not null, age int not null, masterid int Default (0), species varchar(30) not null ) insert into vet values('tally',1,0,'cat') insert into vet(name,age,species) values('jlly',1,'dog')--插入有默認值的數據時,省略有默認值的字段 insert into vet(name,age,masterid,species) values('fmmay',1,1,'dog')-- 加上有默認值的字段,并輸入對應的值. select * from vet 配置文件 Web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>test</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationConfig/app-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> <?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- Scans the classpath of this application for @Components to deploy as beans --> <!-- 規約所有進行掃描的類,以完成Bean創建和自動依賴注入功能 --> <!-- 完全取消bean配置的做法就是使用component 但是要指明使用注解的java类 --> <context:component-scan base-package="www.com.spring.*" /> <!-- <context:annotation-config /> --> <!-- Configures the @Controller programming model --> <mvc:annotation-driven /> <!-- 使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中, --> <!-- misc --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="suffix" value=".action"/> </bean> <!-- Configures Hibernate - Database Config --> <import resource="db-config.xml" /> </beans> <?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"><value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value></property> <property name="url"><value>jdbc:sqlserver://10.1.100.217:8080;DatabaseName=smartclient</value></property> <property name="username"><value>000</value></property> <property name="password"><value>12345678</value></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"><ref local="dataSource"/></property> <property name="packagesToScan" value="www.com.spring.*" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> <!-- <prop key="hibernate.hbm2ddl.auto">update</prop>--> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <!-- 定义一个事物管理器 --> <tx:annotation-driven/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> <qualifier value="petclinic"/><!-- 限定词 --> </bean> </beans> 下面是vet实体类: package www.com.spring.module; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "vet") public class Vet { private int id; private String name; private int age; private int masterid; private String species; @Id @GeneratedValue @Column(name = "id") public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "age") public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Column(name = "masterid") public int getMasterid() { return masterid; } public void setMasterid(int masterid) { this.masterid = masterid; } @Column(name = "species") public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } } Dao层: package www.com.spring.dao; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import www.com.spring.module.Vet; @Repository public class VetDao { private HibernateTemplate hibernateTemplate; @SuppressWarnings("unused") @Autowired private void setHibernateTemplate (SessionFactory sessionFactory){ this.hibernateTemplate =new HibernateTemplate(sessionFactory); } public List<Vet> getAllVets(){ String hql = "from Vet"; List<Vet> list = this.hibernateTemplate.find(hql); return list; } } 业务层service package www.com.spring.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import www.com.spring.dao.VetDao; import www.com.spring.module.Vet; @Service public class VetService { private VetDao vetDao ; @Autowired public void setVetDao(VetDao vetDao) { this.vetDao = vetDao; } @Transactional("petclinic") public List<Vet> getAllVets(){ return this.vetDao.getAllVets(); } } Web层 package www.com.spring.web; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import www.com.spring.module.Vet; import www.com.spring.service.VetService; @Controller public class VetWeb { private VetService vetService; @Autowired public void setVetService(VetService vetService) { this.vetService = vetService; } @RequestMapping(value = "petclinic/getAllVet.action") public void getAllVets(HttpServletRequest request,HttpServletResponse response){ List<Vet> list = this.vetService.getAllVets(); request.setAttribute("data", list); RequestDispatcher dispatcher = request.getRequestDispatcher("/vet.jsp"); try { dispatcher.forward(request, response); } catch (ServletException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } 前台vet.jsp 代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>宠物信息页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <script type="text/javascript" src="js/showPic.js"></script> <jsp:include page="head.jsp"></jsp:include> <table border="1"> <tr><td>宠物编号</td><td>宠物名称</td><td>宠物年龄</td><td>是否被领养</td><td>物种分类</td></tr> <c:forEach var="vet" items="${data}"> <tr> <td>${vet.id}</td><td><a href="${vet.name}.jsp" >${vet.name}</a></td> <td>${vet.age}</td><td>${vet.masterid}</td><td>${vet.species}</td> </tr> </c:forEach> </table> </body> </html>