Struts1框架轻易入门,经典示例

版权申明:此文为作者原创,未经允许,请勿转载!

  • Struts工作原理及流程
  • 登录验证示例

Struts1 工作原理及流程

这是本人整理的一点材料,原理图为纯手工绘制,不喜勿喷,不足之处还望大家多多指点。

1、读取配置
Struts框架总控制器(ActionServlet)就是一个Servlet,需要在web.xml中进行配置,在服务器加载之前会先加载web.xml配置文件,加载的同时会初始化ModuleConfig对象(下面的示例中有注释说明)。

2、提起请求
提交表单或调用URL操作都会提起一个请求,服务器接收到该请求后会判断该请求信息,如果提交对象是*.do,则将请求转发到ActionServlet。

3、填充数据
如果请求被转发到ActionServlet总控制器中,ActionForm(示例中写的类)会被实例化,此时HTTP请求中所包含的数据会被一一对应地填充到实例对象的字段中(所以要求ActionForm中的字段名必须与表单的一致,否则无法获得提交的数据),填充的数据将被保存到ServletContext中。

4、分配Action处理该请求
数据填充后,控制器会根据配置文件(struts-config.xml)中的配置信息将该请求分配到相对应的Action类进行处理。

5、处理请求
Action中必须包含一个execute()方法,负责调用执行相应的业务逻辑操作(业务逻辑的具体操作一般会封装到其他类)。执行完毕后返回ActionForward。

6、响应请求(返回关键字)
负责处理该请求的Action根据业务处理的不同结果返回一个目标响应对象给总控制器。

7、响应处理(返回响应结果)
总控制器根据具体业务功能Action控制器返回来的响应(关键字)做出响应处理。(如果不好理解请参照示例中的注释)

8、HTTP响应
将最终的响应返回给JSP,将结果页面展现给用户。



登录验证示例


web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd"><!-- 配置总控制器 --><servlet><servlet-name>Action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><!-- 配置初始化参数,内容为管理调度总控制器中Action的属性文件 --><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param></servlet><!-- 配置总控制器对外的映射路径 --><servlet-mapping><servlet-name>Action</servlet-name><!-- 只有.do类型的请求才需要转到ActionServlet总控制器中 --><url-pattern>*.do</url-pattern></servlet-mapping></web-app>

struts-config.xml 框架配置文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd"><!-- Struts框架的配置文件 -->
<struts-config><form-beans><!-- 该标签作用是填充数据,type是指定接收表单提交数据的类全称 --><form-bean name="loginForm" type="com.bean.LoginForm"></form-bean></form-beans><!-- Action的映射 --><action-mappings><!-- 配置一个Action,该Action的作用就是验证登录信息 --><!-- path相当于该Action对外访问的虚拟路径 --><!-- type是该Action所对应的类(相当于一个真实路径)" --><!-- name的作用是指明总控制器跳转到指定Action所需携带的数据 --><action path="/login" type="com.action.LoginAction" name="loginForm"><!-- 用于Action处理接收到的"后台"响应 --><forward name="ok" path="/ok.jsp"></forward><forward name="fail" path="/failed.jsp"></forward></action></action-mappings></struts-config>

login.jsp 登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><form action="login.do" method="POST">用户名:<input type="text" name="userName"  >密    码:<input type="password" name="password"><input type="submit" value="提交"></form>
</body>
</html>

LoginForm 表单数据填充类

package com.bean;import org.apache.struts.action.ActionForm;/*** @author zsh * @Title LoginForm.java* @Description: 用于给Action填充数据,必须继承ActionForm类,否则不能填充数据到Action* @date 2016年8月17日 下午9:20:53 * @version V1.0 */
public class LoginForm extends ActionForm{private static final long serialVersionUID = 1L;private String userName;//接收表单数据,字段名必须与表单一致private String password;private String msg;//返回错误信息public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}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;}
}

LoginAction 登录验证Action

package com.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.bean.LoginForm;/*** @author zsh * @Title LoginAction.java* @Description: 用于验证用户登录的Action类(业务逻辑层)* @date 2016年8月17日 下午9:25:00 * @version V1.0 */
public class LoginAction extends Action{/*** Action类必须重写该方法*/@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//将传进来的ActionForm对象向下转型,获得数据LoginForm user = (LoginForm) form;String userName = user.getUserName();String password = user.getPassword();//判断登录结果,并响应给Actionif("zhang".equals(userName) && "123".equals(password))return mapping.findForward("ok");elsereturn mapping.findForward("fail");}}

登录成功(ok.jsp)和失败(failed.jsp)的页面请自行编写


目录

  • Struts1框架轻易入门经典示例

    • Struts1 工作原理及流程

      • 登录验证示例
      • 目录

Struts1框架轻易入门,经典示例相关推荐

  1. Python爬虫框架 scrapy 入门经典project 爬取校花网资源、批量下载图片

    ####1.安装scrapy 建议:最好在新的虚拟环境里面安装scrapy 注意:博主是在 Ubuntu18.04 + Python3.6 环境下进行开发的,如果遇到安装scrapy不成功请自行百度/ ...

  2. C# 入门经典示例.

    class Class3 { static int a = ushort.MaxValue, b; static short c; static void Main() { //调试的时候不会报错. ...

  3. Oracle编程入门经典 第4章 新9i示例模式

    Oracle 9i产品帮助文档: http://docs.oracle.com/cd/B10501_01/index.htm 可根据自己需要进行查询,包含了众多的文档. Sample Schemas的 ...

  4. junit 经典示例_JUnit 4,JWebUnit,Arquillian和JSF单元示例教程

    junit 经典示例 Along side of development lifecycle, most of us looking for a way to be sure that the uni ...

  5. 计算机应届生必读的 AI 入门经典书单

    图源来自Pexels 有人说,学AI意味着 30k 打头的月薪,有了"科学家"的虚名,赶上了工业革命的时髦. 但也有人说,这是人工智能撒下的弥天大谎,不然那些工业界的大牛学者为啥都 ...

  6. 《Visual C# 2010入门经典》一导读

    前 言 Visual C# 2010入门经典 1998年12月底,Microsoft着手推出一种全新的开发平台,旨在提供一种创建和运行下一代应用程序和Web服务的全新方式.这种新平台名为.NET Fr ...

  7. Android4开发入门经典 之 第七部分:数据存储

    数据存储基本知识 Android系统提供了多种数据存储的方式,如下: 1:Shared Preferences:用来存储私有的.原始类型的.简单的数据,通常是Key-value对 2:Internal ...

  8. 《HTML5移动应用开发入门经典》—— 1.6 编写移动网站

    本节书摘来异步社区<HTML5移动应用开发入门经典>一书中的第1章,第1.6节,作者:[美]Jennifer Kyrnin,更多章节内容可以访问云栖社区"异步社区"公众 ...

  9. 《Objective-C入门经典》——2.1节Objective-C世界中的面向对象程序设计

    本节书摘来自异步社区<Objective-C入门经典>一书中的第2章,第2.1节Objective-C世界中的面向对象程序设计,作者[美]Jesse Feiler,更多章节内容可以访问云栖 ...

  10. python编程入门经典-Python编程入门经典PDF文档免费下载

    作为一门面向对象的开源编程语言,python易于理解和扩展,并且使用起来非常方便.<python编程入门经典>涵盖了python的方方面面,通过学习本书,读者可以立即使用python编写程 ...

最新文章

  1. 加速加速再加速——大数据机器学习模型实践
  2. Linux系统中的uptime命令
  3. python读取大文件的坑_如何在Python中读取大文件的特定部分
  4. 巾帼不让须眉——女生做运维,一样可以很好
  5. 【clickhouse】如何监控Clickhouse的连接数
  6. Linux系统配置成简单的路由器
  7. Leetcode 1218.最长定差子序列
  8. 360度舵机和180度舵机控制方法小结(转)
  9. 《Python黑客编程之极速入门》正式开课
  10. 浏览器主页劫持查杀,查杀主页劫持木马方法
  11. linux飞行模式问题解决
  12. 清北学堂集训day1
  13. 成功解决pyinstaller打包时报错:lib not found的问题
  14. 解决kali虚拟机无法连接网络的问题
  15. 福州黑白风格的婚纱照拍摄介绍
  16. 华为linux系统能用Cad么,华为平板能装cad画图吗 华为平板可以用cad软件吗?
  17. 解决使用高分辨率笔记本分辨率放大100%以上运行程序界面控件不跟随方大方式qt+gtk+ui
  18. 为什么Tesla显卡那么贵
  19. 【项目数据优化一】敏感数据脱敏处理
  20. Linux minerd木马清除(续)

热门文章

  1. 微型计算机启天m425显卡驱动,联想启天M425安装win7系统详细教程包括BIOS设置方法USB驱动...
  2. linux下oracle数据库自动备份方案
  3. 解决Ubuntu下载缓慢问题
  4. power designer mysql_powerdesigner下载
  5. Python实现简单自动升级exe程序版本并自动运行
  6. google服务框架 闪退_没Google服务闪退?教你解决手游谷歌服务问题
  7. ECShop 二次开发常用网站
  8. 图形学空间坐标变化之二维图形观察及变换
  9. 新中大计算机知识,新中大软件操作步骤
  10. 网络招聘信息的分析与挖掘