一、struts运行原理

ActionServlet: 总控制器,只需配置,不需编写。(在web.xml中配置struts-config.xml的位置信息,以及对哪些请求进行处理等)

表单(form): 总控制器在处理请求时,会查询struts-config.xml,将用户提交的数据填充到对应的表单中去,表单实际上是一个javaBean,用户提交哪些数据,它都有应该有对应的成员属性去存储(通过set和get方法)

Action: 用来处理请求,在struts-config.xml中有表单和Action的对应关系

struts-config.xml: 记录表单和Action的详细信息,以及它们之间的对应关系

1.浏览器(含登录表单<form action=”xxx.do”>)发出http登录请求。

2.解析主机名(查询hosts和DNS获得主机对应ip)

3.开始连接web服务器

4.通过http协议发送request请求(GET/myWeb/ABC)到web服务器上。

5.web服务器查询web.xml之后将请求转发给ActionServlet(web.xml中配置了让ActionServlet处理xxx.do的请求)

6.ActionServlet查询struts-config.xml把用户提交的数据填充到对应表单(ActionForm)中。

7.ActionServlet查询struts-config.xml调用指定的action,action从对应的ActionForm获取数据。

8.action调用处理函数,并将执行结果返回给ActionServlet(总控制器),ActionServlet查询struts-config.xml,根据不同的结果,跳转到不同的界面。

9.返回静态页面给web服务器,web服务器以http回应的形式返回给浏览器。

二、入门案例

1.创建web项目StrutsLogin,并引入struts开发包

2.在WEB-INF下编写login.jsp(jsp里用户表单含Name和password),并将首页面设为自动跳转到login.jsp(jsp:forward)

<form action="login.do" method="post">u:<input type="text" name="name"><br/>p:<input type="password" name="password"><br/><input type="submit" value="提交"></form>

3.在包com.forms下编写UserForm.java(继承ActionForm)、login.jsp中form里的name需对应ActionForm里属性的set和get方法、本质上是一个javaBean

package com.forms;import org.apache.struts.action.ActionForm;public class UserForm extends ActionForm {private String name;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

4.在包com.actions下编写LoginAction.java(继承自Action)、并重写其中的execute方法(这个方法是用来处理业务逻辑,会被自动调用)。

package com.actions;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;import com.forms.UserForm;public class LoginAction extends Action {@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stubUserForm userForm=(UserForm)form;if(userForm.getName().equals("1")&&userForm.getPassword().equals("1")){return mapping.findForward("ok");}else{return mapping.findForward("err");}}
}

5.在WEB-INF下编写struts-config.xml文件,该文件用于配置action、actionForm的对应关系,以及跳转的配置。

<struts-config><!-- 配置表单 --><form-beans><!-- name是表单名字,可以随便写,一般ActionForm名小写 --><form-bean name="userForm" type="com.forms.UserForm"></form-bean></form-beans><!-- 配置action --><action-mappings><!-- path表示将来访问该action的资源名,可以随意取,/login就表示它是代表为login.do的action
--><!-- attribute表示后面scope设置的key值,默认就是表单名小写--><!-- name与表单name相同,即将action与Actionform关联 --><!-- attribute="userForm" scope="request"相当于request.setAttribute("userForm",userForm) --><!--attribute="userForm" scope="session"相当于session.setAttribute("userForm",userForm) --><action path="/login" attribute="userForm" name="userForm" scope="request" type="com.actions.LoginAction"><!-- 这里配置跳转关系,action处理之后会返回一个结果,如果返回ok,就跳转到ok.jsp,如果返回err就跳转到err.jsp --><forward name="ok" path="/WEB-INF/ok.jsp"></forward><forward name="err" path="/WEB-INF/err.jsp"></forward></action></action-mappings>
</struts-config>

6.在WEB-INF下新建ok.jsp和err.jsp,并编写一些内容以标识LoginAction的处理结果

7.在web.xml下配置ActionServlet(servlet的配置),并使能够读取到struts-config.xml。

<servlet><!-- 配置actionServlet --><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><!-- 配置struts-config.xml --><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>action</servlet-name><!-- 让jsp发出的.do请求经过actionServlet--><url-pattern>*.do</url-pattern></servlet-mapping>

7.浏览http://localhost:8080/StrutsLogin,如果输入用户名和密码都为1,则跳到ok.jsp,否则跳转到err.jsp

三、运行思路

1.用户在login.jsp提交了用户名和密码(name和password),提交给login.do。

2.连接到web服务器之后,web.xml查询到相应的servlet去处理它。我们配置的ActionServlet又是处理*.do的,所以交给ActionServlet处理。

3.通过web.xml的配置找到ActionServlet类的路径。

4.找到ActionServlet,发现ActionServlet的处理方法是根据找到web.xml下的param-name为config的文件进行处理,找得是名为struts-config.xml且在WEB-INF目录下。找到后,ActionServlet便会一直使用此找得的文件,直到下次找不到文件,才会重写寻找param-name为config的文件。

5.查询struts-config.xml知道,login.do的交给com.actions.LoginAction处理,而且对应表单是userForm,再根据struts-config.xml的配置找到userForm的路径是com.forms.UserForm。

6.填充数据,找到userForm调用userForm里的setName和setPassword,将用户提交的数据填入。

7.找到LoginAction,执行里面的处理方法--execute,此时的userForm已经作为参数传入了,此时在execute里执行相应处理,处理完返回对应的ActionForward(给ActionServlet)。

8.ActionServlet再查询到LoginAction的配置,根据不同的ActionForward决定跳转到哪个页面。

四、乱码处理。

我们在loginAction中处理乱码是没有效果的,因为在调用loginAction之前,用户数据已经被填充到userForm中了。

所以在struts中处理乱码必须使用过滤器。我们在web服务器和ActionServlet之间加入过滤器。

我们在com.myz.filters下创建一个servlet并实现javax.servlet.Filter接口。

实现dofilter方法:

arg0.setCharacterEncoding("utf-8");//设置接收编码arg1.setCharacterEncoding("utf-8");//设置回应编码arg2.doFilter(arg0, arg1);//必须写这句话,否则过滤后将不会往下走

配置filter:

<filter><filter-name>MyFilter1</filter-name><filter-class>com.myz.filters.MyFilter1</filter-class></filter><filter-mapping><filter-name>MyFilter1</filter-name><!-- 表示针对所有的都过滤 --><url-pattern>/*</url-pattern></filter-mapping>

五、struts的好处和坏处

程序更加规范化

程序开发的效率提高了

程序的可读性增加

程序的可维护性增加了

Form表单有点鸡肋

Action是单态(对网站并发性的处理有影响)

(单态:在整个程序的运行过程中,始终是一个对象)

六、注意

1.Struts-config.xml的位置可以随意,但是需要在web.xml下重新配置。

2.一个项目中可以有多个struts配置文件,在web.xml配置时用逗号隔开即可。

3.增加数据库验证:

com.myz.domain下创建User类,该类是javaBean,主要是方便UserDao的传参等。

其实不创建该类,使用UserForm也是可以的

com.myz.service下创建DBDAO和UserDAO,DBDAO用于连接数据库,UserDAO用于操作数据库(如loginCheck)。

在loginAction中根据传入UserForm的数据调用loginCheck方法,进行验证。

转载于:https://www.cnblogs.com/myz666/p/8419445.html

一、struts入门相关推荐

  1. Struts入门经验(二)

    上一篇Struts入门经验,我们主要讲述了如何安装Struts以及注册页面:reguser.jsp,本文将主要介绍Struts应用实例.优缺点和实施经验. Struts-config.xml: < ...

  2. Struts入门(三)深入Struts用法讲解

    访问Servlet API Action搜索顺序 动态方法调用 指定多个配置文件 默认Action Struts 后缀 接收参数 处理结果类型 1.访问Servlet API 首先我们了解什么是Ser ...

  3. struts入门day04

    拦截器 1.struts2是框架,封装了很多功能,很多功能都在拦截器里面. 2.struts2封装了很多功能,有很多拦截器,这些拦截器不是每次都执行.每次执行默认的拦截器. 3.拦截器在action创 ...

  4. java struts 介绍,Struts入门之MVC介绍

    Struts是基于MVC的一套框架,所以,在学习struts之前,我们一起来深入了解下MVC. MVC模式 MVC是一种设计模式,它是Model-View-Controller的缩写,是一种著名的用户 ...

  5. struts入门的ognl

    struts标签 1.1 通用标签 1.1.1 数据标签 property set scope="action",action=request+actionContext push ...

  6. Struts入门学习(三)---自定义类型转换器

    类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白 我们新建一个类 ConverterTest.ja ...

  7. Struts入门教程

    基本过程 1.配置struts-2.3.dtd 配置方法:window- preferences-xml-xml catlog-user Specified entries 点击add (key,va ...

  8. struts入门超详细

    https://blog.csdn.net/yerenyuan_pku/article/details/52652262 转载于:https://www.cnblogs.com/liuna369-43 ...

  9. Struts标签入门

    Struts标签入门 基本概述 Struts 是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架.Struts 提供了非常多的标签,依 ...

  10. Struts学习笔记--导航

    Struts入门 JSTL入门 Struts标签入门 Struts使用细节

最新文章

  1. python程序在命令行执行提示ModuleNotFoundError: No module named ‘XXX‘ 解决方法
  2. Longest Substring Without Repeating Characters
  3. 基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结
  4. html input不能输入小数_第三课:变量与输入输出的配合使用
  5. java redis 没密码配置_如何解决redis的NOAUTH Authentication required异常
  6. LeetCode 1138. 字母板上的路径
  7. 95-180-050-源码-Watermark-允许固定数量延迟的分配器(BoundedOutOfOrdernessTimestampExtractor)
  8. nginx对listen端口的优化 -- 第一篇
  9. STM32——库函数版——超声波测距模块
  10. 线程池Executor框架解读
  11. c语言 16进制编辑器,十六进制编辑器(010editor)最新下载
  12. ubuntu服务器系统分区大小,服务器Ubuntu系统分区教程
  13. 拼多多关键词搜索接口,商品分类ID搜索商品列表接口,关键词搜索商品销量接口,拼多多销量API接口
  14. TP5.1升级到ThinkPHP6.0的实战教程看云版
  15. 【python】案例十 字符串中的逆天函数
  16. 产品数据管理系统框架与信息安全
  17. 设计模式(二) 访问者模式 Vistor
  18. python训练营 朋友圈点赞_python3 爬虫学习:自动给你心上人的微博点赞(三)
  19. Redis之事务的实现
  20. FME会员期刊(夏季版)

热门文章

  1. 物联网空开价格_北斗星C2物联网蒸箱集成灶618价格提前开抢,转发送豪礼
  2. 4200有linux版本么,如何检查Linux版本
  3. epel源mysql版本_centos网络yum源和epel源(2017可用首选)
  4. HTML表格(table)属性--左右(colspan)、上下(rowspan)合并、合并边框、位置 部分内容
  5. 二十五、JAVA多线程(四、生产者和消费者问题)
  6. ubuntu 12.10 安装php5.4.8
  7. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_4 mybatis中使用unpooled配置连接池的原理分析...
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第2节 maven的安装和仓库种类_04maven的安装...
  9. [.NET] 使用 .NET Framework 開發 ActiveX Control
  10. MySQL性能优化设置