1.Struts的几个基本概念
1.struts是一个开源框架(frameset) 基于MVC的Web框架。
2.为什么有struts
有必要用一个统一的规范来开发项目。利于程序的维护和扩展以及提高开发效率,所以出现了struts.
struts是通过采用Java的Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品
struts的优缺点如下:
1.struts的好处:
程序更加规范化
程序开发的效率提高了
程序的可读性增加
程序的可维护性增加
2.struts的不足之处:
form表单有点鸡肋
action是单态(对网站并发性的处理有影响)
这些内容后面会介绍。
我们要知道的是:框架在提高了程序的规范的同时,也约束了程序员的自由。
3.struts的原理
以一个用户登录验证的例子说明。
3.1.时序图
1.ActionServlet是总控制器,它是struts给我们提供的,我们无需自己写,只需要配置即可。ActionServlet管理struts-config.xml文件,而这个文件是struts的核心文件,该文件配置了ActionForm,还配置了Action,以及它们的对应关系等。
2.ActionForm是表单,用于存放数据。开发ActionFrom必须要继承ActionForm类,这是规范。
3.Action是分控制器,在Struts中,Action可以有多个.它的本质就是Servlet。开发一个Action也要继承Action类。
4.Model(Java类,Service类,ejb等)
3.2.struts入门案例
使用手动配置的方式来开发第一个struts1项目
首先,项目目录结构如下所示:
【步骤】:
1.在开发struts的时候,需要struts的开发包
struts的开发包可到官网下载【下载地址】,https://struts.apache.org/download.cgi。下载Struts 1.3.10。并把所有的jar包加入到当前项目的lib文件夹。
2.先写出login.jsp
写最简单的登录页面login.jsp,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 注意form中的action跳转地址,是我们的web应用下的
login.do
页面,这里在稍后介绍的struts-config.xml配置中会再说明。
3.编写LoginForm和Action
(1)首先需要编写LoginForm,即用户登录所用的表单,用于填充用户输入的数据。如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
其实这就是一个很简单的JavaBean,它和login.jsp中的表单对应。
(2)然后,编写Action,即登录的Action,它必须继承自Action
类,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
在这个类中,我们需要重写一个方法:excute
。这个方法会处理业务逻辑,会自动调用,它有点类似于Servlet中的service方法,或者doGet/doPost方法。
4.配置struts-config.xml文件,这个文件一般放在/WEB-INF目录下,它配置Action、ActionForm以及它们的对应关系和跳转
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
(1)这个struts-config.xml引入了一个DTD文件:struts-config_1_3.dtd,这个文件可以在我们下载的jar包中找到,它定义了我们这个xml的约束,根元素为struts-config
。
(2)该配置文件主要通过form-beans来配置ActionForm、通过action-mappings来配置Action。
(3)我们在form-beans下用form-bean来配置具体的ActionForm,比如当前文件配置了我们写的UserForm
(4)在action-mappings下用action来配置具体的Action,比如当前文件配置了我们写的LoginAction
(5)要注意这里action中的path参数配置,它就是我们的login.jsp中的表单action提交的地址,login.jsp中写的是login.do
,这个login.do
会交给struts的总控制器ActionServlet来处理,最后ActionServlet将通过一定的机制找到这里的path参数配置为/login
的action,再通过该action配置的type参数找到具体的类。
从这个过程中我们可以发现,login.do在通过ActionServlet的处理后,最后找到的却是路径为/login
的action,这似乎和.do
这个后缀没有什么关系,的确是这样的,这个后缀只是习惯上的用法,我们完全可以在web.xml文件中将这个后缀设置成其他任何的名字。
(6)最后要在具体的action下配置跳转关系。这里配置的参数和LoginAction中的excute
方法所写要对应起来。
5.写出success.jsp和error.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Error</title>
</head>
<body>
<h1>欢迎[<%=request.getAttribute("username") %>]登陆成功!</h1>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Error</title>
</head>
<body>
<h1>登陆失败!</h1>
</body>
</html>
6.在web.xml中配置ActionServlet
struts的总控制器ActionServlet本质上还是一个Servlet,所以我们要在web.xml中配置,配置如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
我们要在该配置中指定struts-config.xml文件的地址。同时可以看到,我们在这里配置的后缀为*.do
,也就是说所有以.do
结尾的请求都要交给ActionServlet来处理。到这里,也就明白了为什么我们的login.jsp中写的提交地址为login.do
。
4.总结
struts1中的核心知识点:ActionServlet总控制器,Action分控制器,ActionForm表单,以及structs-config.xml和web.xml文件的配置。