struts1基础入门
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基础入门相关推荐
- 用python循环语句求素数_Python基础入门_3条件语句和迭代循环
Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...
- MAYA 2022基础入门学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...
- Blender 3.0基础入门学习教程 Introduction to Blender 3.0
成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...
- 三维地形制作软件 World Machine 基础入门学习教程
<World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...
- SketchUp Pro 2021基础入门学习视频教程
SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语+中文字幕( ...
- Maya基础入门学习教程
Maya基础入门学习教程 视频:.MKV, 1280x720, 共57节课 时长 4小时25分钟,3GB 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 指导老师:Shane Whitt ...
- Maya2022基础入门学习教程
Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频: ...
- Blender基础入门学习教程 Learning Blender from Scratch
Blender基础入门学习教程 Learning Blender from Scratch 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ ...
- json vue 对象转数组_vue 基础入门(一)修改
vue基础入门(一) 1. 什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标 ...
最新文章
- 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段
- 一、nginx 安装
- Javascript实现表格的全选框
- MySQL导入导出命令
- 【arduino】arduino代码运行时间测试函数,代码性能运行时间测试方法
- Drools 5.1.1(一)
- [CQOI2009]叶子的染色(树形dp)
- sql not exists用法_SQL Server 2012 高级用法(一)
- 如何安装python3.8.1_python3.8.1 安装
- CSS中flex和inline-flex的区别
- flutter - fluro
- bae mysql_获取BAE上的MySQL相关信息
- 设计模式--迭代器模式(C++实现)
- [ATL/WTL]_[Gdiplus]_[关于使用Gdiplus来绘制反锯齿的圆角矩形]
- 什么是DNS缓存投毒?有哪些危害?
- html 调用es2015模块,ES 2015 Modules
- 华硕Android原始密码,华硕路由器默认密码是多少?ASUS路由器初始密码介绍
- 心理很难受,无法平静!
- 在Chem 3D软件用什么方法可以改变背景
- Flutter自定义Widget之炫酷粒子时钟效果
热门文章
- 求整数 在二进制表示中有多少个1的方法
- Mybatis Plus简介_代码_以及文档地址_以及前置知识---Mybatis Plus工作笔记001
- 运维测试工作笔记0004---各种免费开源的测试平台
- SpringCloud工作笔记038---spring cloud微服务权限认证_终于确定下来大体的思想了
- JPA开发求助---JPA生成数据表的时候:log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotat
- 如何杀掉服务器的进程
- pylon 内存泄露的问题
- java 中文件outputstream的操作注意
- 为什么java什么意思_java – 什么意思是immutable?
- amd玄冰400怎么拆图解_89元入手新版玄冰400I散热器实测,从此一生黑!还能再难用一点?...