Struts1学习讲义

  • 环境准备
  • 整体框架结构
  • struts-config.xml配置文件
  • Formbean
  • Action
  • 注意事项

环境准备

1、相应的jar包,基本的有:javax-servlet-api:3.1.0, struts-core:1.3.10, jstl:1.2等,若需要连接数据库,还要commons-collections包等
2、eclipse新建web项目,不必自动添加struts属性,在web.xml中,注册对应的ActionServlet即可,如下:

<servlet><servlet-name>actionServlet</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>actionServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>

真正的struts配置文件被连接在了/WEB-INF/struts-config.xml路径下,里面会配置Action, Formbean的具体属性参数,稍后详述;
定义了所有形如.do结尾的url均被struts的ActionServlet截获,由struts来处理


整体框架结构

基本流程是:
url请求(.do结尾的)
—>ServletMapping截获请求,交给ActionServlet处理
—>struts-config.xml根据url指派具体的Action(相当于Controller层)
—>Action的execute()方法执行具体的业务逻辑(Controller–>Model层)
—>返回ActionForward对象,struts-config.xml分发具体转向的jsp页面(Controller–>View层)
具体图示如下:

解释一下:
struts-config.xml中配置了FormBean和Action,action内部属性可以配置使用哪一个FormBean,同时配置了自己的url请求匹配规则,就可以把请求提交的表单域自动填充到对应的FormBean对象中
当然直接用formbean为媒介操作数据库不太合理,可以中间在加一层pojo类过度;
HelloAction实际调用方法execute内部处理具体的业务逻辑,最终返回一个ActionForward对象,struts-config.xml可以根据返回对象来决定转向哪一个页面,实现最终的展示View层


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-config><description></description><form-beans>            <!-- 配置Formbean --><!-- name表示form-bean标识,type是类的全限定名 --><form-bean name="helloForm" type="formbean.HelloForm" ></form-bean></form-beans><global-exceptions/>    <!-- 配置异常处理页面 --><global-forwards/>      <!-- 配置全局jsp页面 --><action-mappings>       <!-- 配置Action --><action path="/hello"               <!-- path标识映射url路径,匹配hello.do形势,自动加.do -->type="action.HelloAction"   <!-- 对应的Action类 -->attribute="helloForm"       <!-- FormBean在request中的位置,request.geteAttribute('helloForm') -->input="/hello.jsp"          <!-- 输入页,Action中执行mapping.getInputForward()得到该页 -->name='helloForm'            <!-- 本Action实用的Formbean,对应上面的FormBean -->scope="request" >           <!-- 作用域,包括request, session等 --><forward name="success" path="/index.jsp"/> <!-- forward转向到的jsp页面,name是名称,用于Action中的mappiing.forward("") --></action>   </action-mappings></struts-config>

struts-config.xml是核心配置文件,扮演MVC中controller的角色,负责分发具体action,接受返回参数并决定调用那个页面


web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>struts1_compare</display-name><servlet><servlet-name>actionServlet</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>actionServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><resource-ref>  <!-- struts1.3之后就不在支持在struts-config.xml中配置数据源了,需要在web.xml中配置 ,[JNDI配置数据源](https://www.cnblogs.com/xdp-gacl/p/3951952.html))
--></resource-ref></web-app>

web.xml里面配置struts1的核心servlet类:ActionServlet,并配置servlet的url匹配规则,,本质上就是一个servlet
只不过在servlet内部以的形式配置了strtus-config.xml,这样就建立了关联关系
配置具体struts-config.xml 路径是,,必须制定param-name名为config,,Struts才能识别并解析;弱配置多个,则需要以config 为上级目录
如: config -》/WEB-INF/struts-config1.xml 这个配置文件被映射到应用的根路径下,代表总的配置文件 config即代表着应用根路径
config/user1 -》/WEB-INF/struts-config2.xml 这个配置文件被映射到应用的 /user1下,代表子模块配置


Action代码

package 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;public class HelloAction extends Action{@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stubrequest.setAttribute("aaa", "struts can be succeed!");System.out.println(11111111);return mapping.findForward("success");}
}

Action实现具体业务逻辑,传入参数包括ActionMapping 和 ActionForm类,前者代表了struts-config.xml中配置属性,后者代表了Form对象;
最后返回ActionForward类型,mapping.findForward(“success”),关键字success,对应着struts-config.xml中forward属性,配置了转向哪个页面


FormBean代码

package formbean;import org.apache.struts.action.ActionForm;public class HelloForm extends ActionForm{private String hello;public String getHello() {return hello;}public void setHello(String hello) {this.hello = hello;}}

本例中基本没用到formbean,表单填充,操作数据库用的多

View层jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body><h1>This is my Hello page. </h1><br><h3>Success for User's struts1!</h3><h6><%= request.getAttribute("aaa") %></h6></body>
</html>

结束

访问 http://localhsot:8080/projectName/hello.do
最终效果为:


最后,推荐一个更为详细讲解:struts1深入讲解

JavaWeb学习——struts1框架篇相关推荐

  1. Javaweb学习笔记 servlet篇

    servlet a)什么是servlet b)手动实现servlet程序 常见的错误: c)url地址到servlet程序的访问 d)servlet的生命周期 e)get和post的分发处理 f)通过 ...

  2. JavaWeb学习之路——SSM框架之SpringMVC(八)

    SpringMVC参数传递:把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,则会注入,在这里使用注解的方式来传递参数 前提使用springmvc注解功能,相应配置 ...

  3. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  4. JavaWeb学习之路——SSM框架之Mybatis(三)

    数据库配置和相关类创建看上篇:JavaWeb学习之路--SSM框架之Mybatis(二) https://blog.csdn.net/kuishao1314aa/article/details/832 ...

  5. Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门

    Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...

  6. (四)javaweb 学习--javascript篇基础

    文章目录 javascript (数据类型,方法) javascrip使用 javascrip使用进阶 HTML代码 CSS代码 javascript代码 javascrip使用进阶2 HTML代码 ...

  7. Java后台框架篇--Struts与SSH

    这篇博客开始将总结一下有关框架的知识,在开发中合适的利用框架会使我们的开发效率大大提高.当今比较流行的开源框架: 关注数据流程的MVC框架(Struts1/2, WebWork, Spring MVC ...

  8. Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二

    上周,Keras作者.谷歌研究科学家François Chollet晒出一张图,他使用Google Search Index,展示了过去三个月,ArXiv上提到的深度学习框架排行,新智元也做了报道: ...

  9. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 [日期:2015-08-03] 来源:http://creative-punch.net/  作者:Creative Punch ...

  10. 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

最新文章

  1. 2021届图像/计算机视觉算法提前批的面经 | 附内推码
  2. 深度学习七个实用技巧
  3. weex css单位,weex 踩坑
  4. 从R-CNN到Mask R-CNN的思维跃迁
  5. 装配组件_基于Haption力反馈系统的交互式装配仿真
  6. Java企业面试算法新得体会之3二叉树问题24问
  7. python安装Pillow
  8. 共享打印机 需要查找inf文件_印前、快印常用的局域共享软件
  9. EJB3.0学习笔记---JBOSS 7.1.1 Final版本安装与配置
  10. 房贷提前还款怎么还?
  11. x86 服务器常见问题和故障诊断流程
  12. BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
  13. N32903系列的基础知识(1)
  14. MongoDB的web可视化管理工具
  15. 蝶形算法(Butterfly Algorithm)未更完
  16. 常用的简单的ps快捷键
  17. 深度强化学习(3):策略学习篇
  18. [案例]信息巨头Carfax如何打造数据产品
  19. Linux下7z压缩解压软件区别
  20. 第二十章 齐桓公大婚冤家又聚首 宋闵公嘲笑重臣丢君命(

热门文章

  1. 简单的权限管理系统——数据库设计和实现
  2. 主流反外挂技术的优缺点比较
  3. 仓库管理软件中的账套是什么意思
  4. CNNIC发布第39次《中国互联网络发展状况统计报告》
  5. Java中动态代理使用与原理详解
  6. 计算机软件429修复工具,运行时错误 429,ActiveX部件不能创建对象的解决方法小结...
  7. Ubuntu更新下载源
  8. ubuntu 下载 迅雷
  9. java软件汉化工具_6款程序员必备的开源中文处理工具
  10. 武汉理工大学计算机学院宿舍,武汉理工大学专业所属校区及新生住宿分布情况(v2.0)...