通过代码实例跟我学Struts2框架从入门到精通——采用Struts2的多配置文件以适应团队迭代开发
通过代码实例跟我学Struts2框架从入门到精通——struts.properties配置文件的配置项目内容详解
1.1通过代码实例跟我学Struts2框架从入门到精通——struts.properties配置文件的配置项目内容详解1、struts.configuration该属性指定加载Struts 2配置文件的配置文件管理器。
该属性的默认值是org.apache.Struts2.config.DefaultConfiguration,这是Struts 2默认的配置文件管理器。
如果需要实现自己的配置管理器,开发者则可以实现一个实现Configuration接口的类,该类可以自己加载Struts 2配置文件。
2、struts.locale指定Web应用的默认Locale。
3、struts.i18n.encoding指定Web应用的默认编码集。
该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312。
提示:当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法。
4、struts.objectFactory指定Struts 2默认的ObjectFactory Bean,该属性默认值是spring。
5、struts.objectFactory.spring.autoWrite指定Spring框架的自动装配模式,该属性的默认值是name,即默认根据Bean的name 属性自动装配。
6、eClassCache0">该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false两个属性值,它的默认值是true。
通常不建议修改该属性值。
7、struts.objectTypeDeterminer该属性指定Struts 2的类型检测机制,通常支持tiger和notiger两个属性值。
8、struts.multipart.parser该属性指定处理multipart/form-data的MIME类型(文件上传)请求的框架,该属性支持cos、pell和jakarta等属性值,即分别对应使用cos的文件上传框架、pell上传及common-fileupload文件上传框架。
【java开发系列】——struts2简单入门示例
【java开发系列】——struts2简单⼊门⽰例上篇推荐:前⾔ 最近正好有时间总结⼀下,过去的知识历程,虽说东西都是⼊门级的,⾼⼿肯定是不屑⼀顾了,但是对于初次涉猎的⼩⽩们,还是可以提供点参考的。
struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。
过去,我们⽤jsp和servlet搭配,实现展现时,⼤体的过程是: 1 jsp触发action 2 servlet接受action,交给后台class处理 3 后台class跳转到其他的jsp,实现数据展现 现在有了struts2,实现过程变为 1 jsp出发action 2 struts2拦截请求,调⽤后台action 3 action返回结果,由不同的jsp展现数据 下⾯我们看下,需要的jar包 前⾯两个是apache commons的jar包,暂且忽略 freemarker提供了另⼀种展现⽅式 ognl提供了OGNL表达式 struts2-core提供struts2核⼼包 xwork-core由于struts2很多事基于webwork的,因此也需要这个的核⼼包 我们提供了三个jsp登陆界⾯login.jsp1 <%@ page language="java" contentType="text/html; charset=GBK"2 pageEncoding="GBK"%>3 <%@taglib prefix="s" uri="/struts-tags"%>4<html>5<head>6<meta http-equiv="Content-Type" content="text/html; charset=GBK">7<title><s:text name="loginPage"/></title>8</head>9<body>10<s:form action="login">11<s:textfield name="username" key="user"/>12<s:textfield name="password" key="pass"/>13<s:submit key="login"/>14</s:form>15</body>16</html>登陆成功界⾯welcome.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="succPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><s:text name="succTip"><s:param>${er}</s:param></s:text><br/></body></html>登陆失败界⾯error.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="errorPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><body><s:text name="failTip"/></body></html> 当login.jsp触发action时,就会向后抬发送login.action的请求,这个请求被后台拦截,交给struts.xml中配置的action处理1<?xml version="1.0" encoding="GBK"?>2<!DOCTYPE struts PUBLIC3 "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"4 "/dtds/struts-2.1.7.dtd">5<struts>6<!-- 指定全局国际化资源⽂件 -->7<constant name="struts.custom.i18n.resources" value="mess"/>8<!-- 指定国际化编码所使⽤的字符集 -->9<constant name="struts.i18n.encoding" value="GBK"/>10<!-- 所有的Action定义都应该放在package下 -->11<package name="test" extends="struts-default">12<action name="login" class="com.test.action.LoginAction">13<result name="error">/error.jsp</result>14<result name="success">/welcome.jsp</result>15</action>16</package>17</struts>下⾯是LoginAction的代码,可以看到成功登陆后,程序把username写⼊session中。
通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的OGNL相关技术及应用实例
1.1通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的OGNL相关技术及应用实例1.1.1Struts 2中的OGNL1、Struts 2中的表达式语言(1)Struts 2支持以下几种表达式语言1)OGNL(Object-Graph Navigation Language),可以方便地操作对象属性(使表达式与java对象中的getter和setter属性绑定,且一个OGNL表达式可以进行存和取两方面的操作)的开源表达式语言;2)JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;3)Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;4)Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。
应用表达式语言主要有以下几大好处:1)避免采用Java脚本之类的语句,使页面更简洁;2)支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;3)简单明了地表达代码逻辑,比使用代码更可读与便于维护。
(2)Struts 2默认的表达式语言是OGNLOGNL是一个用来获取和设置JAVA对象的属性的表达式语言。
通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法。
使用它的基本原因是它相对其它表达式语言具有下面几大优势:1)支持对象方法调用,如xxx.doSomeSpecial();2)支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名]例如:@ng.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;支持赋值操作和表达式串联如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;●访问OGNL上下文(OGNL context)和ActionContext;●操作集合对象。
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架的拦截器组件技术及应用
(2)在struts-default.xml中定义的默认拦默认拦截器timer组件的示例
将在控制台中出现下面的结果
11、应用了用户自定义的拦截器组件后有可能存在的问题
(1)解决的基本方法 不仅引用自定义的拦截器组件,也对默认的 defaultStack进行引用。 (2)请见下面的示例
(4)编程自定义实 现特定功能的拦截 器,只需要实现拦 截器接口 Interceptor
5、Struts 2框架中的各种形式的拦截器的主要作用
6、实现Interceptor接口创建自定义拦截器 (1)Interceptor接口提供有如下的三个方法
(2)使用init方法可以给拦截器类做必要的初始化操作 ( 3 )应用 destroy 方法可以在拦截器被垃圾回收之前调用, 用来回收init方法初始化的资源。 7 、 intercept() 为拦截器的核心方法,实现具体的拦截功 能
(1)Web Filter和Servlet相互配合、协同工作 Servlet 完成业务功能调度、 Filter 实现系统服务;但 Web Filter 依赖 Servlet 容器并由 Servlet 容器进行生命 周期的管理 (2) Struts2中的拦截器独立于Servlet容器 (3)拦截器是用Java中的“动态代理”和“反射”技术实 现的,并由Struts2的运行时系统程序调度和管理。
(3)在struts.xml文件中定义和引用该拦截器组件
(4)测试该拦截器组件
(5)注意拦截器只能拦截对Action的访问,不能防止用户非 法直接访问的*.jsp页面文件 为此,可以应用Filter组件来控制对*.jsp页面的访问。
10、引用Struts 2框架中的默认拦截器
(1)在struts-default.xml中已经配置了Struts 2框架中 的默认拦截器
J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第2部分)
第12章Struts2框架技术及应用(第2/4部分)1.1.1Struts2框架各种核心配置文件1、应用Struts2框架时所涉及的各种配置文件在应用Struts2框架时,开发人员需要涉及的配置文件主要有web.xml,struts.xml,struts.properties,struts-default.xml,velocity.properties,struts-default.vm。
当然,其中web.xml和struts.xml是必须要应用的,其它的配置文件可以根据应用的需要进行选择。
这些配置文件的主要功能如下:1)web.xml:包含本应用项目中所有必须的框架组件的web部署描述符的定义和配置(请参考【例12-1】中有关FilterDispatcher组件的配置项目)。
2)struts.xml:主要涉及对result/view类型(该Action处理结果与视图资源之间的映射关系)、action映射、拦截器等与某个Action组件的实现类(代表某个特定的应用)密切相关的Struts2框架中的配置项目。
3)struts.properties:配置在应用Struts2框架时的一些全局工作参数的属性项目。
4)struts-default.xml:该文件是应该被包含在struts.xml中的系统缺省配置项目。
5)velocity.properties:对Velocity框架中所需要的配置项目进行重写的文件。
6)struts-default.vm:相对于Velocity框架中的缺省配置文件。
2、Struts2框架默认的核心系统配置项目及配置文件为了简化Struts2框架在应用开发时的各种配置工作,在struts-default.xml和struts-plugin.xml文件中为开发人员提供了许多默认的系统配置项目、并提供了相应的缺省设置值——包括结果类型(Result Types)、拦截器(Interceptors)、拦截器栈(Iinterceptor Stacks)和包(Packages)等项目,也含有Web应用系统的执行环境有关的配置信息。
Struts2详细实例教程
Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
通过代码实例跟我学Struts2框架从入门到精通——应用Struts2框架时所需要的系统库文件
1.1通过代码实例跟我学Struts2框架从入门到精通——应用Struts2框架时所需要的系统库文件1.1.1Apache官方网站对Struts2框架的主要技术特性介绍1、开发方面(1)容易上手–从教程和模版程序或者Maven原型可以很容易的开发出新项目。
(2)改进的设计–清晰的代码设计对应着独立于HTTP的框架接口。
(3)增强的标签(Tag) - 使用样式表驱动的表单标签以及所提供的标签可以减少编码量。
(4)有状态的复选框(Checkbox) - 避免了特殊的处理代码,职能复选框能感知自己的状态何时被切换。
(5)灵活的取消按钮–取消时直接转向另一个操作(action)。
(6)最好的AJAX 支持–通过使用和标准Struts标签观感一致的 AJAX 标签,可以增加交互性和灵活性。
(7)方便的 Spring 集成–使用Spring向 Action中注入依赖关系,无需编写额外的连接代码或者其它配置。
(同时支持Plexus?)(8)增强的表示层展示–可以将处理结果以JasperReports, JFreeChart, Action 链, 或者文件下载的方式展示。
(9)POJO 表单–不需要ActionForm! 可以使用任何JavaBean 来捕获输入或者直接将属性设置到Action类上。
可以同时使用二进制和字符串类型的属性!(10)POJO Action –使用任何类作为Action 类–甚至接口也是可选的!Struts2是一个标准的Command模式框架实现,并且完全从web层脱离出来。
Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control 依赖倒转控制)容器等。
2、发布方面(1)方便的插件机制–添加JAR文件即可添加框架扩展。
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的业务请求处理器Action组件相关的应用技术
7、为什么要将Action类实现Action接口 (1)理解实现接口的基本要求 表面上实现Struts 2的Action 接口没有太大的好处, 仅会污染系统中的Action实现类! (2)实现Action接口可以帮助开发者达到: 更好地实现Action类和强制提供execute()方法 可以“简化”和“规范” execute 方法的返回值、并可 以使execute方法的返回值标准化。
(3)什么场合下需要继承ActionSupport类 因此,如果在应用系统中需要上面的各种应用功能要 求,最好采用继承ActionSupport这个适配器类。
(4)继承ActionSupport类的Action组件类的代码示例
目前尽管继承了ActionSupport类,还没有真正体验到 它的优点!请继续学习…
这些符号常量的含义,可以参考Struts2框架中的 API帮助文档中的说明
4、Struts 2框架中的Action组件类的代码实现示例 但该Action类是采用继承于ActionSupport基类,而 不是纯POJO的实现。
5、Action类可以采用下面的多种实现形式 (1)POJO类——但不推荐采用这样的方式 (2)实现Action接口 (3)继承ActionSupport类
但原来的 Struts 中的 Action 程序类则必须要耦合系统 类 。
(2)Action组件类的返回值是一个轻量级的“字符串”对象 而不是象 Struts 框架中返回“重量级”的 ActionForward 对 象。 当然,为了规范 Action 类的方法返回值以提高代码的 可 读 性 ,在 接 口 com.opensymphony.xwork2.Action 中 定 义 了许多标准的符号常量 ——比如:SUCCESS、ERROR、INPUT、LOGIN和NONE等。
Struts2,Spring,Hibernate整合步骤及一个简单实例
Struts2,Spring,Hibernate整合步骤(自己笔记)配步骤的例子一个:请参看:Struts2,Spring,Hibernate整合例子一个1.建立web项目2.在web.xml 配置 struts2,和 spring ,<!-- 配置Struts2 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher(struts的过滤器)</filter-class></filter><filter-mapping>(加载struts2)<filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener(spring监听器)</listener-class></listener><!-- 查找spring配置文件 --><context-param>(程序从此处开始加载.xml 文件,并执行)<param-name>contextConfigLocation</param-name><param-value>classpath*:*.xml</param-value></context-param>3.在src根目录下创建struts.xml文件<include file="struts-default.xml"/>固定格式,用到此包4.在src根目录创建hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "/hibernate-configura tion-3.0.dtd"><hibernate-configuration><session-factory><!-- 基本配置 --><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="show_sql">false</property><property name="format_sql">true</property><propertyname="e_reflection_optimizer">true</property><property name="max_fetch_depth">2</property><property name="default_batch_fetch_size">8</property><property name="jdbc.batch_size">20</property></session-factory></hibernate-configuration>系统给的文件只需要拷贝,都是一些数据库库的基本配置5.在src根目录拷贝struts.properties文件struts.objectFactory = spring 该项是告诉系统用spring来控制hibernate和Actionstruts.action.extension=action 告诉系统访问时以什么结尾。
java struts2入门学习实例--使用struts2快速实现多个文件上传
一、错误提示信息配置昨天说到更改默认错误配置信息,我测试很多遍,一直都不对。
下面贴出来,待以后有好方法了再补充吧。
首先新建一个properties文件,这里命名为testupload.properties,内容为:rge=\u6587\u4EF6\u592A\u5927{0} "{1}" "{2}" {3}struts.messages.error.content.type.not.allowed=\u6587\u4EF6\u7C7B\u578B\u4E0D \u5141\u8BB8!{0} "{1}" "{2}" {3}struts.messages.error.file.extension.not.allowed=\u4E0D\u5141\u8BB8\u7684\u6269 \u5C55\u540D!{0} "{1}" "{2}" {3}这里将默认提示信息改为中文的。
upload.xml中内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><!-- 对上传文件总大小进行设置--><constant name="struts.multipart.maxSize"value="20971520"></constant><!-- 错误信息提示--><constant name="struts.custom.i18n.resources"value="testupload"/><package name="upload"extends="struts-default"><action name="UploadAction"class="action.UploadAction"method="up loadMethod"><result name="success"type="dispatcher">/WEB-INF/upload_success.jsp</result><result name="input"type="dispatcher">upload.jsp</result><!-- 对系统的拦截器进行设置--><interceptor-ref name="fileUpload"><!-- 对单个上传文件的大小进行设置,5M --><param name="maximumSize">5242880</param><!-- 对允许的文件扩展名进行设置,这里以英文逗号隔开--><param name="allowedExtensions">.txt,.xml</param><!-- 对允许的文件类型进行设置,这里以英文逗号进行隔开--><param name="allowedTypes">text/plain,text/xml</param> </interceptor-ref><!-- 显示引用默认的拦截器--><interceptor-ref name="defaultStack"></interceptor-ref></action></package></struts>二、多个文件上传只需要更改upload.jsp中的部分内容即可:<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags"prefix="s"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http: ///TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><s:form action="UploadAction"enctype="multipart/form-data"method="POS T"><s:textfield label="上传用户"name="username"/><s:file label="上传文件"name="upload"/><s:file label="上传文件"name="upload"/><s:file label="上传文件"name="upload"/><s:submit value="提交"/></s:form></body></html>结果如下所示:也可以将UploadAction.java中的file改为数组类型的,如下所示:package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletContext;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/*** @ClassName: UploadAction* @Description: 文件上传* @author: amosli* @email:amosli@* @date Jan 14, 2014 1:50:28 AM*/public class UploadAction extends ActionSupport {private static final long serialVersionUID = -8920466592471253212L;private String username;// 用户名private String[] uploadContentType;// 上传文件的类型,(Fileupload拦截器传入的参数)private File[] upload;// 上传的文件,(Fileupload拦截器传入的参数)private String[] uploadFileName;// 上传文件的真实文件名,(Fileupload拦截器传入的参数)public void setUsername(String username) {ername =username;}public String[] getUploadContentType() {return uploadContentType;}public void setUploadContentType(String[] uploadContentType) { this.uploadContentType =uploadContentType;}public File[] getUpload() {return upload;}public void setUpload(File[] upload) {this.upload =upload;}public String[] getUploadFileName() {return uploadFileName;}public void setUploadFileName(String[] uploadFileName) {this.uploadFileName =uploadFileName;}public String getUsername() {return username;}public String uploadMethod() throws Exception {ServletContext context =ServletActionContext.getServletContext();String real_path = context.getRealPath("/WEB-INF/upload/");for(int i = 0; i < upload.length; i++) {InputStream inputStream = new FileInputStream(upload[i]);OutputStream outputStream = new FileOutputStream(real_path + " /" +uploadFileName);byte[] b = new byte[1024];int len = 0;while((len = inputStream.read(b)) > 0) {outputStream.write(b, 0, len);}// 关闭流inputStream.close();outputStream.close();// 删除tmp文件,最好是用tyrcatch finally进行删除// upload[i].delete();}return SUCCESS;}}这里没有立马删除是想做个演示,查看一下缓存文件空间生成了几个。
struts2入门实例教程详解
Struts2教程教程1:在本教程中使用的工具和程序库的版本如下:在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:http://localhost:8080/struts2/index.jsp由于MyEclipse6目前并不支持Struts2,所以我们需要到去下载Struts2安装包。
要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。
struts2-core-2.0.11.1.jarxwork-2.0.4.jarcommons-logging-1.0.4.jarfreemarker-2.3.8.jarognl-2.6.11.jarStruts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。
Struts2实际上是在Webwork基础上构建起来的MVC框架。
我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。
既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。
如果大家使用过Struts1.x,应该对建立基于Struts1.x的Web程序的基本步骤非常清楚。
让我们先来回顾一下建立基于Struts1.x的Web程序的基本步骤。
1. 安装Struts。
由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这个Servlet。
2. 编写Action类(一般从org.apache.struts.action.Action类继承)。
3. 编写ActionForm类(一般从org.apache.struts.action.ActionForm类继承),这一步不是必须的,如果要接收客户端提交的数据,需要执行这一步。
struts2 multipartrequest用法
struts2 multipartrequest用法Struts2 MultipartRequest 使用方法:Struts2 是一个用于构建 Java Web 应用的开源框架,它提供了许多功能和工具来简化开发过程。
其中之一就是 MultipartRequest,它是用于处理涉及文件上传的请求的。
要使用 Struts2 的 MultipartRequest,首先需要在 Struts2 的配置文件中进行相应的配置。
1. 配置 web.xml 文件:在 web.xml 文件中,将 Struts2 的过滤器配置为请求的第一个过滤器。
```xml<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>```2. 配置 struts.xml 文件:在 struts.xml 文件中,添加对文件上传的支持。
示例如下:```xml<interceptors><!-- 其他拦截器配置 --><interceptor name="fileUpload"class="org.apache.struts2.interceptor.FileUploadInterceptor" /></interceptors><action name="uploadAction" class="com.example.UploadAction"><interceptor-ref name="fileUpload" /><interceptor-ref name="defaultStack" /><result>/success.jsp</result></action>```在上述示例中,我们定义了一个名为 "uploadAction" 的 action,使用了fileUpload 拦截器和 defaultStack 拦截器栈。
struts2简单示例
struts2简单⽰例今天写⼀个struts2的例⼦,⽬的是为了让⼤家明⽩struts2的基本流程,其实框架没有⼤家想象的那么难,说⽩了struts2的本质就是⼀个⼤的Servlet,即原本需要提交到Servlet处理的部分现在通过配置⽂件将其交给普通的Class类进⾏处理。
⾸先新建⼀个javaWeb项⽬,然后把struts2所依赖的包导⼊到lib下(可以百度⼀下也可以直接到官⽹上下载),然后在web.xml中对struts2进⾏配置,添加的内容如下:1<filter>2<filter-name>struts2</filter-name>3<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>4</filter>5<filter-mapping>6<filter-name>struts2</filter-name>7<url-pattern>/*</url-pattern>8</filter-mapping>在index.jsp中写如下代码:1<form method="post" action="testAction">2名称:<input type="text" name="name"/>3<input type="submit" value="提交"/>4</form>接下来是写struts的配置⽂件struts.xml,内容如下:1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"3 "/dtds/struts-2.1.dtd">4<struts>5<package name="testaction" namespace="/" extends="struts-default">6<action name="testAction" class="com.struts.action.TestAction">7<result name="success">/success.jsp</result>8<result name="error">/index.jsp</result>9</action>10</package>11</struts>其中⼀个action对应⼀个响应,在index.jsp中action="testAction"所以此处action的name="testAction"这是⼀⼀对应的关系。
通过实例跟我学Struts2框架从入门到精通——如何校验Struts2框架中的Action类中的某个自定义方法的应用实例
1.1通过代码实例跟我学Struts2框架从入门到精通——如何校验Struts2框架中的Action类中的某个自定义方法的应用实例1.1.1校验Struts2框架中的Action类中的某个自定义方法的应用实例如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。
Struts2也支持校验特定方法的validateXxx()方法。
其中的“XXX”代表Action类中的方法名称。
因为validate()方法会处理Action类中的所有逻辑方法。
而如果只需要对其中的单个或者部分逻辑方法进行验证,那么就需要重写validateXxx()方法。
validateXxx()使用了反射,相对来说性能稍差,而validate()则是通过接口com.opensymphony.xwork2.Validateable调用。
1、在Action类中增加另一个自定义的方法doUserLogin2、再添加doUserRegister方法,其中的代码与doUserLogin()代码相同public String doUserRegister(){ //在该方法中进行用户注册的功能实现boolean returnResult=getUserName().equals("yang1234")&&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");// resultMessage =getUserName()+" "+ this.getText("strutsweb.login.actionpackage.failure");}return this.SUCCESS;}3、在userLoginI18n.jsp页面中指示该方法的名称<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel!doUse rLogin.action" method="post" >或者<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel! doUserRegister.action" method="post" >4、将Action类中的validate()方法改名为validate DoUserLogin()(注意:其中的doUserLogin中的“d”要大写)最终的代码如下:package com.px1987.sshwebcrm.action;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import erInfoActionForm;public class I18nUserInfoManageActionModel extends ActionSupport { private String userName=null;private String userPassWord=null;private String verifyCodeDigit=null;private int type_User_Admin;private String resultMessage;private UserInfoActionForm oneUserInfo=null;public I18nUserInfoManageActionModel() {}public String getResultMessage() {return resultMessage;}public void setResultMessage(String resultMessage) {this.resultMessage = resultMessage;}public String execute(){ //在该方法中进行用户登陆的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public String doUserLogin(){ //在该方法中进行用户登陆的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public String doUserRegister(){ //在该方法中进行用户注册的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public void validate DoUserLogin() { //它能够验证 doUserLogin() if(getUserName()==null||getUserName().equals("")){addFieldError("erName",getText("erName.required"));}if(getUserPassWord()==null||getUserPassWord().equals("")){addFieldError("erPassWord",getText("erPassWord.required"));}if(getUserPassWord().length() <4){addFieldError("userPassWord.length",getText("erPassWord.length"));}}public void validate DoUserRegister() { //它能够验证 doUserRegister() if(getUserName()==null||getUserName().equals("")){addFieldError("erName",getText("erName.required"));}if(getUserPassWord()==null||getUserPassWord().equals("")){ addFieldError("erPassWord",getText("erPassWord.required"));}if(getUserPassWord().length() <4){addFieldError("userPassWord.length",getText("erPassWord.length"));}}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserPassWord() {return userPassWord;}public void setUserPassWord(String userPassWord) {erPassWord = userPassWord;}public String getVerifyCodeDigit() {return verifyCodeDigit;}public void setVerifyCodeDigit(String verifyCodeDigit) {this.verifyCodeDigit = verifyCodeDigit;}public int getType_User_Admin() {return type_User_Admin;}public void setType_User_Admin(int type_User_Admin) {this.type_User_Admin = type_User_Admin;}}4、再测试其效果 http://127.0.0.1:8080/sshwebcrm/userManage/userLoginI18n.jsp保证其中的请求是向doUserLogin方法请求<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel!doUse rLogin.action" method="post" >也可以将execute方法删除仍然会出现上面的错误!模拟用户注册功能<formaction="${pageContext.request.contextPath}/userInfoAction!doUserRegister.actio n" method="post" >然后再进行测试该方法的主要缺点——不灵活!比如对验证的要求发生变化(增加对新的数据的检查),此时必须修改验证程序!使得“验证程序”和对应的“表单”紧密关联。
Struts2入门及配置(许业生)
Struts2入门及环境配置虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。
Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。
从某种程度上来讲,Struts2没有继承Struts 1的血统,而是继承WebWork的血统。
或者说,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。
因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。
Apache Struts2是一个优雅的,可扩展的JAVA EE web框架。
框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Apache Struts 2即是之前大家所熟知的WebWork 2。
在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2Struts 2 英文官方网站:下面我们来用一个简单的实例来学习一下Struts2,大家都知道MyEclipse集成开发环境中对Struts1有了很好的支持,我们可以用MyEclipse就可以给项目添加Struts1支持,但是Struts2目前就没有什么好的工具可以直接给项目添加Struts2支持了,我们必须全部手动添加了,其实对与初学者我建议不要用工具进行生产,自己手动配置一下会让你对一个新技术有很好的理解。
先不多说了,下面我们开始吧!新建一个web项目,项目名称就叫Struts2,项目建好了,我们该给项目添加Struts2支持了吧,要引入很多jar包,这些jar包从哪里来呢!没关系,下面是目前最新版本Struts2.1.6官方下载地址:下载完毕后,我们将你下载的zip格式的文件解压,解压完了找到解压包里面的lib文件夹,里面包含了Struts2所有的jar文件。
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的各种核心系统配置文件的应用技术
8、struts.properties文件的应用示例 ---解决Struts2中的表单提交时的中文乱码问题
9、体验Struts2对多配置文件的支持
将struts.xml分离为两个不同的配置文件:其中在 struts.xml中存放全局配置定义,而在struts-XXX.xml中存 放与某个模块有关的配置定义——满足团队开发。
努力学习以实现自己的人生理想和目标
1、子曰:“学而不思则罔,思而不学则殆。” “学而时习之”
2、子曰:“知之者不如好之者,好之者不如乐之者”
3、子曰:“三人行,必有我师焉” 4、子曰:“我非生而知之者,好古,敏以求之者也” 5、师者:“传道、授业和解惑”
Struts2框架中的各种核心系统 配置文件的应用技术
Struts2框架中的各种核心系统 配置文件的应用技术
The Emphases in Teaching Materials 在本讲重点了解如下知识点 应用Struts2时所涉及的各种配置文件 默认的核心系统配置项目及配置文件 核心配置文件struts.xml及应用 struts.properties文件及应用 struts.properties常用属性及含义
1、应用Struts2框架时所涉及的各种配置文件 (1)主要的配置文件
(2)这些配置文件的主要功能
2、Struts2框架默认的核心系统配置项目及配置文件
在Struts2的核心系统包文件中包含有struts-default.xml的内容
3、Struts2框架中的核心配置文件struts.xml及应用 (1)Struts2框架中的核心配置文件struts.xml
(2)Struts 2框架支持多种不同的表示层的实现技术
(3)采用Velocity模板技术时的<result>标签定义示例
通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架中..
1.1如何应用Struts 2框架中的CheckboxInterceptor和prepare默认拦截器的应用实例1.1.1Struts 2框架中的CheckboxInterceptor默认拦截器的应用示例1、主要的功能此拦截器是针对checkbox表单控件的,当提交的表单里有checkbox时,默认情况下,如果没选中,提交的值是null;如果选中,提交的值是"true"。
CheckboxInterceptor的作用是当没选中checkbox时,提交一个指定的值,而不是null。
2、实现的原理你需要在页面中为每个checkbox指定一个名字为"__checkbox_"+checkbox名的hidden 控件,例如,如果表单有一个名为vip的checkbox,就需要一个名为__checkbox_vip的hidden。
默认的,这个事情不需要你来做,因为Struts2在checkbox的simple模板中已经为你做了,即下面这条语句:<input type="hidden" name="__checkbox_${?html}"value="${parameters.fieldV alue?html}"/>因此CheckboxInterceptor实现原理如下:当提交表单后,CheckboxInterceptor会在请求参数里查找名字以"__checkbox_"开头的参数,如果找到,继续在请求参数里找对应的checkbox参数,如果没找到(表示没有选中该checkbox),就给checkbox参数一个指定的值,默认的,这个值为"false"。
3、可以在struts.xml文件中为某个Action引用该拦截器时设置改变这个值如下示例是将其值改成"no":<interceptor-ref name="checkbox"><param name="uncheckedValue">no</param></interceptor-ref>默认情况下,请求每个action都会调用CheckboxInterceptor,因为在Struts2定义的默认拦截器defaultStack中包含了它。
通过实例跟我学Struts2框架从入门到精通——如何实现在Struts2框架的Action类中访问Servlet API中的对象
要获得上述对象,关键 Struts 2.0 中 com.opensymphony.xwork2.ActionContext 类。我们 可 以 通 过 它 的 静 态 方 法 getContext() 获 取 当 前 Action 的 上 下 文 对 象 。 另 外 , org.apache.struts2.ServletActionContext 作为辅助类(Helper Class),可以帮助您快捷地获得 这几个对象。
Map application = (Map) ActionContext.getContext().get("application"); application.put("myId",myProp);
Map session = (Map) ActionContext.getContext().get("session"); session.put("myId", myProp);
(ServletContext) ActionContext.getContext().get(StrutsStatics.SERVLET_CONTEXT); 也可以获得转换后的 Map 集合对象:
Map attr = (Map) ActionContext.getContext().get(4;myId",myProp);
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest)
struts2框架快速入门小案例
struts2框架快速⼊门⼩案例struts2快速⼊门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导⼊jar包 struts2的⽬录结构: apps: 例⼦程序 docs:⽂档 lib:struts2框架所应⽤的jar以及插件包 src:源代码 core 它是struts2的源代码 xwork-core struts2底层使⽤了xwork,xwork的源代码 注意:在struts2开发,⼀般情况下最少导⼊的jar包,去apps下的struts2-blank⽰例程序中copy 2.创建index.jsp页⾯ 3.对struts2框架进⾏配置 1.web.xml⽂件中配置前端控制器(核⼼控制器)-----就是⼀个Filter(⽬的:是为了让struts2框架可以运⾏。
) <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> 2.在src下(对应Tomcat的classes下)创建⼀个struts.xml配置⽂件 ,这个是struts2框架配置⽂件(⽬的:是为了struts2框架流程可以执⾏。
) 4.创建⼀个HelloAction类//要求,在HelloAction类中创建⼀个返回值是String类型的⽅法,注意,⽆参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1通过代码实例跟我学Struts2框架从入门到精通——采用Struts2的多配置文件以适应团队迭代开发
1、将struts.xml配置文件分离为多个不同的子配置文件
2、在项目中再添加一个配置文件struts-other.xml
3、设计该配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd">
<struts>
<include file="struts-default.xml"/>
<package name="userInfoPackage" extends="struts-default">
<global-results>
<result name="success">/userManage/loginSuccess.jsp</result>
</global-results>
<action name="userInfoAction" class="erInfoAction" >
</action>
<action name="userInfoManageActionModel"
class="erInfoManageActionModel" >
</action>
</package>
</struts>
4、修改原来的struts.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd">
<struts>
<include file="struts-default.xml"/>
<include file="struts-other.xml"/>
<package name="userInfoInterceptorPackage" extends="struts-default">
<interceptors>
<interceptor name="authorizedUserInterceptor" class="com.px1987.sshwebcrm.interceptor.AuthorizedUserInterceptor"></interceptor> <interceptor name="logInfoInterceptor" class="com.px1987.sshwebcrm.interceptor.LogInfoInterceptor"></interceptor>
<interceptor-stack name="SSHWebAppStack">
<interceptor-ref name="authorizedUserInterceptor"></interceptor-ref>
<interceptor-ref name="logInfoInterceptor"></interceptor-ref>
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="SSHWebAppStack">
</default-interceptor-ref>
<global-results>
<result name="success">/userManage/loginSuccess.jsp</result>
<result name="login">/userManage/modelUserLogin.jsp</result>
</global-results>
<action method="doUpdateUser"
name="updateUserInfo" class="erInfoAction" > </action>
<action method="doDeleteUser"
name="deleteUserInfo" class="erInfoAction" > </action>
</package>
</struts>
5、再测试现在的配置效果
因此,对系统而言是一个配置文件。