struts2的基本使用
struts2在web中当作前端控制器,接收来自页面的请求,使用过滤器拦截模式对请求进行拦截并交给相应配置的action类处理。
所以在web中使用最重要的是struts2的核心过滤器StrutsPrepareAndExecuteFilter,需要配置在main/webapp/WEB-INF/web.xml中具体配置如下
<filter>
<filter-name>struts2</filter-name> <filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filterclass是struts2提供的一个过滤器,前面已经提到是基于类(class)拦截的,所以与springmvc不同,springmvc是基于方法(method)拦截的。换种更加直观的说法来说:struts2的filter拦截 在你每提交一个request时它为你创建一个相应的Class,其中Class即是编写的Action ,而springmvc基于方法 即每次request只会被Method拦截不需要重复Class。这也是为什么在struts2和spring整合中struts的Action必须是Prototype(原型)的原因,关乎线程安全,每次spring需要为Action创建不同的Bean供请求处理。 struts的配置:
配置文件应当放在classpath下
struts.xml 配置有关struts的:
这里想说一下 struts.xml中action中各参数 name=“UserAction_* 其中_* 是配合 method="{1}"一起使用的 代表进入_后面那个方法 如 UserAction_login 就是进入login方法 class必须是完整的类名,当然如果交给spring管理可以配置为spring的bean 名
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--下面这个配置只有在与spring整合才会使用 否则不用加-->
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--说明: name 用于在有多个struts配置文件时彼此区分 namespace:‘/’代表根目录 配置意义是本配置文件中包含的Action及其他配置 不影响其他namespace下的Action等(这代表你可以在另一个strut2.xml配置中namespace=‘/one’下配置同名的action)
extends :struts-default 是必须配置的 也可以extends自己的 但是很麻烦通常不要那样干
-->
<package name="dabai1" namespace="/" extends="struts-default">
<!-- 注册拦截器 拦截器栈 设置默认拦截器 -->
<interceptors>
<interceptor name="loginInterceptor"
class="com.dabai.mall.filter.LoginInterceptor"></interceptor>
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInterceptor">
<!--excludeMethods 指定某些方法不做拦截 很好理解 -->
<param name="excludeMethods">login,register,read</param>
</interceptor-ref>
<!--defaultStack: 是struts内置的众多拦截器 下面会有说明-->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- <default-action-ref name="loginStack"></default-action-ref> -->
<!-- 设置全局结果集 -->
<global-results>
<result name="toLogin" type="redirect">/login.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="asd" exception="asd">/error.jsp
</exception-mapping>
</global-exception-mappings>
<!-- 由于配置了struts.object value=spring -->
<action name="userAction_*" class="com.dabai.mall.action.UserAction" method="{1}" scope="prototype">
<!--这个login对应下面UserAction中return 的LOGIN 即对这个Action返回值="login"的请求 跳转到页面/login.jsp下 默认跳转方式是dispatcher 转发 可以在 name后配置 type=“redirect” 重定向
还可以在Action中跳转 action中的跳转有的方式会丢失传递参数有的则不会 具体可以参考后面关于struts的内容-->
<result name="login">/login.jsp</result>
</action>
</package>
</struts>
struts的默认拦截器栈及各个说明 可以只作了解 因为需要拦截器可以自己编写 通常会继承一个MethodFilterInterceptor类然后覆写其protected String doIntercept(ActionInvocation arg0)方法需要注意的是filter放行需要逐个放行,只有前一个filter进行了arg0.invoke()下一个拦截器才能开始工作相当于原生的chain.dofilter()
拦截器 |
名字 |
说明 |
Alias Interceptor |
alias |
在不同请求之间将请求参数在不同名字件转换,请求内容不变 |
Chaining Interceptor |
chain |
让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。 |
Checkbox Interceptor |
checkbox |
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。 |
Cookies Interceptor |
cookies |
使用配置的name,value来是指cookies |
Conversion Error Interceptor |
conversionError |
将错误从ActionContext中添加到Action的属性字段中。 |
Create Session Interceptor |
createSession |
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。 |
Debugging Interceptor |
debugging |
提供不同的调试用的页面来展现内部的数据状况。 |
Execute and Wait Interceptor |
execAndWait |
在后台执行Action,同时将用户带到一个中间的等待页面。 |
Exception Interceptor |
exception |
将异常定位到一个画面 |
File Upload Interceptor |
fileUpload |
提供文件上传功能 |
I18n Interceptor |
i18n |
记录用户选择的locale |
Logger Interceptor |
logger |
输出Action的名字 |
Message Store Interceptor |
store |
存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。 |
Model Driven Interceptor |
model-driven |
如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。 |
Scoped Model Driven |
scoped-model-driven |
如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。 |
Parameters Interceptor |
params |
将请求中的参数设置到Action中去。 |
Prepare Interceptor |
prepare |
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。 |
Scope Interceptor |
scope |
将Action状态存入session和application的简单方法。 |
Servlet Config Interceptor |
servletConfig |
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。 |
Static Parameters Interceptor |
staticParams |
从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。 |
Roles Interceptor |
roles |
确定用户是否具有JAAS指定的Role,否则不予执行。 |
Timer Interceptor |
timer |
输出Action执行的时间 |
Token Interceptor |
token |
通过Token来避免双击 |
Token Session Interceptor |
tokenSession |
和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中 |
Validation Interceptor |
validation |
使用action-validation.xml文件中定义的内容校验提交的数据。 |
Workflow Interceptor |
workflow |
调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面 |
Parameter Filter Interceptor |
N/A |
从参数列表中删除不必要的参数 |
Profiling Interceptor |
profiling |
通过参数激活profile |
下面是一个简单的自定义filter也是上述struts.xml中 com.dabai.mall.filter.LoginInterceptor这个类
public class LoginInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
User loginU=(User) ServletActionContext.getRequest().getSession().getAttribute("loginUser");
if(loginU==null){
return "login";
}
//拦截的业务功能记得在放行前进行!
return arg0.invoke();
}
}
下面再介绍一下Actio类
在编写struts的Acton类时可以选择实现Action接口 也可以继承ActionSupport类事实上ActionSupport类已经实现了Action接口 而且便于使用 这里建议继承自ActionSupport类 然后再实现一个ModelDriven<T>接口,因为方便,modelDriven的源码:
什么用途呢 就是getModel()用少写一个方法而已 但是却有一个好处 可以省得自己忘记写get方法。要知道前台传给后台数据转换时是通过属性驱动来进行的。下面是一个简单的Action
public Class UserAction extends ActionSupport implements ModelDriven<User>{
protected User user;
@Override
public User getUserel() {
return this.user;
}
public String login() {
System.out.println("userAction:-----");
//此处作业务逻辑处理
//这个LOGIN是Action接口中定义的静态常量等同于小写的字符串 便于实现struts.xml进行
//结果映射处理
return LOGIN;
} }
在url中输入localhost:8080/UserAction_login 就能进入login方法中 如果成功可在控制台看到打印了:userAction:----- 若是配置了页面‘login.jsp'页面会进行跳转
有关的jar包
tomcat包已经在运行环境中
struts2的基本使用的更多相关文章
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 菜鸟学Struts2——Interceptors
昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...
- 菜鸟学Struts2——零配置(Convention )
又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...
- 菜鸟学Struts2——Results
在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...
- 菜鸟学Struts2——Actions
在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 13、零配置Struts2开发
Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
随机推荐
- mssql sql server 系统更新,如何正确的增加表字段
转自: http://www.maomao365.com/?p=5277摘要:下文主要讲述,如何对"已上线的系统"中的表,增加新的字段. 系统部署脚本,增加列的方法:在系统脚本发布 ...
- Greenplum源码安装(CentOS 7)
最近在看GP,在安装集群的时候遇到了很多问题,在此记录下来. 目录 1 安装环境及软件版本 2 安装准备工作 2.1 修改hosts(所有机器) 2.2 修改系统内核配置(所有机器) 2.3 关闭 ...
- Python3 socket网络编程(一)
Socket的定义 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建 ...
- Linux 小知识翻译 - 「代理服务器」
这回聊聊「代理服务器」. 在公司里,不通过代理服务器无法连接互联网的,由于代理服务器的原因,有些服务的使用是受到限制的. 有人可能会觉得为什么会存在这种东西?(这里指代理服务器) Proxy本来的意思 ...
- TestFlight的使用--再也不用担心环境打错了
转赞请注明出处:http://www.cnblogs.com/zhanggui/p/7039651.html 一.前言 在iOS开发过程中,难免会遇到各种Bug.因此你会去解决所有的Bug,然后提交到 ...
- 在Linux上搭建VisualSVN Server(svn服务端)
一.检查是否安装了低版本的SVN # rpm -qa | grep subversion 如果已安装SVN,则会返回版本信息.这时需要卸载旧版本的SVN. 卸载旧版本SVN # yum remove ...
- PHP与Nginx之间的运行机制以及原理
一.普及Nginx与Php-fpm相关知识点 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服 ...
- ssm框架的整合搭建(一)
一个转行菜鸟半年多工作的开始学习历程............ 我是自学,也是我的记录,我学习的见证,如果你有幸看见,不要吐槽,不足之处请指点,相互学习,谢谢!! 请一起共勉!!!!!!!! 使用技术: ...
- ubantu搭建oj——第一天(6.11)
oj第一份作业: 按照DMOJ的文档将代码搬运到ubantu上 sudo apt install git gcc g++ make python-dev libxml2-dev libxslt1-de ...
- Arduino 操作OLED
https://item.taobao.com/item.htm?_u=n1qf7bf5beef&id=562158712128 1.模块尺寸:35(L)*31(W)mm 2.电源电压:2.8 ...