---------------使用Ajax实现登录-------
---------------使用Ajax实现登录-------
目录在最后
1:导入Json相关包 2jsp实现登录框
3写js方法使用Jquery+Json实现Ajax提交数据
4创建action ,service,编写相应登录方法; 5配置struts.xml
6验证登录效果 7实现退出 8验证退出效果;
Jsp页面:包含jquey+ajax
<%@ page contentType="text/html; charset=UTF-8"%>
<!-- 使用Struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags" %>
<!-- 保证路径的正确性 -->
<%
String path = request.getContextPath();
%>
<!-- 引用Jquery,版本1.8.2 -->
<script type="text/javascript" src="<%=path%>/js/jquery-1.8.2.js"></script>
<script type="text/javascript">
//登录
function doLogin(type) {//type可写可不写(--最好写)
var name = $('#loginName').attr('value');//获得输入用户用 语法$(#id)attr(name|properties|key,value|fn);注意类型
var pw = $('#loginPassword').attr('value');//获得输入密码
var url = 'login.action?user.username='+name+'&user.password='+pw; //传值多个用&分隔
if (name != null && name!='' && pw != null && pw!='') {
$.ajax({
url: url,
type:"post",
dataType: "json",
async: false,
beforeSend: function(data) {
$("#loginButton").attr("disabled", true);//发送前隐藏(点击登录无效)
},
success: function(data) {
if(data.user!=null){//当信息不为空时将信息返回给页面
$("#msg").html(" <br>");
var html = "欢迎 "+data.user.username+" <label class='ui-green'><input type='button' name='search' value='退 出' οnclick='document.location=\"logout.action\"'/></label>";
$("#topLoginDiv").html(html);
}else{
$("#msg").html(data.msg);
$("#msg").css("color","red");//设置错误信息颜色(红色)
}
$("#loginButton").attr("disabled", false);//隐藏取消(点击登录有效)
}
});
}else{
alert("请输入用户名或密码!");
}
}
</script>
<div id="header" class="wrap">
<div id="logo"><img src="<%=path%>/img/logo.gif" /></div>
<div >
<div id="msg" align="center"> <br></div>
</div>
<div align="right">
<div id="topLoginDiv" style="display: inline">
用户名: <s:textfield name="user.name" id="loginName" required="true" size="15"/>
密 码: <s:password name="user.password" id="loginPassword" required="true"size="15"/>
<label class="ui-green">
<input type="button" name="loginButton" id="loginButton" value="登录" onclick="doLogin();" />
</label>
<label class="ui-green">
<input type='button' value='注册' />
</label>
</div>
<div style="display: inline">
<label class="ui-green">
<input type="button" name="search" value="发布信息" />
</label>
</div>
</div>
</div>
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- struts2 过滤所有Actionq请求-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <!-- 2.0以上版本 -->
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
-----Struts.xml----2.3可以改为2.1
<?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>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple"/>
<package name="house-json" extends="json-default">
<action name="login" class="com.pb.web.action.UserAction" method="login">
<result type="json"></result>
<result name="login" type="json"></result>
</action>
</package>
<package name="house-manage" extends="json-default">
<action name="logout" class="com.pb.web.action.UserAction" method="logout">
<result>/pages/manage.jsp</result>
</action>
</package>
</struts>
------package com.pb.util;
public abstract class Constant {
public static int PAGE_START = 0;// 默认起始页
public static int PAGE_COUNT = 3;// 默认每页记录数
public static String LOGIN_USER = "LOGIN_USER";// 登录用户
public static String UPLOAD_PATH = "/upload";// 默认上传文件目录
}
package com.pb.web.action;
-----------UserAction------------
//不要忘记set/get方法
package com.pb.web.action;
import java.util.Map;
import com.pb.base.action.BaseAction;
import com.pb.entity.HouseUser;
import com.pb.service.IUserService;
import com.pb.service.impl.UserServiceImpl;
import com.pb.util.Constant;
public class UserAction extends BaseAction {
private static final long serialVersionUID = 1L;
private IUserService service = new UserServiceImpl();
private HouseUser user;
private String msg;
/**
* 登录
* @return
*/
public String login(){
if(user!=null){
Map<String,Object> map = service.login(user);
user =(HouseUser)map.get("user");
if(user!=null){
session.put(Constant.LOGIN_USER,user);
msg = "true";
return SUCCESS;
}else{
msg = (String)map.get("msg");
}
}
return LOGIN;
}
/**
* 退出
清除session中user
返回原页面
* @return
*/
public String logout(){
session.remove(Constant.LOGIN_USER);
return SUCCESS;
}
public HouseUser getUser() {
return user;
}
public void setUser(HouseUser user) {
this.user = user;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
--------------serviceImpl中------
package com.pb.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.pb.dao.IUserDao;
import com.pb.dao.impl.UserDaoImpl;
import com.pb.entity.HouseUser;
import com.pb.service.IUserService;
public class UserServiceImpl implements IUserService {
private IUserDao dao = new UserDaoImpl();
@Override
public Map<String, Object> login(HouseUser user) {
Map<String, Object> map = new HashMap<String, Object>();
//
List list = dao.findByProperty("HouseUser","username",user.getUsername());
if(list !=null && list.size()>0){//用户名存在
HouseUser loginUser = (HouseUser)list.get(0);
if(user.getPassword()!=null
&& user.getPassword().trim().equals(loginUser.getPassword()))
{
map.put("user",loginUser);
}else{
//添加提示信息:用户名或密码不正确
map.put("msg","用户名或密码不正确");
}
}else{
//添加提示信息:用户名不存在
map.put("msg","用户名不存在");
}
return map;
}
}
------------从数据库获取数据----------------
package com.pb.base.dao.impl;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pb.base.dao.IBaseDao;
import com.pb.util.HibernateSessionFactory;
import com.pb.util.Page;
//应用泛型-----棍据类对象不同---操作不同的类
public class BaseDaoImpl<T> implements IBaseDao<T> {
private Log log = LogFactory.getLog(this.getClass());
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public BaseDaoImpl() {
/*getClass()--当前类(BaseDaoImpl)
* .getGenericSuperclass()) --得到当前类的父类
* getActualTypeArguments() --的参数T;<T>
* java.lang.reflect.ParameterizedType
* */
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public Session getSession() {
return HibernateSessionFactory.getSession();
}
public void closeSession(){
HibernateSessionFactory.closeSession();
}
/**
* 根据对象名和对象属性查询数据
* @param className --对应持久类---〉对象数据库表
* @param propertyName --属性
* @param value ----值
* @return 实体对象列表
*/
@SuppressWarnings("unchecked")
public List<T> findByProperty(String className,String propertyName, Object value) {
log.debug("finding "+className+" instance with property: " + propertyName + ", value: " + value);//调试信息
try {
String hql = "FROM "+className+" as o WHERE o."+propertyName+" = ?";
Query queryObject = getSession().createQuery(hql);
queryObject.setParameter(0, value);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
} finally{
closeSession();
}
}
}
--------------持久类和-----------
package com.pb.entity;
public class HouseUser implements java.io.Serializable {
private static final long serialVersionUID = -4357515988015534310L;
// Fields
private Integer id;
private String password;
private String telephone;
private String username;
private String isadmin;
private String realname;
// Constructors
/** default constructor */
public HouseUser() {
}
/** minimal constructor */
public HouseUser(Integer id) {
this.id = id;
}
/** full constructor */
public HouseUser(Integer id, String password, String telephone,
String username, String isadmin, String realname) {
this.id = id;
this.password = password;
this.telephone = telephone;
this.username = username;
this.isadmin = isadmin;
this.realname = realname;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelephone() {
return this.telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIsadmin() {
return this.isadmin;
}
public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
}
public String getRealname() {
return this.realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
}
--------配置文件----------
<?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">
<hibernate-mapping>
<class name="com.pb.entity.HouseUser" table="HOUSE_USER">
<id name="id" type="java.lang.Integer">
<column name="ID" precision="9" scale="0" />
<generator class="sequence" >
<param name="sequence">HOUSE_USER_ID</param>
</generator>
</id>
<property name="password" type="java.lang.String">
<column name="PASSWORD" length="50" />
</property>
<property name="telephone" type="java.lang.String">
<column name="TELEPHONE" length="15" />
</property>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="isadmin" type="java.lang.String">
<column name="ISADMIN" length="5" />
</property>
<property name="realname" type="java.lang.String">
<column name="REALNAME" length="50" />
</property>
</class>
</hibernate-mapping>
目录
使用Ajax实现登录--步骤-------------------------------1
执行流程图-----------------------------------------1
Jsp页面:包含jquey+ajax ---------------------------------------2
----------------------------------------------------3
web.xml-----------------------------------------------4
Struts.xml-----------------------------------------------5
Constant(定义所有常量的工具类)---------------------------------6
UserAction--------------------------------------------------6
登录和退出的方法-----------------------------------------7
serviceImpl------------------------------------------------8
数据库获取数据List<T> findByProperty
(String className,String propertyName, Object value)----------10
持久类-------HouseUser-----------------------11
(持久类名)HouseUser+hbm.xml------------------------13
xml
c
Jsp页面:包含jquey+ajax
<%@ page contentType="text/html; charset=UTF-8"%>
<!-- 使用Struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags" %>
<!-- 保证路径的正确性 -->
<%
String path = request.getContextPath();
%>
<!-- 引用Jquery,版本1.8.2 -->
<script type="text/javascript" src="<%=path%>/js/jquery-1.8.2.js"></script>
<script type="text/javascript">
//登录
function doLogin(type) {//type可写可不写(--最好写)
var name = $('#loginName').attr('value');//获得输入用户用 语法$(#id)attr(name|properties|key,value|fn);注意类型
var pw = $('#loginPassword').attr('value');//获得输入密码
var url = 'login.action?user.username='+name+'&user.password='+pw; //传值多个用&分隔
if (name != null && name!='' && pw != null && pw!='') {
$.ajax({
url: url,
type:"post",
dataType: "json",
async: false,
beforeSend: function(data) {
$("#loginButton").attr("disabled", true);//发送前隐藏(点击登录无效)
},
success: function(data) {
if(data.user!=null){//当信息不为空时将信息返回给页面
$("#msg").html(" <br>");
var html = "欢迎 "+data.user.username+" <label class='ui-green'><input type='button' name='search' value='退 出' οnclick='document.location=\"logout.action\"'/></label>";
$("#topLoginDiv").html(html);
}else{
$("#msg").html(data.msg);
$("#msg").css("color","red");//设置错误信息颜色(红色)
}
$("#loginButton").attr("disabled", false);//隐藏取消(点击登录有效)
}
});
}else{
alert("请输入用户名或密码!");
}
}
</script>
<div id="header" class="wrap">
<div id="logo"><img src="<%=path%>/img/logo.gif" /></div>
<div >
<div id="msg" align="center"> <br></div>
</div>
<div align="right">
<div id="topLoginDiv" style="display: inline">
用户名: <s:textfield name="user.name" id="loginName" required="true" size="15"/>
密 码: <s:password name="user.password" id="loginPassword" required="true"size="15"/>
<label class="ui-green">
<input type="button" name="loginButton" id="loginButton" value="登录" onclick="doLogin();" />
</label>
<label class="ui-green">
<input type='button' value='注册' />
</label>
</div>
<div style="display: inline">
<label class="ui-green">
<input type="button" name="search" value="发布信息" />
</label>
</div>
</div>
</div>
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- struts2 过滤所有Actionq请求-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <!-- 2.0以上版本 -->
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
-----Struts.xml----2.3可以改为2.1
<?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>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple"/>
<package name="house-json" extends="json-default">
<action name="login" class="com.pb.web.action.UserAction" method="login">
<result type="json"></result>
<result name="login" type="json"></result>
</action>
</package>
<package name="house-manage" extends="json-default">
<action name="logout" class="com.pb.web.action.UserAction" method="logout">
<result>/pages/manage.jsp</result>
</action>
</package>
</struts>
------package com.pb.util;
public abstract class Constant {
public static int PAGE_START = 0;// 默认起始页
public static int PAGE_COUNT = 3;// 默认每页记录数
public static String LOGIN_USER = "LOGIN_USER";// 登录用户
public static String UPLOAD_PATH = "/upload";// 默认上传文件目录
}
package com.pb.web.action;
-----------UserAction------------
//不要忘记set/get方法
package com.pb.web.action;
import java.util.Map;
import com.pb.base.action.BaseAction;
import com.pb.entity.HouseUser;
import com.pb.service.IUserService;
import com.pb.service.impl.UserServiceImpl;
import com.pb.util.Constant;
public class UserAction extends BaseAction {
private static final long serialVersionUID = 1L;
private IUserService service = new UserServiceImpl();
private HouseUser user;
private String msg;
/**
* 登录
* @return
*/
public String login(){
if(user!=null){
Map<String,Object> map = service.login(user);
user =(HouseUser)map.get("user");
if(user!=null){
session.put(Constant.LOGIN_USER,user);
msg = "true";
return SUCCESS;
}else{
msg = (String)map.get("msg");
}
}
return LOGIN;
}
/**
* 退出
清除session中user
返回原页面
* @return
*/
public String logout(){
session.remove(Constant.LOGIN_USER);
return SUCCESS;
}
public HouseUser getUser() {
return user;
}
public void setUser(HouseUser user) {
this.user = user;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
--------------serviceImpl中------
package com.pb.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.pb.dao.IUserDao;
import com.pb.dao.impl.UserDaoImpl;
import com.pb.entity.HouseUser;
import com.pb.service.IUserService;
public class UserServiceImpl implements IUserService {
private IUserDao dao = new UserDaoImpl();
@Override
public Map<String, Object> login(HouseUser user) {
Map<String, Object> map = new HashMap<String, Object>();
//
List list = dao.findByProperty("HouseUser","username",user.getUsername());
if(list !=null && list.size()>0){//用户名存在
HouseUser loginUser = (HouseUser)list.get(0);
if(user.getPassword()!=null
&& user.getPassword().trim().equals(loginUser.getPassword()))
{
map.put("user",loginUser);
}else{
//添加提示信息:用户名或密码不正确
map.put("msg","用户名或密码不正确");
}
}else{
//添加提示信息:用户名不存在
map.put("msg","用户名不存在");
}
return map;
}
}
------------从数据库获取数据----------------
package com.pb.base.dao.impl;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pb.base.dao.IBaseDao;
import com.pb.util.HibernateSessionFactory;
import com.pb.util.Page;
//应用泛型-----棍据类对象不同---操作不同的类
public class BaseDaoImpl<T> implements IBaseDao<T> {
private Log log = LogFactory.getLog(this.getClass());
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public BaseDaoImpl() {
/*getClass()--当前类(BaseDaoImpl)
* .getGenericSuperclass()) --得到当前类的父类
* getActualTypeArguments() --的参数T;<T>
* java.lang.reflect.ParameterizedType
* */
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public Session getSession() {
return HibernateSessionFactory.getSession();
}
public void closeSession(){
HibernateSessionFactory.closeSession();
}
/**
* 根据对象名和对象属性查询数据
* @param className --对应持久类---〉对象数据库表
* @param propertyName --属性
* @param value ----值
* @return 实体对象列表
*/
@SuppressWarnings("unchecked")
public List<T> findByProperty(String className,String propertyName, Object value) {
log.debug("finding "+className+" instance with property: " + propertyName + ", value: " + value);//调试信息
try {
String hql = "FROM "+className+" as o WHERE o."+propertyName+" = ?";
Query queryObject = getSession().createQuery(hql);
queryObject.setParameter(0, value);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
} finally{
closeSession();
}
}
}
--------------持久类和-----------
package com.pb.entity;
public class HouseUser implements java.io.Serializable {
private static final long serialVersionUID = -4357515988015534310L;
// Fields
private Integer id;
private String password;
private String telephone;
private String username;
private String isadmin;
private String realname;
// Constructors
/** default constructor */
public HouseUser() {
}
/** minimal constructor */
public HouseUser(Integer id) {
this.id = id;
}
/** full constructor */
public HouseUser(Integer id, String password, String telephone,
String username, String isadmin, String realname) {
this.id = id;
this.password = password;
this.telephone = telephone;
this.username = username;
this.isadmin = isadmin;
this.realname = realname;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelephone() {
return this.telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIsadmin() {
return this.isadmin;
}
public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
}
public String getRealname() {
return this.realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
}
--------配置文件----------
<?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">
<hibernate-mapping>
<class name="com.pb.entity.HouseUser" table="HOUSE_USER">
<id name="id" type="java.lang.Integer">
<column name="ID" precision="9" scale="0" />
<generator class="sequence" >
<param name="sequence">HOUSE_USER_ID</param>
</generator>
</id>
<property name="password" type="java.lang.String">
<column name="PASSWORD" length="50" />
</property>
<property name="telephone" type="java.lang.String">
<column name="TELEPHONE" length="15" />
</property>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="50" />
</property>
<property name="isadmin" type="java.lang.String">
<column name="ISADMIN" length="5" />
</property>
<property name="realname" type="java.lang.String">
<column name="REALNAME" length="50" />
</property>
</class>
</hibernate-mapping>
目录
使用Ajax实现登录--步骤-------------------------------1
执行流程图-----------------------------------------1
Jsp页面:包含jquey+ajax ---------------------------------------2
----------------------------------------------------3
web.xml-----------------------------------------------4
Struts.xml-----------------------------------------------5
Constant(定义所有常量的工具类)---------------------------------6
UserAction--------------------------------------------------6
登录和退出的方法-----------------------------------------7
serviceImpl------------------------------------------------8
数据库获取数据List<T> findByProperty
(String className,String propertyName, Object value)----------10
持久类-------HouseUser-----------------------11
(持久类名)HouseUser+hbm.xml------------------------13