JavaWeb学习——struts1框架篇
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框架篇相关推荐
- Javaweb学习笔记 servlet篇
servlet a)什么是servlet b)手动实现servlet程序 常见的错误: c)url地址到servlet程序的访问 d)servlet的生命周期 e)get和post的分发处理 f)通过 ...
- JavaWeb学习之路——SSM框架之SpringMVC(八)
SpringMVC参数传递:把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,则会注入,在这里使用注解的方式来传递参数 前提使用springmvc注解功能,相应配置 ...
- JavaWeb学习之路——SSM框架之Spring(五)
前情提要请看JavaWeb学习之路--SSM框架之Spring(四) 整合Spring和Mybatis框架 1.在项目的 ...
- JavaWeb学习之路——SSM框架之Mybatis(三)
数据库配置和相关类创建看上篇:JavaWeb学习之路--SSM框架之Mybatis(二) https://blog.csdn.net/kuishao1314aa/article/details/832 ...
- Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门
Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...
- (四)javaweb 学习--javascript篇基础
文章目录 javascript (数据类型,方法) javascrip使用 javascrip使用进阶 HTML代码 CSS代码 javascript代码 javascrip使用进阶2 HTML代码 ...
- Java后台框架篇--Struts与SSH
这篇博客开始将总结一下有关框架的知识,在开发中合适的利用框架会使我们的开发效率大大提高.当今比较流行的开源框架: 关注数据流程的MVC框架(Struts1/2, WebWork, Spring MVC ...
- Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二
上周,Keras作者.谷歌研究科学家François Chollet晒出一张图,他使用Google Search Index,展示了过去三个月,ArXiv上提到的深度学习框架排行,新智元也做了报道: ...
- 从Theano到Lasagne:基于Python的深度学习的框架和库
从Theano到Lasagne:基于Python的深度学习的框架和库 [日期:2015-08-03] 来源:http://creative-punch.net/ 作者:Creative Punch ...
- 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目
这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...
最新文章
- 2021届图像/计算机视觉算法提前批的面经 | 附内推码
- 深度学习七个实用技巧
- weex css单位,weex 踩坑
- 从R-CNN到Mask R-CNN的思维跃迁
- 装配组件_基于Haption力反馈系统的交互式装配仿真
- Java企业面试算法新得体会之3二叉树问题24问
- python安装Pillow
- 共享打印机 需要查找inf文件_印前、快印常用的局域共享软件
- EJB3.0学习笔记---JBOSS 7.1.1 Final版本安装与配置
- 房贷提前还款怎么还?
- x86 服务器常见问题和故障诊断流程
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
- N32903系列的基础知识(1)
- MongoDB的web可视化管理工具
- 蝶形算法(Butterfly Algorithm)未更完
- 常用的简单的ps快捷键
- 深度强化学习(3):策略学习篇
- [案例]信息巨头Carfax如何打造数据产品
- Linux下7z压缩解压软件区别
- 第二十章 齐桓公大婚冤家又聚首 宋闵公嘲笑重臣丢君命(
热门文章
- 简单的权限管理系统——数据库设计和实现
- 主流反外挂技术的优缺点比较
- 仓库管理软件中的账套是什么意思
- CNNIC发布第39次《中国互联网络发展状况统计报告》
- Java中动态代理使用与原理详解
- 计算机软件429修复工具,运行时错误 429,ActiveX部件不能创建对象的解决方法小结...
- Ubuntu更新下载源
- ubuntu 下载 迅雷
- java软件汉化工具_6款程序员必备的开源中文处理工具
- 武汉理工大学计算机学院宿舍,武汉理工大学专业所属校区及新生住宿分布情况(v2.0)...