1、struts1工作原理

a> 初始化: struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.

b> 发送请求: 用户提交表单或通过URL向WEB服务器提供请求,请求的数据用HTTP协议传给WEB服务器.

c> form填充: Struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中

d>派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给Action的excute()方法

e>处理业务: Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象.服务器通过ActionForward对象进行转发工作

f> 返回响应: Action将业务处理的不同结果返回一个目标相应对象给总控制器

g> 查找响应: 总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面

h> 响应用户: 目标响应对象将结果传递给资源对象,将结果展现给用户

struts1原理图:

2、基础入门

1> 下载struts的安装文件struts-1.3.10-all.zip

2> 创建一个 web project,并将上步中解压的lib文件下的jar包引进去

3> 配置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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID" version="2.5">

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<servlet>

<servlet-name>action</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>

<init-param>

<param-name>debug</param-name>

<param-value>2</param-value>

</init-param>

<init-param>

<param-name>detail</param-name>

<param-value>2</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

</web-app>

4> 新建struts-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>

<!-- ActionForm -->

<form-beans>

<!-- name:名称 type:类路径 -->

<form-bean name="loginForm" type="com.wgy.struts1.LoginForm"></form-bean>

</form-beans>

<!-- 设置全局URL,必须写在Action前面,这样任何Action都可以使用

<global-forwards>

<forward name="result" path="/result.jsp" />

</global-forwards> -->

<!-- 注册Action -->

<action-mappings>

<!-- name:Form名称 type:类路径 path:客户端(JSP)提交到服务器端时指定的路径(Form表单                       中的action=”/login.do") -->

<action path="/login" type="com.wgy.struts1.LoginAction"

name="loginForm" scope="request">

<!-- 局部URL,只有这个action可以使用 -->

<forward name="success" path="/success.jsp"></forward>

</action>

</action-mappings>

</struts-config>

5> 新建LoginForm类:

package com.wgy.struts1;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {

private static final long serialVersionUID = 1L;

private String username;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

}

6> 新建LoginAction类:

package com.wgy.struts1;

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 LoginAction extends Action {

@Override

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

LoginForm loginForm = (LoginForm) form;

if ("wgy".equals(loginForm.getUsername())) {

return mapping.findForward("success");

}

return null;

}

}

7> 新建index.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8" import="java.util.*"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<!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>首页</title>

</head>

<body>

<html:form action="/login.do">

username:<html:text property="username"></html:text> <br />

<html:submit>登录</html:submit>

</html:form>

</body>

</html>

注:以上仅描述大致流程,未作详细处理。

struts1中action是线程不安全的,因为每个action只被初始化一次,所有请求共享一个action实例。

要实现这种安全性,必须:

1> 不要用实例变量或类变量共享只是针对某个请求的数据;

2> 注意资源操作的同步性。

其属性attribute用来存取form的关键字,缺省值与name属性值一样;

validate属性用于是否校验表单(校验开关),缺省值为true(校验);

如果表单校验失败,则跳转到input属性所代表的目标模块(必须当validate=true时,才起作用)

ActionForward:

当其属性redirect值为true时,会调用HttpServletResponse的sendRedirect方法,跳转路径写绝对路径;当值为false时,调用RequestDispactcher.forward方法,跳转路径为相对当前应用,默认为false。

转载于:https://blog.51cto.com/6337347/1097663

struts1基础入门相关推荐

  1. 用python循环语句求素数_Python基础入门_3条件语句和迭代循环

    Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...

  2. MAYA 2022基础入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...

  3. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  4. 三维地形制作软件 World Machine 基础入门学习教程

    <World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...

  5. SketchUp Pro 2021基础入门学习视频教程

    SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语+中文字幕( ...

  6. Maya基础入门学习教程

    Maya基础入门学习教程 视频:.MKV, 1280x720, 共57节课 时长 4小时25分钟,3GB 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 指导老师:Shane Whitt ...

  7. Maya2022基础入门学习教程

    Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频: ...

  8. Blender基础入门学习教程 Learning Blender from Scratch

    Blender基础入门学习教程 Learning Blender from Scratch 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ ...

  9. json vue 对象转数组_vue 基础入门(一)修改

    vue基础入门(一) 1. 什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标 ...

最新文章

  1. 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段
  2. 一、nginx 安装
  3. Javascript实现表格的全选框
  4. MySQL导入导出命令
  5. 【arduino】arduino代码运行时间测试函数,代码性能运行时间测试方法
  6. Drools 5.1.1(一)
  7. [CQOI2009]叶子的染色(树形dp)
  8. sql not exists用法_SQL Server 2012 高级用法(一)
  9. 如何安装python3.8.1_python3.8.1 安装
  10. CSS中flex和inline-flex的区别
  11. flutter - fluro
  12. bae mysql_获取BAE上的MySQL相关信息
  13. 设计模式--迭代器模式(C++实现)
  14. [ATL/WTL]_[Gdiplus]_[关于使用Gdiplus来绘制反锯齿的圆角矩形]
  15. 什么是DNS缓存投毒?有哪些危害?
  16. html 调用es2015模块,ES 2015 Modules
  17. 华硕Android原始密码,华硕路由器默认密码是多少?ASUS路由器初始密码介绍
  18. 心理很难受,无法平静!
  19. 在Chem 3D软件用什么方法可以改变背景
  20. Flutter自定义Widget之炫酷粒子时钟效果

热门文章

  1. 求整数 在二进制表示中有多少个1的方法
  2. Mybatis Plus简介_代码_以及文档地址_以及前置知识---Mybatis Plus工作笔记001
  3. 运维测试工作笔记0004---各种免费开源的测试平台
  4. SpringCloud工作笔记038---spring cloud微服务权限认证_终于确定下来大体的思想了
  5. JPA开发求助---JPA生成数据表的时候:log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotat
  6. 如何杀掉服务器的进程
  7. pylon 内存泄露的问题
  8. java 中文件outputstream的操作注意
  9. 为什么java什么意思_java – 什么意思是immutable?
  10. amd玄冰400怎么拆图解_89元入手新版玄冰400I散热器实测,从此一生黑!还能再难用一点?...