Java编写Struts2案例--【用户登录】
来源:互联网 发布:欢乐牛牛源码 编辑:程序博客网 时间:2024/06/10 04:06
好久没有更新了,对不起自己,对不起自己这些日子消耗的馒头和米饭……
常告诉自己不要常立志,到最后发现这就是常立的那个志……
答应自己一定要学编程,那就风雨兼程吧……
-----------我是分割线------------
最近很想自己写一个完整的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来砍我啊……
- Java编写Struts2案例--【用户登录】
- Struts2+hibernate实现用户登录和增删改查案例
- Struts2+hibernate实现用户登录和增删改查案例
- Struts2+hibernate实现用户登录和增删改查案例
- java之Struts2实现用户登录过滤
- 用户注册登录案例
- 用户登录注册案例
- Session案例 用户登录
- struts2框架实现登录案例
- 在maven环境下 基于Struts2 spring hibernate用户登录及查询整合案例
- SSH框架---Struts2+hibernate实现用户登录和增删改查案例
- Struts2自定义拦截器案例:验证用户是否登录拦截器
- 用户登录注册案例分析
- PHP案例实现用户登录
- structs2入门 用户登录案例
- 用户自动登录案例分析
- 用户注册和登录案例
- 用户登录注册案例分析
- pat advanced 1107
- python decorator
- WebX实践指南_WebX RPC(四)
- 使用SharedPreferences存储数据
- shell 命令之 find命令二
- Java编写Struts2案例--【用户登录】
- 聚类算法(二):DBSCAN算法
- Xcode乱套了怎么恢复默认设置?
- thinkphp3.2 验证码生成和点击刷新验证码示例
- 依赖倒置、控制反转和依赖注入辨析
- 谈谈业务逻辑中灰度功能的实现
- fedora21客户端登录centos7服务器创建ssh无密码
- mysql_jdbc连接说明
- Pascal教程