1 login.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/frameset.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<STYLE type=text/css>
BODY {
FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: 宋体
}
TD {
FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: 宋体
}
</STYLE> <META content="MSHTML 6.00.6000.16809" name=GENERATOR></HEAD>
<BODY>
<FORM id=form1 name=form1 action="${pageContext.request.contextPath }/UserAction_login" method=post> <DIV id=UpdatePanel1>
<DIV id=div1
style="LEFT: 0px; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #0066ff"></DIV>
<DIV id=div2
style="LEFT: 0px; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #0066ff"></DIV> <DIV>&nbsp;&nbsp; </DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=0 width=900 align=center border=0>
<TBODY>
<TR>
<TD style="HEIGHT: 105px"><IMG src="data:images/login_1.gif"
border=0></TD></TR>
<TR>
<TD background=images/login_2.jpg height=300>
<TABLE height=300 cellPadding=0 width=900 border=0>
<TBODY>
<TR>
<TD colSpan=2 height=35></TD></TR>
<TR>
<TD width=360></TD>
<TD>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD style="HEIGHT: 28px" width=80>登 录 名:</TD>
<TD style="HEIGHT: 28px" width=150><INPUT id=txtName
style="WIDTH: 130px" name="user_code"></TD>
<TD style="HEIGHT: 28px" width=370><SPAN
id=RequiredFieldValidator3
style="FONT-WEIGHT: bold; VISIBILITY: hidden; COLOR: white">请输入登录名</SPAN></TD></TR>
<TR>
<TD style="HEIGHT: 28px">登录密码:</TD>
<TD style="HEIGHT: 28px"><INPUT id=txtPwd style="WIDTH: 130px"
type=password name="user_password"></TD>
<TD style="HEIGHT: 28px"><SPAN id=RequiredFieldValidator4
style="FONT-WEIGHT: bold; VISIBILITY: hidden; COLOR: white">请输入密码</SPAN></TD></TR>
<TR>
<TD style="HEIGHT: 28px">验证码:</TD>
<TD style="HEIGHT: 28px"><INPUT id=txtcode
style="WIDTH: 130px" name=txtcode></TD>
<TD style="HEIGHT: 28px">&nbsp;</TD></TR>
<TR>
<TD style="HEIGHT: 18px"></TD>
<TD style="HEIGHT: 18px"><span style="color:red"><s:property value="exception.message"/></span></TD>
<TD style="HEIGHT: 18px"></TD></TR>
<TR>
<TD></TD>
<TD><INPUT id=btn
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
type=image src="data:images/login_button.gif" name=btn>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD><IMG src="data:images/login_3.jpg"
border=0></TD></TR></TBODY></TABLE></DIV></DIV>
</FORM>
<s:debug></s:debug>
</BODY></HTML>

2 UserAction

package www.test.web.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; import www.test.domain.User;
import www.test.service.UserService;
import www.test.service.impl.UserServiceImpl; public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
private UserService us = new UserServiceImpl();
public String login() throws Exception {
//1 调用Service 执行登陆操作
User u = us.login(user);
//2 将返回的User对象放入session域作为登陆标识
ActionContext.getContext().getSession().put("user", u);
//3 重定向到项目的首页
return "toHome";
}
@Override
public User getModel() {
return user;
}
}

3 UserServiceImpl

package www.test.service.impl;

import www.test.dao.UserDao;
import www.test.dao.impl.UserDaoImpl;
import www.test.domain.User;
import www.test.service.UserService;
import www.test.utils.HibernateUtils; public class UserServiceImpl implements UserService {
private UserDao ud = new UserDaoImpl();
@Override
public User login(User user) {
//打开事务
HibernateUtils.getCurrentSession().beginTransaction();
//1.调用Dao根据登陆名称查询User对象
User existU = ud .getByUserCode(user.getUser_code());
//提交事务
HibernateUtils.getCurrentSession().getTransaction().commit(); if(existU==null){
//获得不到=>抛出异常提示用户名不存在
throw new RuntimeException("用户名不存在!");
}
//2 比对密码是否一致
if(!existU.getUser_password().equals(user.getUser_password())){
//不一致=>抛出异常提示密码错误
throw new RuntimeException("密码错误!");
}
//3 将数据库查询的User返回
return existU;
}
}

4 UserDaoImpl

package www.test.dao.impl;

import org.hibernate.Query;
import org.hibernate.Session; import www.test.dao.UserDao;
import www.test.domain.User;
import www.test.utils.HibernateUtils; public class UserDaoImpl implements UserDao { @Override
public User getByUserCode(String user_code) {
//HQL查询
//1.获得Session
Session session = HibernateUtils.getCurrentSession();
//2 书写HQL
String hql = "from User where user_code = ? ";
//3 创建查询对象
Query query = session.createQuery(hql);
//4 设置参数
query.setParameter(0, user_code);
//5 执行查询
User u = (User) query.uniqueResult();
return u;
} }

5 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>
<!-- 指定struts2是否以开发模式运行
1.热加载主配置.(不需要重启即可生效)
2.提供更多错误信息输出,方便开发时的调试
-->
<constant name="struts.devMode" value="true"></constant>
<package name="crm" namespace="/" extends="struts-default" >
<global-exception-mappings>
<!-- 如果出现名为java.lang.RuntimeException的异常,就跳转到名为error的结果 -->
<exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
<action name="CustomerAction_*" class="www.test.web.action.CustomerAction" method="{1}" >
<result name="list" >/jsp/customer/list.jsp</result>
<result name="toList" type="redirectAction">
<param name="actionName">CustomerAction_list</param>
<param name="namespace">/</param>
</result>
</action>
<action name="UserAction_*" class="www.test.web.action.UserAction" method="{1}" >
<result name="toHome" type="redirect">/index.htm</result>
<result name="error" type="dispatcher">/login.jsp</result>
</action>
</package>
</struts>

案例46-crm练习客户登录的更多相关文章

  1. 项目一:第九天 1、前台客户登录 2、Jquery citypicker省市区三级联动插件 4、业务受理(在线下单)

    1. 前台客户登录 2. Jquery citypicker省市区三级联动插件 3. 百度地图介绍 4. 业务受理(在线下单) 1 实现前台系统登录功能 1.1 Md5加密 admin(明文)---- ...

  2. 案例49-crm练习获取客户列表带有分页和筛选功能

    1 案例分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao   注意清空之前设置的聚合函数  dc.setProjection(null); 5 ...

  3. CRM(客户关系管理)

    CRM最初是由Gartner Group提出的. CRM定义:"客户关系管理(CRM),是代表增进赢利.收入和客户满意度而设计的,企业范围的商业战略." 我们可以看出,Gartne ...

  4. 如何通过CRM评估客户价值和提高客户忠诚度?

    随着市场经济的日益繁荣,同行业之间企业的竞争越来越激烈,企业纷纷各出奇招吸引和挖掘客户,力求让自己的品牌成为更多客户的第一选择.那么,我们可以用什么方法来评估客户价值,提高客户忠诚度呢? 在互联网时代 ...

  5. 苏泊尔借助微软CRM提升客户满意度

    企业背景 作为中国最大.全球第二的炊具研发制造商和中国小家电领先品牌,品质和创新一是苏泊尔矢志追求的企业理念,从火红点无油烟锅的发明到能做柴火饭的球釜IH饭煲的面世,苏泊尔用产品的创新和品质的承诺,不 ...

  6. day 72 crm(9) 客户关系系统,整体实现,以及自定制路由内容,客户关系梳理

    前情提要: crm(9)  ,利用stark 组件和,rbac组键的使用,   明确观点: 一:客户关系需求明确 1:客户关系系统,主要是,本业务逻辑主要是 销售就客户关系的业务逻辑, 二: 创建ap ...

  7. 案例44-crm练习新增客户使用struts2

    1 src下配置文件 1 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...

  8. 案例51-crm练习新增客户使用数据字典和ajax

    1 案例效果 2 使用ajax加载数据字典下拉选-后台部分 1 domain部分-BaseDict package www.test.domain; public class BaseDict { / ...

  9. HttpClient 应用案例揭破应用Discuss论坛登录

    闲来无事,写了一个对discuss论坛登录的案例,初次上场按照以前的惯例没成功,见过抓包分析discuss论坛成功完成,废话不多说 直接上代码. 1:winform 做客户端,添加HttpClient ...

随机推荐

  1. jQuery拾忆

    用jQuery操作select元素 http://www.jb51.net/article/23648.htm 表单中如果用disabled属性,则提交时不会提交该数据,尽量使用readonly属性 ...

  2. C#验证身份证号码正确性

    18位号码: private static bool CheckIDCard18(string Id) { ; ), , ) || '), out n) == false) { return fals ...

  3. OC自定义文档头部注释

    1.创建文件 IDETemplateMacros.plist 2.向文件里添加内容 具体内容 // 文 件 名:___FILENAME___ // // 版权所有:___COPYRIGHT___ // ...

  4. List_Delete

    /*Sorting from little to large use List*/ #include <stdio.h> /* printf, scanf, NULL */ #includ ...

  5. postgresql中的各种scan的比较

    最近在看postgresql的查询计划,在查询中对表的扫描计划大概有如下几种: Seq Scan Index Scan Bitmap Heap Scan Index Only Scan 这里就把自己的 ...

  6. Effective Java 3rd.Edition 翻译

    推荐序 前言 致谢 第一章 引言 第二章 创建和销毁对象 第1项:用静态工厂方法代替构造器 第2项:遇到多个构造器参数时要考虑使用构建器 第3项:用私有构造器或者枚举类型强化Singleton属性 第 ...

  7. 蓝牙4.0BLE抓包(二) – 广播包解析

    版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 在使用EN-Dongle捕获和解析广播包之前,我们先了解一下BLE报文的结构,之后,再对捕获的广播 ...

  8. @ApiParam @PathVariable @RequestParam三者区别

    转载:https://www.cnblogs.com/xu-lei/p/7803062.html @ApiParam @PathVariable @RequestParam三者区别 1.@ApiPar ...

  9. FPGA基础学习(5) -- 时序约束(实践篇)

    目录 1. 理论回顾 2. 时间裕量 3. 最大延迟和最小延迟 4. 案例分析 参考文献: 距离上一篇有关时序的理论篇已经有一段时间了(可以参考博文FPGA时序约束--理论篇),实际上此段时间,甚至到 ...

  10. C# 函数参数object sender, EventArgs e

    object sender:表示触发事件的控件对象EventArgs e:表示事件数据的类的基类 Windows程序有一个事件机制.用于处理用户事件. 在WinForm中我们经常需要给控件添加事件.例 ...