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

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

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

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


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

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

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


【1】项目目录截图

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

Java编写Struts2案例--【用户登录】_第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





	 
	
	
	
	
		
			/WEB-INF/users/loginSuccess.jsp
			/WEB-INF/users/loginErr.jsp
		
	

    

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+"/";
%>



  
    
    
    My web starting page:login.jsp
	
	
	    
	
	
	
  
  

  
  
  
    

用户管理系统

UserName:
PassWord:


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

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

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

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

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

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

程序重新获取struts.xml中的对应action下的result配置(/WEB-INF/users/loginSuccess.jsp
/WEB-INF/users/loginErr.jsp),根据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的跳转文件路径配置,最好从根路径开始配置,如下:
  /WEB-INF/users/loginSuccess.jsp


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

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



你可能感兴趣的:(Java)