建立一个简单的部门内部留言板(在web上的实战),使用到的东西有hibernate和Struts
1.首先,我们从数据库入手,建立两张表,一张是用户表(users)用来储存用户的信息,另一张是信息表(message)用来储存留言或是上传文件等等
users表属性包括:id name passwd
message表属性包括:id sender getter content sendTime attachment
2.创建我们的web项目
3.引入Struts开发包(在项目名上右键,选择MyEclipse,再选择add Struts Capabilities)
4.使用DB Browser连接到MySQL数据库
5.引入hibernate(最后一步的时候我们还是不用他的工具类了,可以使用我们自己的工具类)
6.创建需要的包
com.sina.domain; com.sina.service; com.sina.util
7.通过hibernate的逆向工程创建domain对象的映射文件(如果两个表有主外键的关系,应该先映射主表后映射外表)
8.打开Struts-cfg.xml开始写前端的东西(可以添加jsp的界面,直接拖到网格上就可以了,选择相应的路径,一般放在WEB-INF上)然后建一个表单,右键new 一个form,加一个名字;然后是添加一个action,因为要处理这个登陆的事情,还是右键,new一个action,SuperClass那里选择dispatch那个,然后下边form里对表做关联,parameter参数这里加一个flag,其他的不用动
添加两个JSP界面,一个是login登陆界面一个是main登陆成功的界面,之后拉起线来,说明这几个的跳转关系
还需要建立一个message表单,superClass选择ActionForm;再加一个action起名叫message,专门管理message的事情的(增删改查等等)
双击任何一个方块都能够打开这个jsp界面进行修改,首先是我们的login页面,我们添加相应的登录表单进去,可以先写一个比较简单的表单:
<body>
<h1>用户登录</h1>
<form action="/mymessageboard/login.do?flag=login" method="post" >
u:<input type="text" name="name"/></br>
p:<input type="password" name="passwd"/></br>
<input type="submit" value="login">
</form>
</body>
然后双击loginAction这块,把里边的execute修改为login:
public ActionForward login(ActionMapping mapping, ActionForm form,
接着双击main这块:
<body>
<a href="/mymessageboard/message.do?flag=gotoPublish">发布信息</a> <a href="#">退出信息</a><br/>
留言信息:<br/>
<table border="1">
<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
</table>
</body>
这里的gotoPublish是与MessageAction相连接的
因为在MessageAction中有这么一句:
public ActionForward gotoPublish(ActionMapping mapping, ActionForm form,
顺其自然的写到了MessageAction:
public ActionForward gotoPublish(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
MessageForm messageForm = (MessageForm) form;// TODO Auto-generated method stub
return mapping.findForward("goPublishUI");
}
这里有通过goPublishUI这条路径走到了publish.jsp这个页面(整个走下来的过程都是开始时Struts.cfg.xml做好的,前边有截图)剩下的就是简单的写一写publish这个页面,这样整根线就调通了。
9.开始写service层,在service包中新建一个UsersService类和一个MessageService类
首先是UsersService类:
public Users checkUser(Users users){
String hql = "from Users where name='"
+users.getName()+"' and passwd='"+users.getPasswd()+"'";
List<Users> list = HibernateUtil.executeQuery(hql);
if (list.size()==1) {
return list.get(0);
} else {
return null;
}
}
这里边executeQuery()这个函数是我自己封装在HibernateUtil里边的一个查询时常用的函数:
public static List executeQuery(String hql) {
Session session = null;
Transaction ts = null;
List list = null;
try {
session = HibernateUtil.getCurrentSession();
ts = session.beginTransaction();
//做查询
list = session.createQuery(hql).list();
ts.commit();
} catch (Exception e) {
if (ts!=null) {
ts.rollback();
}
throw new RuntimeException(e.getMessage());
}finally{
if(session!=null&&session.isOpen()){
session.close();
}
}
return list;
}
这个函数以后可以进行反复的使用,因此就放入了我自己的hibernate工具包。
现在我们回到LoginAction,使用userservice来进行用户验证的工作:
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
//调用service类完成验证工作
Users users = new Users();
users.setName(userForm.getName());
users.setPasswd(userForm.getPasswd());
//创建service
UsersService usersService = new UsersService();
users = usersService.checkUser(users);
if(users != null){
request.getSession().setAttribute("usersinfo", users);
return mapping.findForward("loginok");
}else{
return mapping.findForward("loginerror");
}
}
这样如果查出来了这个user(也就是说查到的user不是null,证明这个用户是注册过的,是合法的,跳转到loginok的页面),否则跳转到loginerror的页面。