好久没有更新了,对不起自己,对不起自己这些日子消耗的馒头和米饭……
常告诉自己不要常立志,到最后发现这就是常立的那个志……
答应自己一定要学编程,那就风雨兼程吧……
-----------我是分割线------------
最近很想自己写一个完整的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
/WEB-INF/users/loginSuccess.jsp
/WEB-INF/users/loginErr.jsp
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
用户管理系统
【4】Struts2.x工作流程——结合用户登录案例说明
用户访问一个JSP页面(login.jsp),进行操作(填写username和password,然后点击登录)-->
tomcat识别需要把请求交给*.do的action(verify.do),识别出使用了struts框架,指导程序读取struts配置文件(struts.xml)-->
读取struts.xml,获取到其中的action配置(
找到需要执行的类,struts将原始JSP页面中的信息(username & password)自动赋值给执行类的相应变量(其中同名的username&password)中-->
执行类中的execute()方法,并返回String类型值("loginSuccess"或者loginFailure)-->
程序重新获取struts.xml中的对应action下的result配置(
完美!
【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的跳转文件路径配置,最好从根路径开始配置,如下:
我就是喜欢看你们不如我,还赶不上我的气急败坏!
什么?!你梭啥?!你TM来砍我啊……