Struts2结合Ajax实现登录

前言:Struts2作为一款优秀的MVC框架,和Ajax结合在一起,用户就会有良好的体验,本篇博文我们来模拟一个简单的登录操作,实现Ajax的异步请求,其中Struts2进行的是链接处理,Action动态处理请求,Ajax负责进行异步处理,传送数据与返回数据,其中主要使用的技术有:struts2+Ajax+Jquery+Css,好吧,废话不多说,让我们来看看这个实例吧。

第一步:新建一个Dynamic web project,然后起名:Struts2Ajax,引入相关的jar包,在web.xml文件中配置struts2的filter.我们都知道新的请求首先进入的.xml文件,所以配置上过滤器,这样请求就会自动进入交给struts2处理了。

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Struts2Ajax</display-name>
	<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>
</web-app>

  

第二步:我们来配置Struts2的配置文件,其中主要是配置Action,也就是请求过来交给谁进行处理,注意这里的result Type="stream"是io中流的方式,它输出的是二进制数据,我们的contentType是html文件,它最终会返回页面以html的形式出现在页面下角

<?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>
	<package name="StrutsAjax" extends="struts-default">
		<action name="login"  class="com.wyq.Action.LogAction">
			<result type="stream" name="success">
			<param name="cotentType">text/html</param>
			<param name="inputName">result</param>
			</result>
		</action>
	</package>
</struts>

  第三步:我们新建一个包,起名com.wyq.Action,主要是来存放请求的Action。新建类,LoginACtion,代码如下:

package com.wyq.Action;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import com.opensymphony.xwork2.Action;

public class LogAction implements Action{

	private String user;

	private String pass;

	private InputStream inputStream;

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	public InputStream getResult() {
		return inputStream;
	}

	@Override
	public String execute() throws Exception {

		String sus="恭喜你,登录成功!";

		String fail="对不起,用户名和密码不匹配";

		inputStream=user.equals("wangyongqiang")&&pass.equals("123")?new ByteArrayInputStream(sus.getBytes("UTF-8")):new ByteArrayInputStream(fail.getBytes("UTF-8"));

		return SUCCESS;
	}

}

  第四步:我们来编写请求的页面,loginForm.jsp,其中要引入Jquery框架,使用到css,这里为了方便起见,我采用的方式是引入一个互联网中的jquery资源,然后借助于Jquery的Ajax,实现异步请求

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>使用stream结果实现Ajax</title>
	<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"
	  type="text/javascript">
	</script>
</head>
<body>
<s:form id="loginForm">
	<s:textfield name="user" label="用户名"/>
	<s:textfield name="pass" label="密码"/>
	<tr><td colspan="2">
	<input id="loginBn" type="button" value="提交"/>
	</td></tr>
</s:form>

<div id="show" style="display:none;">
</div>
<script type="text/javascript">
	// 为id为loginBn的按钮绑定事件处理函数
	$("#loginBn").click(function()
	{
		$("#show").hide();
		// 指定向login发送请求,以id为loginForm表单里各表单控件作为请求参数
		$.get("login" , $("#loginForm").serializeArray() ,
			// 指定回调函数
			function(data , statusText)
			{
				$("#show").height(30)
					.width(400)
					.css("border" , "1px solid black")
					.css("border-radius" , "10px")
					.css("background-color" , "#efef99")
					.css("color" , "#ff0000")
					.css("padding" , "20px")
					.empty();
				$("#show").append("登录结果:" + data + "<br />");
				$("#show").show(2000);
			},
			// 指定服务器响应为html
			"html");
	});
</script>
</body>
</html>

  第五步:编译,然后放在weblogic中部署,接下来就可以运行了。在浏览器窗口,输入:http://localhost:7001/Struts2Ajax/loginForm.jsp,我们就可以看到一个登陆框。

然后,按照我们的写法,先来输入一个错误的用户名和密码,我们看看会发生什么情况。

再按照Action中设置的账号和密码,我们来看看会返回什么结果;

总结:这就是一个完整的Struts2和Ajax结合的实例,虽然很简单,但是也可以学到很多知识,比如Struts2支持的返回类型为Stream,这是一种流的方式,就可以进行数据输出,从而结合与jquery,就可以实现异步请求,以下是基本原理图:

时间: 2024-11-06 22:05:48

Struts2结合Ajax实现登录的相关文章

struts2结合ajax实现无刷新登录

1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!-- 必须加入struts2-dojo-plugin-相应版本.jar 才能使用ajax--> <%@taglib prefix=&qu

struts2学习笔记(8)-------struts2的ajax支持

struts2支持一种stream类型的Result,这种类型的Result可以直接向客户端浏览器响应二进制,文本等, 我们可以再action里面生成文本响应,然后在客户端页面动态加载该响应即可. 直接看例子: public class LoginAction { private String user; private String pass; private InputStream inputStream; public InputStream getInput(){ return inpu

用户管理的设计--4.jquery的ajax实现登录名的校验

页面效果 鼠标失去焦点时,不需要刷新页面进行校验,判断登录名是否重复. 实现步骤 1.引入struts2-json-plugin-2.5.10.1插件包 2.页面使用jquery的ajax实现后台校验js /**校验登录名是否出现重复*/ function checkUser(o){ //alert(o.value);//dom的写法 //alert($(o).val());//jquery的写法 var logonName = $(o).val(); //以登录名作为查询条件,查询该登录名是否

Struts2对AJAX的支持

一.简介        struts2确实一个非常棒的MVC框架.这里部分记述一下struts2对AJAX的支持.实现AJAX有两种方式,一种是使用原生的javascript代码实现,一种是使用第三方的ajax框架(jquery,dwr,dojo等),jquery和dwr比较简单,做项目时也会经常用到.Struts2并没有发明新的AJAX框架,而是使用两个较为流行的框架,即Dojo框架和DWR框架. Dojo是一个用javascript语言实现的开源DHTML工具包,是一个客户端的AJaX框架,

$.ajax()验证登录

小提醒,在jquery的ajax函数中,可以传入3种类型的数据 1.文本:"uname=alice&mobileIpt=110&birthday=1983-05-12" 2.json对象:{uanme:'vic',mobileIpt:'110',birthday:'2013-11-11'} 3.json数组: [ {"name":"uname","value":"alice"}, {&quo

博客:Struts2与ajax整合之缺点

之前有篇博客介绍了Struts2与ajax的整合,链接Struts2之-集成Json插件实现Ajax 这里不再累述,看以上博客. 此篇博客想吐槽一下Struts2的缺点--错误处理做的不好,怎么做的不好,哪里做的不好,通过Struts2中Ajax的应用缺陷来介绍. 先提出它的缺点,后面再做出证明. 1,Struts2与Ajax整合的缺点 无论采用$.post还是$.ajax都捕获不到服务器产生的错误($.ajax捕获错误在servlet能做到),是struts2内部设计的不好,不是Ajax的问题

[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录

写在前面 今天回来的比较早,就趁着有空,把登录的代码更新一下.上篇文章实现了ajax的注册,这篇将实现登录,实现目标,ajax登录方式,如果勾选记住我,则下次不再输入用户名密码,直接跳转到网盘界面. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql

ajax基础语法、ajax做登录、ajax做用户名验证是否可用、ajax做关键字查询动态显示、ajax做用表格显示数据并增加操作列

AJAX: AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 如果此页面用到了ajax方法,一定要在页面上端加上: <script src="../../jquery-1.11.2.min.js"></script> ajax基础语法: <script type="text/javascript">

11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处理页面的,处理页面只是操作数据库并且返回值,页面都是ajax处理的. ajax的写法: test.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR