Java编写Struts2案例--【用户登录】

好久没有更新了,对不起自己,对不起自己这些日子消耗的馒头和米饭……

常告诉自己不要常立志,到最后发现这就是常立的那个志……

答应自己一定要学编程,那就风雨兼程吧……


-----------我是分割线------------

最近很想自己写一个完整的Java Web项目,但是不使用框架特别复杂麻烦加困难,遂决定开始学习框架了,当然是最经典的ssh了。

先拿一个struts2.x来试一下,以下正文,纯粹个人笔记,如有雷同,你TM来砍我啊……


【1】项目目录截图

先贴一张项目目录截图,然后大致说明一下其中的关系,有一个简单的认识。



项目全部支撑分为四个部分:

a.src代码,分了三个简单的包:light.action / light.dao / light.entity ,分别存放action,service层和实体层;详细代码和调用流程见下面详解;

b.struts.xml和struts.properties配置文件;具体配置见下面详解;

c.WEB-INF下的JSP页面;不废话了;

d.在截图中未能体现的library,也就是Struts2.1 Libraries ;通过Eclipse的IDE可以直接导入,或者自己到网上下载一下然后手工导入也行;如果这个看不明白?——再见!


【2】Struts2.x工作流程——纯理论(下面贴完代码和配置之后还会有结合案例的说明)

用户访问一个JSP页面,进行操作(提交表单或者有条件请求等等)-->

tomcat识别需要把请求交给*.do的action,识别出使用了struts框架,指导程序读取struts配置文件-->

读取struts.xml,获取到其中的action配置,其中指明了需要调用哪个类-->

找到需要执行的类,struts将原始JSP页面中的信息自动赋值给执行类的相应变量中-->

执行类中的execute()方法,并返回String类型值-->

程序重新获取struts.xml中的对应action下的result配置,根据execute()方法返回的String值和配置匹配,执行相应的跳转或者其他操作


上述是一个理论上的struts2的一次请求的处理过程,先看看,有点迷糊不要禁,往下接着看……


【3】详细代码和配置

a.先贴一下配置内容

--struts.xml

<?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>

	<!-- 在此配置打开development模式,在报错时页面上会显示Java错误 --> 
	<constant name="struts.devMode" value="true"></constant>
	<constant name="struts.i18n.encoding" value="utf-8"></constant>
	
	<package name="normalUser" extends="struts-default">
		<action name="verify" class="light.action.LoginAction">
			<result name="loginSuccess">/WEB-INF/users/loginSuccess.jsp</result>
			<result name="loginFailure">/WEB-INF/users/loginErr.jsp</result>
		</action>
	</package>

</struts>    

b.User.java

package light.entity;

import java.util.Date;

/*
 * 描述:登录用户类,会有employee和administrator子类
 */

public class User {

	private int userId;
	private String name;
	private String password;
	private Date createDate;
	private Date modifyDate;
	private String isAdmin;
	
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	public String getIsAdmin() {
		return isAdmin;
	}
	public void setIsAdmin(String isAdmin) {
		this.isAdmin = isAdmin;
	}
	//构造函数
	public User(String name, String password)
	{
		this.name = name ;
		this.password = password;
	}
	
}



c.UserDao.java

package light.dao;

import light.entity.User;

/*
 * 描述:登录用户的操作类
 */
public class UserDao {
	
	//用户登录查询
	public boolean loginCheck(User u)
	{
		if(u.getName().equals("admin") && u.getPassword().equals("123")){
			return true ;
		}else{
			return false ;
		}
	}

}



d.LoginAction.java

package light.action;

import light.dao.UserDao;
import light.entity.User;

/*
 * Author:Light
 * For:Actions definition
 * Date:2015-12-05
 */

public class LoginAction {
	
	private String username;
	private String password;
	
	
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}



	/*接受JSP信息并决定如何进行下去*/
	public String execute(){
		
		User u = new User(this.getUsername(),this.getPassword());
		UserDao userDao= new UserDao();
		
		//String msg = "";
		
		if(userDao.loginCheck(u))
		{
			//msg = "loginSuccess";
			//System.out.println(msg);
			return "loginSuccess";
		}else{
			//msg = "loginFailure";
			//System.out.println(msg);
			return "loginFailure";
		}
		
		
	}
}


e.login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My web starting page:login.jsp</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  

  
  <body>
  
    <center>
    	<hr><h2>用户管理系统</h2>
    	<form name = "loginForm" action="verify.do" method = "post">
    		UserName: <input type = "text" name = "username"><br>
    		PassWord: <input type = "password" name = "password"><br>
    		<input type = "submit" value = "Login">
    		<input type = "reset" value = "Reset">    		
    	</form>
  	</center>
    
  </body>
</html>


【4】Struts2.x工作流程——结合用户登录案例说明

用户访问一个JSP页面(login.jsp),进行操作(填写username和password,然后点击登录)-->

tomcat识别需要把请求交给*.do的action(verify.do),识别出使用了struts框架,指导程序读取struts配置文件(struts.xml)-->

读取struts.xml,获取到其中的action配置(<action name="verify" class="light.action.LoginAction">),其中指明了需要调用哪个类(LoginAction)-->

找到需要执行的类,struts将原始JSP页面中的信息(username & password)自动赋值给执行类的相应变量(其中同名的username&password)中-->

执行类中的execute()方法,并返回String类型值("loginSuccess"或者loginFailure)-->

程序重新获取struts.xml中的对应action下的result配置(<result name="loginSuccess">/WEB-INF/users/loginSuccess.jsp</result>
<result name="loginFailure">/WEB-INF/users/loginErr.jsp</result>),根据execute()方法返回的String值和配置匹配,执行相应的跳转(/WEB-INF/users/loginSuccess.jsp或者/WEB-INF/users/loginErr.jsp)


完美!


【5】调试过程中个人遇到的问题,共勉

a.在web.xml中配置welcome-file-list,如果配置的jsp文件不存在,那会报错;

b.在struts.xml中,配置packages中的extends : struts-default.xml,配置时".xml"不要写,只写文件名即可,不然启动时也会报文件找不到;

c.访问错误: Messages:No result defined for action light.action.LoginAction and result loginSuccess 

  调试了好几个小时,上网搜了一下,也没发现其他可疑之处,但是绝处逢生的是:有人说把login.action换个名字试试,于是我就改成了verify.action,你猜怎么着?还真就TMD好了。彼时彼刻,我的心情是崩溃的,然后想起来有一种心情叫日了吉娃娃……

d.struts.xml中result的跳转文件路径配置,最好从根路径开始配置,如下:
  <result name="loginSuccess">/WEB-INF/users/loginSuccess.jsp</result>


我就是喜欢看你们不如我,还赶不上我的气急败坏!

什么?!你梭啥?!你TM来砍我啊……



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值