IDEA 下写出第一个 SSH 整合框架练手项目(二,整合SSH及登陆页面的完成)
来源:互联网 发布:乐清知临中学地址 编辑:程序博客网 时间:2024/06/05 02:45
视频地址: 基于SSH实现员工管理系统之案例实现篇
我的整个完整源码地址 : 点击进入 github
这是SSH 整合项目的第二章,第一章基于Meavn 整合 Spring 和 Hibernate 框架并进行了进行了自动建表,这一章则在此基础上加入 Struts 2 框架以及完成一个简单的登陆页面。
1. 配置 Struts 2
选中 Project Struts <---- Modules 的 Web 后,点击 2号位 “+” 添加 Struts 2 后点3号位 “+” 将其中的两个文件都添加进去。(不加这两个文件,会在Struts 的配置文件中看到非常多的不识别,不影响程序运行,但很不美观。)
在 resources 中新建一个
然后在 web.xml 添加 struts 2 过滤器
<!-- struts2容器控制器 --> <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>/*</url-pattern> </filter-mapping>
2.导入页面素材并进行更改
此时,去编写login.jsp ,因为界面是老师提供好的,所以我直接所有的jsp和相关文件都传到百度云上了 “点击打开百度云” , 密码为:li9j
下载后直接复制到 web 目录下,将 login.html 中的内容直接复制到login.jsp,,然后照着下面这份代码进行修改,需要修改的地方已经写上注释
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%-- 将声明头更改为jsp 的声明头文件 ,并且增加一个标签库, 控制标签可以完成输出流程控制,例如分支,循环等操作,也可以完成对集合的合并,排序等操作。(具体用法建议 百度)--%><html><head> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> <title>登陆</title> <link type="text/css" rel="stylesheet" href="style/reset.css"> <link type="text/css" rel="stylesheet" href="style/main.css"> <!--[if IE 6]> <script type="text/javascript" src="js/DD_belatedPNG_0.0.8a-min.js"></script> <script type="text/javascript" src="js/ie6Fixpng.js"></script> <![endif]--></head><body><div class="headerBar"> <div class="logoBar login_logo"> <div class="comWidth"> <div class="logo fl"> <a href="#"><img src="images/logo.jpg" alt="慕课网"></a> </div> <h3 class="welcome_title">欢迎登陆</h3> </div> </div></div><s:form action="employee_login" method="post" namespace="/"> <%-- <s:form action="login" namespace="/"> 它表示的是<form id="login" name="login" action="login.action" method="post"> 因为它使用了struts标签,后面会自动加“.action”,而且namespace会起作用 employee_login将在 struts 2的配置文件中 struts.xml 中被配置 --%> <div class="loginBox"> <h3><s:actionerror/></h3> <%--输出登陆失败的错误信息,将在Action的login()方法被赋值,null时不显示--%> <div class="login_cont"> <ul class="login"> <li class="l_tit">用户名</li> <li class="mb_10"><input type="text" name="username" class="login_input user_icon"></li> <%--添加了 name = "username"--%> <li class="l_tit">密码</li> <li class="mb_10"><input type="password" name="password" class="login_input user_icon"></li> <%--更改 type="password", 添加了 name = "password" ……END……--%> <li><input type="submit" value="" class="login_btn"></li> </ul> <div class="login_partners"> <p class="l_tit">使用合作方账号登陆网站</p> <ul class="login_list clearfix"> <li><a href="#">QQ</a></li> <li><span>|</span></li> <li><a href="#">网易</a></li> <li><span>|</span></li> <li><a href="#">新浪微博</a></li> <li><span>|</span></li> <li><a href="#">腾讯微薄</a></li> <li><span>|</span></li> <li><a href="#">新浪微博</a></li> <li><span>|</span></li> <li><a href="#">腾讯微薄</a></li> </ul> </div> </div> </div></s:form><div class="hr_25"></div><div class="footer"> <p><a href="#">慕课简介</a><i>|</i><a href="#">慕课公告</a><i>|</i> <a href="#">招纳贤士</a><i>|</i><a href="#">联系我们</a><i>|</i>客服热线:400-675-1234 </p> <p>Copyright © 2006 - 2014 慕课版权所有 京ICP备09037834号 京ICP证B1034-8373号 某市公安局XX分局备案编号:123456789123</p> <p class="web"><a href="#"><img src="images/webLogo.jpg" alt="logo"></a><a href="#"><img src="images/webLogo.jpg" alt="logo"></a><a href="#"><img src="images/webLogo.jpg" alt="logo"></a><a href="#"><img src="images/webLogo.jpg" alt="logo"></a></p></div></body></html>
3.明确业务逻辑
然后新建一些类,如图所示。(业务逻辑为: jsp点击后 ———> web.xml 中配置的拦截器--------> 查询struts.xml,将拦截到的信息发给 EmployeeAction.java 负责与struts.xml 联系。-------->EmployeeServiceImpl.java实现业务逻辑(实现EmoployeeService.java 接口) --------------> EmployeeDaoImpl.java 实现操作数据库(实现EmployeeDao.java) )
4.基于业务逻辑实现登陆界面的功能。
然后进入 struts.xml 文件中进行拦截,使用户输入的信息被判断后跳转。
那么,我先配置web.xml 中增加struts 的拦截器.在web.xml 中增加一段
<!-- struts2容器控制器 --> <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>/*</url-pattern> </filter-mapping>struts.xml更改后为:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!--增加包-->
<package name="ssh" extends="struts-default" namespace="/"> <action name="employee_*" class="com.test.ssh.action.EmployeeAction" method="{1}"> <result name="input">/login.jsp</result> <!--返回值为"input"时,跳转至login.jsp,并通过login.jsp中的s:actionerror 告诉用户错误信息--> <result name="success" type="redirect">/frame.jsp</result> <!--返回值为“success”时,跳转到管理界面--> </action> </package></struts>EmployeeAction.java 改为:
package com.test.ssh.action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.test.ssh.domain.Employee;public class EmployeeAction extends ActionSupport implements ModelDriven<Employee> { //模型驱动使用的对象 private Employee employee = new Employee(); public String login() { return "success"; } @Override public Employee getModel() { return employee; } public void setEmployee(Employee employee) { this.employee = employee; }}然后运行测试,进入login.jsp 页面,直接点击,如果跳转进入了管理系统,则struts 配置成功
然后进行登陆功能的实现。
我们已经在 login.jsp中实现了跳转功能,web.xml中也已经使用了struts的拦截器,
所以开始写服务器端的 login方法。
EmployeeAction.java 改为: login成功返回“success”,失败返回“input”,并将失败原因改写:“用户或密码错误”
package com.test.ssh.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.test.ssh.domain.Employee;import com.test.ssh.service.EmployeeService;public class EmployeeAction extends ActionSupport implements ModelDriven<Employee> { //模型驱动使用的对象 private Employee employee = new Employee(); //进入业务层类 private EmployeeService employeeService; public String login() { //此时,还未定义public Employee login(Employee employee)方法,会有报错 Employee existEmployee = employeeService.login(employee); if(existEmployee == null){ //方法返回值为空,登陆失败 this.addActionError("用户名或密码错误"); return INPUT; }else { //成功查询并返回,登陆成功 ActionContext.getContext().getSession().put("existEmployee",existEmployee); return SUCCESS; } } @Override public Employee getModel() { return employee; } //Employee 和 EmployeeService 的 setter,可以使 Spring 进行注入 public void setEmployee(Employee employee) { this.employee = employee; } public void setEmployeeService(EmployeeService employeeService) { this.employeeService = employeeService; }}
在Action 层调用了 Service 层的 login 函数,先在接口 EmployeeService.java 中定义
public Employee login(Employee employee);然后再在接种的实现类EmployeeServiceImpl.java 中实现这个方法
EmployeeServiceImpl.java
package com.test.ssh.service.impl;import com.test.ssh.dao.impl.EmployeeDaoImpl;import com.test.ssh.domain.Employee;import com.test.ssh.service.EmployeeService;public class EmployeeServiceImpl implements EmployeeService{ //先进行对 EmployeeDao 的注入 private EmployeeDaoImpl employeeDao; @Override public Employee login(Employee employee) { return employeeDao.login(employee); } public void setEmployeeDao(EmployeeDaoImpl employeeDao) { this.employeeDao = employeeDao; }}同理,在Dao和DaoImpl中分别修改
EmployeeDao.java
package com.test.ssh.dao;import com.test.ssh.domain.Employee;public interface EmployeeDao { public Employee login(Employee employee);}EmployeeDaoImpl.java
package com.test.ssh.dao.impl;import com.test.ssh.dao.EmployeeDao;import com.test.ssh.domain.Employee;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import java.util.List;/** * 这里继承了HibernateDaoSupport,该类主要提供两个方法,方便 DAO 的实现 * public final void setSessionFactory(SessionFactory sessionFactory) * 用来接收Spring的ApplicationContext的依赖注入 * public final HibernateTemplate getHibernateTemplate() * 用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。 */public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao{ @Override public Employee login(Employee employee) { String hql = "FROM Employee WHERE username = ? AND password = ?"; List<Employee> list = this.getHibernateTemplate().find(hql, employee.getUsername(), employee.getPassword()); if (list.size() > 0) { return list.get(0); } return null; }}
最后,配置applicationContext.xml 中struts 的自动注入部分
在<beans></beans>中添加以下代码
<!--配置 Struts Actionl欸 Bean,,,Scope 为Prototype --> <bean id="employeeAction" class="com.test.ssh.action.EmployeeAction" scope="prototype"> <property name="employeeService" ref="employeeService"/> </bean> <bean id="employeeService" class="com.test.ssh.service.impl.EmployeeServiceImpl"> <property name="employeeDao" ref="employeeDao"/> </bean> <bean id="employeeDao" class="com.test.ssh.dao.impl.EmployeeDaoImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean>然后在数据库中添加一条数据
然后运行,在登陆界面输入“test”,"000000"即可跳转并且在控制台输出一大堆Sql 语句。
- IDEA 下写出第一个 SSH 整合框架练手项目(二,整合SSH及登陆页面的完成)
- IDEA 下写出第一个 SSH 整合框架练手项目(四,部门和员工的增删改查完成)
- IDEA 下写出第一个 SSH 整合框架练手项目( 一 ,Spring 与 Hibernate 整合)
- IDEA 下写出第一个 SSH 整合框架练手项目(三.部门和员工的分页查询)
- SSH框架的第一个整合例子
- SSH框架的第一个整合例子
- 第一个手动完成SSH整合-- 一
- SSH(二)框架整合
- SSH(二):框架整合
- SSH项目--国税(框架整合二)
- ssh整合第一个异常
- SSH框架的整合
- ssh框架的整合
- SSH框架的整合
- SSH框架的整合
- SSH框架的整合
- SSH框架的整合
- SSH框架的整合
- define与inline区别
- JSON中的{}与[]
- Static基本用法总结
- 改名字就找我咯
- 《UNIX环境高级编程》笔记--sigsuspend函数
- IDEA 下写出第一个 SSH 整合框架练手项目(二,整合SSH及登陆页面的完成)
- Android studio 3.0 引起的自定义打包文件名 outputFile sync failed
- OpenCV-边缘检测和图像金字塔
- itoa的实现
- 爬取当当网图书信息
- Qt如何弄出tab竖着写。
- 奔驰最新款车型插入OBDII接口后出现服务首先问题
- LoadRunner常用函数
- 让Vim打造成强大的IDE,附_vimrc的配置和使用