编写一个基本的ssh例子(2)
来源:互联网 发布:淘宝店铺店招图片手机 编辑:程序博客网 时间:2024/04/28 07:13
上一篇已经搭建了一个最基本的ssh开发环境。也能基本运行了,但是没有写实际的代码,只是把环境给配置好了。这次我们来写一个简单的例子,这个例子是参考网上的一个工程,本人也是菜鸟,哈哈
完整的工程目录如下:
首先我们创建好Userinfo.java , BaseDao.java , UserManagerService.java还有UserManagerAct.java这三个文件。并放到相应的包里面去分别是org.ssh.pojo,org.ssh.dao,org.ssh.service,org.ssh.action。如上图所示;下面逐一分析这个几个类
1.Userinfo.java 这是一个pojo类,也就是实体类。先看看代码先
package org.ssh.pojo;/** * 用户信息 */public class Userinfo implements java.io.Serializable {private static final long serialVersionUID = 5866268712137826050L;/**用户id*/private Integer id;/**用户名*/private String uname;/**性别*/private String sex;/**密码*/private String password;/**电话号码*/private String telphone;/**住址*/private String address;public Userinfo() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getUname() {return this.uname;}public void setUname(String uname) {this.uname = uname;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex = sex;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}public String getTelphone() {return this.telphone;}public void setTelphone(String telphone) {this.telphone = telphone;}public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}}这个类主要是用来描述一个实体对象,跟数据库的用户表产生映射关系,所以我们还要在UserInfo.java的同级目录下创建一个hibernate的描述文件Userinfo.hbm.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="org.ssh.pojo.Userinfo" table="userinfo" catalog="myssh"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="assigned"></generator> </id> <property name="uname" type="java.lang.String"> <column name="uname" length="30" not-null="true" unique="true"/> </property> <property name="sex" type="java.lang.String"> <column name="sex" length="10" not-null="true" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="20" not-null="true" /> </property> <property name="telphone" type="java.lang.String"> <column name="telphone" length="15" /> </property> <property name="address" type="java.lang.String"> <column name="address" length="50" /> </property> </class></hibernate-mapping>这个内容应该不难理解,其实就是描述一下这个类关联数据库的那个表,那个属性关联哪一列,数据类型是什么...,这里不详细研究了,下次用注解就不用这个文件了。
2.BaseDao.java 这个类主要实现数据库的操作,这里只是一些简单的实现。上代码
package org.ssh.dao;import java.io.Serializable;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;/** * 数据库io操作 */public class BaseDao extends HibernateDaoSupport {/**查询*/public <T> List<T> getObjects(String queryString){return (List<T>)this.getHibernateTemplate().find(queryString);}/**查询所有*/public <T> List<T> getAllObjects(Class<T> clazz){return this.getHibernateTemplate().loadAll(clazz);}/**添加一个*/public <T> void addObject(T clazz){this.getHibernateTemplate().save(clazz);}/**更新指定的*/public <T> void updateObject(T clazz){this.getHibernateTemplate().update(clazz);}/**删除指定的*/public <T> void deleteObject(T clazz){this.getHibernateTemplate().delete(clazz);}/**通过id获取*/public <T> T getObject(Class<T> clazz,Serializable id){return this.getHibernateTemplate().get(clazz, id);}}
3.UserManagerService.java 用户管理业务逻辑的实现,这个是业务逻辑层,业务逻辑在这里实现,这里操作数据库是调用上一层dao层代码。上代码
package org.ssh.service;import java.util.List;import org.ssh.dao.BaseDao;/** * 用户管理业务逻辑的实现 * */public class UserManagerService<T> {private BaseDao dao;public T doLogin(String userName,String password) throws Exception{if(userName == null || password == null) return null;String queryString = "SELECT u FROM Userinfo u WHERE u.uname = '"+userName +"' AND u.password = "+password;List<T> users = dao.getObjects(queryString);return users.get(0);}public List<T> queryUsers(String uname,Class<T> clazz){if(uname == null || "".equals(uname))return dao.getAllObjects(clazz);String queryString = "SELECT u FROM Userinfo u WHERE u.uname like '"+uname+"%'";return dao.getObjects(queryString);}public void addUser(T user) throws Exception{dao.addObject(user);}public void modifyUser(T user) throws Exception{dao.updateObject(user);}public void deleteUser(int id,Class<T> clazz) throws Exception{T u = dao.getObject(clazz, id);dao.deleteObject(u);}public T getUser(Class<T> clazz, int id){return dao.getObject(clazz, id);}public BaseDao getDao() {return dao;}public void setDao(BaseDao dao) {this.dao = dao;}}
4.UserManagerAct.java 这是一个action,充当视图控制器的角色,也就是mvc中的c。直接与外部打交道,可以供客户端调用,也可以和jsp等调用,这一层通过调用业务逻辑层来完成功能。不直接操作数据库,业务逻辑也不在这里实现。一些界面控制可以在这里实现,上代码
package org.ssh.action;import java.util.List;import org.apache.struts2.ServletActionContext;import org.ssh.pojo.Userinfo;import org.ssh.service.UserManagerService;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 用户管理控制器 * */public class UserManagerAct extends ActionSupport {private static final long serialVersionUID = -281275682819237996L;private Userinfo user = new Userinfo(); private UserManagerService<Userinfo> userService;private List<Userinfo> users;private String searchText;public String doLogin(){if(this.user.getUname() == null || this.user.getPassword() == null) return INPUT;try {Userinfo user = userService.doLogin(this.user.getUname(), this.user.getPassword());if(user != null){ActionContext.getContext().getSession().put("userinfo", user);return doQuery();}elsereturn INPUT;} catch (Exception e) {return ERROR;}}public String doQuery(){searchText = getParam("queryText");users = userService.queryUsers(searchText,Userinfo.class);return SUCCESS;}public String doAdd(){String result = "";try {String param = getParam("param");if(Integer.parseInt(param) > 0){user.setId(0);userService.addUser(user);result = doQuery();}elseresult = "addUser";} catch (Exception e) {e.printStackTrace();}return result;}public String doEdit(){try {Integer param = Integer.parseInt(getParam("param"));if(param == 0){Integer id = Integer.parseInt(getParam("id"));user = userService.getUser(Userinfo.class, id);return "editUser";}else if(param == 1){userService.modifyUser(user);}} catch (Exception e) {e.printStackTrace();}return doQuery();}public String doDelete(){try {Integer param = Integer.parseInt(getParam("id"));userService.deleteUser(param,Userinfo.class);} catch (Exception e) {e.printStackTrace();}return doQuery();}protected String getParam(String key){return ServletActionContext.getRequest().getParameter(key);}public UserManagerService<Userinfo> getUserService() {return userService;}public void setUserService(UserManagerService<Userinfo> userService) {this.userService = userService;}public List<Userinfo> getUsers() {return users;}public Userinfo getUser() {return user;}public void setUser(Userinfo user) {this.user = user;}public String getSearchText() {return searchText;}public void setSearchText(String searchText) {this.searchText = searchText;}}
至此所有的java代码已经完成接下来我们还要配置一些内容,目的是让ssh使用上面的代码。
1.配置applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 数据库配置 --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/myssh"></property><property name="username" value="anan"></property><property name="password" value="xxxxxx"></property></bean><!-- --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 配置实体描述文件 --><property name="mappingResources"><list><value>org/ssh/pojo/Userinfo.hbm.xml</value></list></property></bean><bean id="userAct" class="org.ssh.action.UserManagerAct" scope="prototype"><property name="userService" ref="userService"></property></bean><bean id="userService" class="org.ssh.service.UserManagerService"><property name="dao" ref="dao"></property></bean><bean id="dao" class="org.ssh.dao.BaseDao"><property name="sessionFactory" ref="sessionFactory"/></bean></beans>
这里主要是配置了hibernate加载我们的实体类Userinfo
同时配置了spring加载我们的dao,service和action...
2.struts.xml 配置action
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.objectFactory" value="spring" /><package name="MySSH" extends="struts-default"><global-results><result name="error">/jsp/error.jsp</result><result name="success">/jsp/success.jsp</result></global-results><action name="userManagerAct" class="userAct" method="doLogin"><result name="login">/index.jsp</result></action><action name="query" class="userAct" method="doQuery" /><action name="delete" class="userAct" method="doDelete" /><action name="edit" class="userAct" method="doEdit"><result name="editUser">/jsp/editUser.jsp</result></action><action name="add" class="userAct" method="doAdd"><result name="addUser">/jsp/addUser.jsp</result></action></package></struts>
3.最后配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <!-- Spring配置和监听start --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/application*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--end--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping></web-app>
好了,配置完成了。接下来还要写一些jsp文件让这个蛋疼的东西飞起来
1.index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%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> <font size="4">这个一个 struts2,spring 和 hibernate 使用的例子。请用以下账号密码登录<br> 默认账号/密码: <font color="red">anan/123</font><br> <br>请事先在数据库插入用户信息 </font> <br> <br> <form action="userManagerAct.action" method="post"> <table> <tr> <td>username</td><td><input type="text" name="user.uname"/></td> <td>password</td><td><input type="password" name="user.password"/></td><td>密 码</td><td></td> </tr> <tr> <td colspan="2"> <input type="submit" value="submit"> <input type="reset" value="reset"> </td> </tr> </table> </form> </body></html>
2.addUser.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>user list page</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><form action="add.action" method="post"><table width="500" align="center"><caption>ADD USER INFORMATION</caption><tr height="26px"><td width="150px" align="right">UNAME</td><td width="350px"><input type="hidden" name="param" value="1"/><input type="text" name="user.uname" value="${user.uname }"/></td></tr><tr height="26px"><td align="right">PASSWORD</td><td><input type="password" name="user.password" value="${user.password }"/></td></tr><tr height="26px"><td align="right">SEX</td><td><select name="user.sex"><option value="male">male</option><option value="female">female</option></select></td></tr><tr height="26px"><td align="right">TELPHONE</td><td><input type="text" name="user.telphone" value="${user.telphone }"/></td></tr><tr height="26px"><td align="right">ADDRESS</td><td><input type="text" name="user.address" value="${user.address }"/></td></tr><tr height="26px"><td colspan="2" align="center" width="500"><input type="submit" value="Save"/><input type="button" value="Back" onclick="window.history.back(-1)"/></td></tr></table></form></body></html>
3.editUser.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>user list page</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><form action="edit.action" method="post"><table width="500" align="center"><caption>User Information Edit</caption><tr height="26px"><td width="150px" align="right">NO.</td><td width="350px"><input type="text" name="user.id" value="${user.id }" readonly="readonly"/><input type="hidden" name="user.password" value="${user.password }"/><input type="hidden" name="param" value="1"/></td></tr><tr height="26px"><td width="160" align="right">UNAME</td><td><input type="text" name="user.uname" value="${user.uname }"/></td></tr><tr height="26px"><td width="70" align="right">SEX</td><td><select name="user.sex"><option value="male">male</option><option value="female">female</option></select></td></tr><tr height="26px"><td width="150" align="right">TELPHONE</td><td><input type="text" name="user.telphone" value="${user.telphone }"/></td></tr><tr height="26px"><td width="300" align="right">ADDRESS</td><td><input type="text" name="user.address" value="${user.address }"/></td></tr><tr height="26px"><td colspan="2" align="center"><input type="submit" value="Save"/><input type="button" value="Back" onclick="window.history.back(-1)"/></td></tr></table></form></body></html>
4.error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%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>My JSP 'error.jsp' starting page</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"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> 登录失败,2秒后自动转到登录页面.... <script type="text/javascript"> setTimeout(reDo, 2000); function reDo(){ window.location.href = "/struts2_spring_hibernate1.0/index.jsp"; } </script> </body></html>
5.sucess.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>user list page</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><form action="query.action" method="post"><table align="center"><tr><td style="vertical-align: middle;">USERNAME<input type="text" style="width: 300px;height: 30px;font-size: 16px" name="queryText" value="${searchText }"/><input type="submit" value="Query" style="width: 100px;height: 30px;font-size: 16px"/><input type="button" value="Add" style="width: 100px;height: 30px;font-size: 16px" onclick="window.location.href='add.action?param=0'"/></td></tr></table></form><table align="center" border="1" cellpadding="0" cellspacing="0" bordercolor="#3366cc"><tr align="center" bgcolor="#3399cc" height="26px"><td width="100">NO.</td><td width="160">UNAME</td><td width="70">SEX</td><td width="150">TELPHONE</td><td width="300">ADDRESS</td><td width="120">EDIT/DELETE</td></tr><c:forEach var="user" items="${users }"><tr align="center" height="24px"><td width="100">${user.id}</td><td width="160">${user.uname}</td><td width="70">${user.sex }</td><td width="150">${user.telphone }</td><td width="300">${user.address}</td><td width="120"><a href="edit.action?param=0&id=${user.id}">编辑</a> <a href="delete.action?id=${user.id}">删除</a></td></tr></c:forEach></table></body></html>
全部文件应该都搞定了,相比上一次的工程需要添加一些jar包,稍后我把整个工程代码上传。或者大家自己去找缺少的jar包
运行一下:
程序运行成功,有点成就感...
总结一下:
基于ssh开发环境搭建相比起来确实麻烦不少,特别是jar的依赖,而且要整套搞起来东西还是挺多的。但是搞鼓完了之后收获还是蛮大的,之前学习的很多概念性的东西都不理解,搞完这个之后貌似都有点感觉了。ssh真不愧是经典的框架之一,下次我将用注解来实现
工程下载地址:
http://download.csdn.net/detail/yunji3344/4890206
- 编写一个基本的ssh例子(2)
- 编写一个基本的ssh例子(2)
- 编写一个简单的SSH例子
- 整合SSH框架最基本的例子
- ajax的一个基本例子
- 编写控制面板程序的一个例子 (转)
- 一个简单的网页编写的例子
- 编写控制面板程序的一个例子
- 一个编写过程的例子 ArraySum PROC
- spark Streaming编写一个WorldCount的例子
- 基本多线程编程的一个例子
- 一个基本的傅立叶变换例子
- 编写一个基本的Android程序
- 编写一个基本的Android应用程序
- velocity模板引擎的基本语法(个人实际编写的例子)
- 利用全注解实现ssh的一个完整例子
- 利用全注解实现ssh的一个完整例子
- 利用全注解实现ssh的一个完整例子
- tomcat-5.5.25-4.0+jdk1.4
- 算法与数据结构之堆排序
- MyEclipse 打包和发布的个人总结
- 2013年科技10大看点:苹果之变
- java GUI编程总结图
- 编写一个基本的ssh例子(2)
- 30+ Web下拉菜单
- 屌丝自制路由器 破校园网络封锁
- 谷歌地图跃居苹果应用店第一
- struts2教程:13、访问或添加request/session/application属性
- 浏览器BUG大集合(持续更新)
- hdu 1068 Girls and Boys
- Windows下如何打开*.pages文件
- 注入代码oracle