从上篇博客能够看到,事实上Struts1框架就是封装了一些页面的转向、数据类型的转换,去除冗余的if else推断。除了这些,事实上还封装了一些我们寻经常使用的JSTL标签库,文件上传等等。

以下看怎样运用Strut是实现登陆和加入用户实例。

项目文件夹结构:

Login.jsp。登录页面

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
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 JSP 'MyJsp.jsp' starting page</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">
</head> <body>
<form action="Login.do? command=Login" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="password" name="password"></br>
<input type="submit" value="登录">
</form>
</body>
</html>

user_input.jsp 加入页面

<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>加入用户</title>
<link rel="stylesheet" href="../style/drp.css">
<script type="text/javascript"> function addUser() {
with (document.getElementById("userForm")) {
method = "post";
action = "Login.do?command=Add";
submit();
}
}
</script>
</head>
<body class="body1">
<form name="userForm" target="_self" id="userForm">
<div align="center">
<table width="95%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="22%" height="29">
<div align="right">用户代码: </div>
</td>
<td width="78%">
<input name="userId" type="text" class="text1" id="userId"
size="10" maxlength="10">
</td>
</tr>
<tr>
<td height="26">
<div align="right">用户名称: </div>
</td>
<td>
<input name="username" type="text" class="text1" id="userName"
size="20" maxlength="20">
</td>
</tr>
<tr>
<td height="26">
<div align="right">密码: </div>
</td>
<td>
<input name="password" type="password" class="text1"
id="password" size="20" maxlength="20">
</td>
</tr>
<tr>
<td height="26">
<div align="right">联系电话: </div>
</td>
<td>
<input name="contactTel" type="text" class="text1"
id="contactTel" size="20" maxlength="20">
</td>
</tr>
<tr>
<td height="26">
<div align="right">email: </div>
</td>
<td>
<input name="email" type="text" class="text1" id="email"
size="20" maxlength="20">
</td>
</tr>
</table>
<div align="center">
<input name="btnAdd" class="button1" type="button" id="btnAdd"
value="加入" onClick="addUser()">
</div>
</div>
</form>
</body>
</html>

struts-config.xml:

配置ActionForm, ActionBean,异常的转向,国际化资源文件的位置,插件(便于和Spring集成)等

<?

xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginactionform" type="userloginpackage.loginactionform"></form-bean>
</form-beans>
<action-mappings>
<action path="/Login"
type="userloginpackage.loginaction"
name="loginactionform"
scope="request"
parameter="command"
>
<forward name="success" path="/Addsuccess.jsp"></forward>
<forward name="error" path="/loginerror.jsp"></forward>
<forward name="LoginToAdd" path="/user_input.jsp"></forward>
</action>
</action-mappings>
</struts-config>

UserManager类:

与数据库打交道,实现增删改查操作。

package userloginpackage;
public class UserManager {
public User Login(User user){
return user;
}
public String Add(User user ) {
return ("UserManager.Add");
}
}

LoginAction类:

运行详细业务操作。接收ActionForm对象。接收表单属性參数。一个Action相当于Servlet,从ActionForm中取得相关用户输入參数后,保存在request范围中,使用ActionMappting中的findForward方法进行跳转。

package userloginpackage;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction; public class loginaction extends DispatchAction { public ActionForward Login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
loginactionform fo=(loginactionform)form;
UserManager userManager=new UserManager();
User user=new User();
user.setUserName(fo.getUsername());
user.setPassword(fo.getPassword());
User Flag=userManager.Login(user);
if(fo.getUsername().equals(Flag.getUserName()) && fo.getPassword().equals(Flag.getPassword())){
return mapping.findForward("LoginToAdd");
}else{
return mapping.findForward("error");
}
} public ActionForward Add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
loginactionform fo=(loginactionform)form;
String flag="";
UserManager userManager=new UserManager();
User user=new User();
loginactionform laf=(loginactionform)form;
BeanUtils.copyProperties(user, laf);
flag=userManager.Add(user);
if("UserManager.Add".equals(flag)){
return mapping.findForward("success");
}else{
return mapping.findForward("error");
}
} }

loginactionform类:

封装属性參数与表单中的參数一致,提供getter、setter方法,进行业务验证等。

package userloginpackage;

import org.apache.struts.action.ActionForm;

public class loginactionform extends ActionForm {
private String username;
private String password;
private Integer userId;
private String contactTel;
private String email; public String getUsername() {
return username;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getContactTel() {
return contactTel;
}
public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

web.xml:

程序启动首先读取的xml,是web程序入口,定义struts-config.xml。

<?

xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

另外再加一个User实体类。这样,就完毕了一个利用Struts框架,完毕了功能实现。

尽管如此。Struts框架与原始MVC模式有什么差别,Struts框架下,整个执行过程又是怎样的。我们应该怎样理解Struts的实现理念,看下一篇博客吧。。。

。。

【SSH之旅】一步步学习Struts1框架(二):Struts实例的更多相关文章

  1. 【SSH之旅】一步步学习Hibernate框架(一):关于持久化

    在不引用不论什么框架下,我们会通过平庸的代码不停的对数据库进行操作,产生了非常多冗余的可是又有规律的底层代码,这样频繁的操作数据库和大量的底层代码的反复书写极大的浪费了程序人员的书写.就在这样一种情况 ...

  2. MyBatis学习总结(二)---实例

    为了对MyBatis有个初步了解,现做一个简单的增.删.改.查实例.了解涉及的文件与相关作用. MySql创建friends表,以下是表的sql语句 DROP TABLE IF EXISTS `fri ...

  3. 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

    http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-data ...

  4. SSH框架之Struts(4)——Struts查漏补缺BeanUtils在Struts1中

    在上篇博客SSH框架之Struts(3)--Struts的执行流程之核心方法,我们提到RequestProcessor中的processPopulate()是用来为为ActionForm 填充数据.它 ...

  5. WCF学习之旅——第一个WCF示例(二)

    第四步:通过自我寄宿的方式寄宿服务 WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程.WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段. 终 ...

  6. Yii框架学习笔记(二)将html前端模板整合到框架中

    选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...

  7. 一步步学习ASP.NET MVC3 (1)——基础知识

    请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...

  8. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  9. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

随机推荐

  1. [转]Android的ADT与SDK的区别

      adt只是一个eclipse的插件,里面可以设置sdk路径     SDK(Software Development Kit): 一般是一些被软件工程师用于为特定的软件包.软件框架.硬件平台.操作 ...

  2. CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂

    772002画马尾 题目连接: http://acm.uestc.edu.cn/#/problem/show/1280 Description 众所周知772002很喜欢马尾,所以他决定画几幅马尾送给 ...

  3. 使用织梦开源的分词算法库编写的YII获取分词扩展

    在编辑文章中,很多时候都需要自动根据文章内容获取关键字的功能,因此,本文主要是说明如何在yii中使用织梦开源的分词算法编写一个独立的扩展,可以在不同的模块中使用,步骤如下: 1 到这里下载其他朋友整理 ...

  4. dump备份mysql表

    Auth: Jin Date: 20140403 Content: #!/bin/bash - ### auth: Jin ### ### Desc: 备份输入库里的所有表,清理指定天前的备份文件 # ...

  5. 虚拟PDF打印机

    doPDF虚拟打印机 doPDF 是一个免费的PDF转换器,可同时运用于商业和个人,它把自己安装为一个打印机驱动,允许从任意一个有打印输出的Windows程序中打印,还包含缩放,质量定义和页面大小定义 ...

  6. 判断 Selite中标存在或者字段存在的方法

    判断表存在的方法很简单,网上很多: SELECT COUNT(*) FROM sqlite_master where type='table' and name='%s'" % tname; ...

  7. python遍历目录的方法 walk listdir

    这篇文章里描述了这些情况: https://www.cnblogs.com/jiaxin359/p/7324077.html 不用递归的时候,用 listdir 需要递归的时候,用walk

  8. DirectX游戏开发——从一个小游戏開始

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...

  9. /dev/null 的含义和用途

    /dev/null 代表空设备文件,它等价于一个仅仅写文件,全部写入它的内容都会永远丢失.而尝试从它那儿读取内容则什么也读不到. 0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统 ...

  10. Win7双屏显示设置

    双显示器:一个是T410自己的屏幕,一个是宏基的Acer1296*768显示器. 连接:将宏基显示器的Display端子连接到笔记本的Display口上,电源接上. 设置过程: 1.右键点屏幕,选“S ...