Struts2简单示例
struts2 global-allowed-methods的用法

struts2 global-allowed-methods的用法Struts2中的`global-allowed-methods`是一个全局配置属性,用于限制或允许用户使用的HTTP方法。
该属性可以在`struts.xml`配置文件中的`<constant>`元素中设置。
以下是`global-allowed-methods`属性的用法示例:1. 允许所有的HTTP方法:```xml<constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.mapper.allowMethods" value="*" />```2. 允许GET和POST方法:```xml<constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.mapper.allowMethods"value="GET,POST" />```3. 禁止所有的HTTP方法:```xml<constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.mapper.allowMethods" value="" />```在上述示例中,`struts.enable.DynamicMethodInvocation`属性设置为`false`,表示禁用动态方法调用。
struts2的execute() 方法

struts2的execute() 方法(实用版4篇)《struts2的execute() 方法》篇1在Struts 2 中,execute() 方法是Action 的核心方法,它负责处理HTTP 请求并返回一个Action 的执行结果。
当Struts 2 接收到一个HTTP 请求时,它会查找并实例化指定的Action 类,然后调用其execute() 方法。
execute() 方法的参数包括:- HttpServletRequest 请求对象- HttpServletResponse 响应对象- ActionContext 动作上下文对象execute() 方法的返回值通常是Action 的一个结果类型,例如String、Map、List 等。
在Struts 2 中,结果类型可以通过在Action 类上添加注解来指定,例如:```java@Result(type = "json")public String handle() {//...}```如果execute() 方法返回一个结果类型为String 类型的字符串,那么Struts 2 将将其作为HTML 页面的内容返回给客户端。
如果返回一个Map 类型的结果,那么Struts 2 将将其作为JSON 数据返回给客户端。
如果返回一个List 类型的结果,那么Struts 2 将将其作为一个表格返回给客户端。
《struts2的execute() 方法》篇2在Struts 2 中,execute() 方法是Action 类的核心方法,它是Action 处理请求的关键步骤。
当请求进入Action 类后,首先会调用execute() 方法。
execute() 方法负责处理用户的请求,执行相应的业务逻辑,并将处理结果返回给客户端。
Struts 2 的execute() 方法的参数包括:1. HttpServletRequest request:当前请求的ServletRequest 对象。
struts2-convention-plugin_注解使用说明_概述及解释说明

struts2-convention-plugin 注解使用说明概述及解释说明1. 引言1.1 概述在现代的Web开发中,Struts2作为一个成熟稳定的Java Web框架,在业界得到广泛应用和认可。
而struts2-convention-plugin则是Struts2框架中一个重要的插件,它通过引入注解的方式来简化配置文件,并提供了一种更便捷、高效的开发方式。
1.2 文章结构本文将详细介绍struts2-convention-plugin的注解使用说明,并以概述、注解说明、使用示例等部分来逐步讲解。
接着,我们将对其进行解释说明,包括与传统struts.xml配置方式的比较、使用时需要注意的事项以及实际应用案例。
最后,我们将总结文章要点并给出对于注解方式的评价和展望。
1.3 目的本文旨在帮助读者更好地理解和掌握struts2-convention-plugin插件中注解的使用方法。
通过本文介绍和示例演示,读者将能够快速上手并灵活运用该插件,从而提高开发效率和代码质量。
以上是“1. 引言”部分内容,请根据需要进行修改和补充。
2. struts2-convention-plugin 注解使用说明:2.1 概述:struts2-convention-plugin 是Struts2 框架中的一个插件,它提供了一种基于注解的方式来配置和管理Action 类。
通过使用这个插件,我们可以简化传统的XML 配置文件,并且能够更加便捷地进行开发。
2.2 注解说明:struts2-convention-plugin 提供了一系列的注解,用于配置和定义Action 类及其相关属性和方法。
以下是常用的几个注解:- @Action:用于标识一个方法作为Action 的入口方法,可以指定URL 映射及HTTP 请求类型。
- @Result:用于指定一个结果视图,可以定义对应的视图页面、重定向操作等。
- @Param:用于将请求参数绑定到Action 类的属性上。
Structs2框架技术简单介绍

优点
• 3. 强大的拦截器Struts2的拦截器是一个Action级别 的AOP,Struts2中的许多特性都是通过拦截器来实 现的,例如异常处理,文件上传,验证等。拦截器 是可配置与重用的,可以将一些通用的功能如:登 录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web 项目中,就是使用Struts2的拦截器来完成了系统中 的权限验证功能。
第一步 创建index.jsp
<html><head> <title>第一个Struts简单示例</title> </head> <body> <form action="user/HelloAction" method="post"> 请输入你的大名:<input type="text" name="username" /> <br> <input type="submit" value="提交" /> </form></body></html>
Structs2工作流程
• 此外,如果struts.xml文件中还定义了被请 Action的一些拦截器,那么该Action实例被 调用前后,这些拦截器也会被先后执行。
Structs2工作流程
Structs2工作流程
• 第五步 Action对请求处理完毕以后将返回 一个逻辑视图,该逻辑视图将在struts.xml 文件相应的<result>元素中寻找相应的物理 视图,并返回给客户端 • <result name="success">/WEBINF/page/hello.jsp</result>
struts2 weblogic整合例子

struts2 weblogic整合例子本文将介绍如何在WebLogic中整合Struts2框架。
我们将会提供一个完整的例子,演示如何使用Struts2创建一个简单的Web应用程序,并将其部署到WebLogic服务器上。
首先,我们需要下载并安装WebLogic服务器。
在这里,我们使用的是WebLogic 12c版本。
接下来,我们创建一个名为“sample”的Web应用程序,并在其中添加Struts2框架所需的库文件。
这些库文件包括:- struts2-core.jar- struts2-convention-plugin.jar- ognl.jar- xwork-core.jar- freemarker.jar我们可以将这些库文件放置在Web应用程序的“WEB-INF/lib”文件夹中。
然后,我们创建一个名为“index.jsp”的JSP页面,用于显示我们的Web应用程序。
在这个页面中,我们需要引入Struts2的标签库,以便能够使用它们来创建页面元素。
我们可以在页面的头部添加以下代码:```jsp<%@ taglib prefix='s' uri='/struts-tags' %>```接下来,我们创建一个名为“HelloAction”的Action类,用于处理来自“index.jsp”页面的请求。
在这个类中,我们需要定义一个名为“execute”的方法,该方法将返回一个字符串类型的结果,该结果将被Struts2框架用于选择要呈现的JSP页面。
在这个方法中,我们可以编写任何我们想要的业务逻辑。
例如,以下是一个简单的Hello World应用程序:```javapublic class HelloAction extends ActionSupport {public String execute() throws Exception {return SUCCESS;}public String getMessage() {return 'Hello World!';}}```在这个例子中,我们的“HelloAction”类继承了Struts2框架的“ActionSupport”类,这个类提供了一些便捷的方法,用于处理请求和响应。
struts2常见面试题

struts2常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。
在软件工程领域,Struts2常常是面试中的热门话题。
本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。
Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。
它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。
Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。
2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。
3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。
Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。
2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。
3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。
4. FilterDispatcher:负责将请求分发给合适的Action处理。
5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。
Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。
2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。
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+hibernate+spring经典整合实例教程

Struts2与Spring、Hibernate三者整合的过程示例:示例工具:MyEclipse 7.0、Tomcat 6.0、MySql步骤:1.创建一个WEB工程,命名为BookShop(名字自己取,此处为示例工程名);2.导入struts2的核心jar包,也就是在WEB-INF下的lib文件夹中放入jar包文件,如下图(图中jar包为示例版本):3.加载spring,选中工程名,右击并选择【MyEclipse】选项下的【Add Spring Capabilities...】(或者在工具栏中选择【MyEclipse】下的【Add Spring Capabilities...】),在弹出的对话框中进行如下图所示操作:点击【Next】,点击Folder文本框后的【Browse】,在弹出对话框中选择spring配置文件存储位置为WEB-INF 文件夹,如下图所示:点击【OK】后,再点击【Finish】完成。
至此,已经完成加载spring,在WEB-INF文件夹下已经生成了配置文件applicationContext.xml。
4.加载Hibernate,选择【MyEclipse】下的【Add Hibernate Capabilities...】,在弹出对话框中进行如下图所示操作:点击【Next】后,选择Existing Spring configuration file单选框,在SessionFactory Id文本框中填入"sessionFactory",如下图所示:点击【Next】,进行如下图所示操作:该操作中,只需在Bean Id文本框中输入一个Id名,作为数据库源的代用名,意义不大。
然后在DB Driver 下拉列表中,选择MyEclipse中创建好的数据库源xiaoqi,其他信息将自动填写。
点击【Next】,在弹出对话框中去掉Create SessionFactory class?复选框,不创建该类,点击【Finish】完成(创建过程中,加载的jar包文件可能有重复,所以这个时候如果提示有某些jar包重复,问全部保存【Keep Exiting】,还是替换掉【Replace】,可以选择替换掉【Replace】)。
STRUTS2标签中符号#,$,%的用法示例

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。
在这里笔者简单介绍它们的相应用途。
1.#符号的用途一般有三种。
1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。
实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttrib ute(”msg”) 。
2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。
2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。
如下面的代码所示:构造Map<s:set name=”foobar” value=”#{’foo1′:’bar1′,‘foo2′:’bar2′}” /><p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p><p>不使用%:<s:url value=”#foobar['foo1']” /></p><p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>3.$符号$符号主要有两个方面的用途。
在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。
struts2

加载struts2
要使用struts2,必须在web.xml中进行配置
以过滤器的形式加载 struts2
过滤器所在包: org.apache.struts2. dispatcher.FilterDi spatcher
加载struts2
以过滤器的形式加载struts2
struts2以过滤器的形式加载到工程中,在web.xml中配置: <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
struts2中的命名空间起到模块化的作用。这个包下 的所有Action(请求的处理类),都应该以: /[命名空间名]/[Action名]来访问 命名空间的名字都应该以“/”开头,如果不配置命名 空间,则默认的就是namespace=“/”。 一个包下不能存在名字相同的Action
struts2常用配置-Action配置
name属性配置Action的名字
class属性配置Action类的完整类路径,说明 用哪个类处理提交的请求。
struts2常用配置-Action配置
LoginAction.java public class LoginAction extends ActionSupport { private String userName; private String password; public void setUserName(String userName) { erName = userName; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { return SUCCESS; } } 每个请求处理类必须继 承ActionSupport 对应页面表单元素名 对应的表单元素名必须 给出set方法 处理请求的方法。方法 名默认为execute struts2中,所提交的请求 应以.action结尾
Struts2实现文件上传

Struts2实现文件上传文件上传,说白了就是个文件复制的过程,文件复制需要什么呢,只需要有源文件和目标地址即可,·用main方法实现的文件复制代码如下:package cn.oracle.upload;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class FileUploadDemo {public static void main(String[] args) throws Exception{File input=new File(args[0]); 参数args[0]是你运行Java程序的时候输入的参数,下面有详细解释:if(!input.exists()){System.out.println("源文件不存在!");System.exit(0);}File output=new File(args[1]);if(!output.getParentFile().exists()){output.mkdirs();}OutputStream outputFile=new FileOutputStream(output);InputStream inputFile=new FileInputStream(input);byte data[]=new byte[1024];int temp=0;while((temp=inputFile.read(data))!=-1){outputFile.write(data, 0, temp);}outputFile.close();inputFile.close();}}例如上图中的Java 运行的程序类名称后面就是参数第一个是d:\1.txt 是一个参数args[0],d:\2.txt是第二个参数args[1]C:\Users\congz_000>java FileUploadDemo d:\1.txt d:\2.txt上面的代码就实现了文件的复制,其实在struts2之中的实现原理是一样的,也就是两个File对象,两个字节流对象,然后调用相应的方法执行的复制而已;在struts2之中实现的复制需要一个表单,将此表单的内容提交到一个action之中,然后struts负责参数的接受处理,赋给相应的变量,编写一个文件复制的方法即可完成文件上传;·给项目添加struts2开发支持,我们用自动配置的方式,用myeclipse帮我们完成,不需要做过多的配置,一路next即可;·新建一个upload.jsp页面<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort( )+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>文件上传</title></head><body><form action="FileUpload!upload.action"method="post"enctype="multipart/form-data"><input type="file"name="photo"id="photo"> 这个name属性一定要和action之中的File 类对象的名称一致;<input type="submit"value="上传"></form></body></html>·一个用来表示上传成功的页面<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort( )+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>文件上传</title></head><body><h1>上传成功</h1></body></html>·一个用来表示上传失败的页面<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort( )+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>文件上传</title></head><body><h2>上传失败!</h2></body></html>·编写相应的上传需要的action FileUploadActionpackage cn.oracle.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class FileUploadAction extends ActionSupport { private File photo;private String photoFileName;public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName;}public void setPhoto(File photo) {this.photo = photo;}public String upload(){System.out.println("************");String filePath =ServletActionContext.getServletContext().getRealPath("/upload")+ File.separator+ UUID.randomUUID()+ "."+ this.photoFileName.substring(this.photoFileName.lastIndexOf(".") + 1);if(this.saveFile(this.photo, filePath)){return"success";}return"failure";}public boolean saveFile(File input, String outputFilePath) { File output = new File(outputFilePath);if (!output.getParentFile().exists()) {output.mkdirs();}InputStream inputFile = null;try {inputFile = new FileInputStream(input);} catch (FileNotFoundException e) {e.printStackTrace();}OutputStream outputFile = null;try {outputFile = new FileOutputStream(output);} catch (FileNotFoundException e) {e.printStackTrace();}byte[] data = new byte[1024];int temp = 0;try {while ((temp = inputFile.read(data)) != -1) {outputFile.write(data, 0, temp);}if (inputFile != null) {inputFile.close();}if (outputFile != null) {outputFile.close();}return true;} catch (Exception e) {e.printStackTrace();}return false;}}·配置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><package name="main"namespace="/"extends="struts-default"><action name="FileUpload"class="cn.oracle.action.FileUploadAction"> <result name="success">/success.jsp</result><result name="failure">/failure.jsp</result></action></package></struts>·我们还需要配置一个Struts.properties的资源文件,在src之中,设置上传的限制和编码;struts.i18n.encoding=UTF-8struts.multipart.saveDir=/tempstruts.multipart.maxSize=2097152000·我们把项目部署到tomcat或者weblogic之中,按照你的连接访问,整个上传到此就完成了,这是个最简单的上传,没有做任何的修饰,有些上传做的很华丽的,那些都是div+css的功劳,如果你想要那种特效的话,需要研究下css 这个很不错的;。
struts2异常拦截处理

struts2异常拦截处理在实际开发中,我们需要将捕获的异常信息打印出来,换上通俗的语言让客户能够大概了解是原因引起的异常,所以我们需要将异常信息显示到页面上来,让客户能够看得见。
这里介绍以下struts2的异常处理机制。
在sturts2的struts-default.xml中,引用了struts2定义的拦截器:<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/下面是一个小例子来说明struts2中,应该如何捕获异常信息,并将异常信息显示到页面:一个简单的index.jsp页面,只有一个按钮,点击进入action:<s:form action="login"><s:submit value="submit"/></s:form>struts.xml的配置:<struts><package name="Action" extends="struts-default"><global-results><result name="all">/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="all" exception="ng.Exception"></exception-mapping></global-exception-mappings><action name="login" class="com.action.LoginAction"><result name="success">/success.jsp</result></action></package></struts>Action:public class LoginAction extends ActionSupport {@Overridepublic String execute() throws Exception {try{int i = 9/0;}catch (Exception e) {throw new Exception(e);}return "success";}}打印错误信息的页面 error.jsp:<body><s:property value="exception.message"/></body>这样就可以把异常信息打印到指定的页面,当然也可以在struts.xml中定义局部的异常映射信息。
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(checkbox_radio_select)表单标签的应用及详细事例

一、表单标签_checkbox复选框如果集合为list<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>生成如下html代码:<input type="checkbox"name="list"value="Java" checked="checked"/><label>Java</label><input type="checkbox"name="list"value=".Net" checked="checked"/><label>.Net</label><input type="checkbox"name="list" value="RoR"/><label>RoR</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label>************************************************ *****<br>如果集合为MAP<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="{1,2,3}"/>生成如下html代码:<input type="checkbox"name="map"value="1" checked="checked"/><label>瑜珈用品</label><input type="checkbox"name="map"value="2" checked="checked"/><label>户外用品</label><input type="checkbox"name="map"value="3" checked="checked"/><label>球类</label><input type="checkbox"name="map"value="4"/><label>自行车</label>******************************************************<br>如果集合里存放的是javabean(id和name为Person的属性)<%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%><s:checkboxlist name="beans"list="#request.persons"listKey="id"listValue="name"/>生成如下html代码:<input type="checkbox"name=“beans" value="1"/><label>第一个</label><input type="checkbox"name=“beans" value="2"/><label>第二个</label>************************************************ ******<br>表单标签_radio单选框<a href="radio.jsp">测试</a><br>表单标签_select单选框<a href="select.jsp">测试</a>代码运行结果如下:----------------------------------------------------------------------------------------------------------------------------二、表单标签_radio下拉选择框如果集合里存放的是javabean(id和name为Person的属性) <%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%>< s:radio name="beans" list="#request.persons" listKey="id"listValue="name"/> 生成如下html代码:<input type="radio"name="beans"id="beans1" value="1"/><label>第一个</label><input type="radio"name="beans"id="beans2" value="2"/><label>第二个</label>************************************************ **************<br>该标签的使用和checkboxlist复选框相同。
Struts2入门经典实例

写一个Steuts2的经典入门案例,怕忘记啊,有时候突然记不起知识概念了,所以还是记个笔记,网络上找了几个,发现部署出来要报错,最后还是自己写一个比较靠谱。
做了一个登陆程序作为入门例子。
登陆会去交互,并返回页面,比较适合以后扩展的项目,容易理解!例子:登陆的Struts2案例环境:IDE工具:Myeclipse , Tomcat6.0所需jar包:struts2-core-2.1.8.1.jarstruts2-json-plugin-2.1.8.1.jarxwork-core-2.1.6.jarcommons-fileupload-1.2.1.jarfreemarker-2.3.15.jarjunit4.4.jarognl-2.6.7.jar步骤:1. 创建一个web project项目2.导入Struts2所需jar包3.配置web.xml4.配置struts2.xml5.写action类(LoginUser.java)6.写jsp页面7.启动tomcat.运行项目项目最后截图:开始:1.创建一个项目还是截图,项目名称为:Struts2SpExa2.导入所需jar包导入所需jar包到项目的lib文件夹下(或者通过Build Path导入也可)3.在WEB-INF下面的web.xml中配置:配置拦截器和起始页面[html]view plain copy print?01.<?xml version ="1.0" encoding ="UTF-8"?> 02.<web-app version ="2.5" 03.xmlns ="/xml/ns/javaee" 04.xmlns:xsi ="/2001/XMLSchema-instance" 05.xsi:schemaLocation ="/xml/ns/javaee 06./xml/ns/javaee/web-app_2_5.xsd"> 07.<filter> 08.<filter-name>struts2</filter-name> 09.<filter-class> 10.org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 11.</filter-class> 12.</filter> 13.14.<filter-mapping> 15.<filter-name>struts2</filter-name> 16.<url-pattern>/*</url-pattern> 17.</filter-mapping> 18.<welcome-file-list> 19.<welcome-file>/WEB-INF/jsp/login.jsp </welcome-file> 20.</welcome-file-list> 21.22. </web-app>4.配置struts.xml配置strust2要调用的action[html] view plain copy print ?01.<?xml version ="1.0" encoding ="UTF-8"?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 04."/dtds/struts-2.0.dtd"> 05.<!--配置struts action > 06.<struts> 07.<package name ="todayMZ" extends ="struts-default" namespace ="/"> 08.<action name ="loginUser" class ="erAction"> 09.<result name ="success">/WEB-INF/jsp/success.jsp </result> 10.<result name ="fail">/WEB-INF/jsp/fail.jsp </result> 11.</action> 12.</package> 13. </struts>5.写action 类(LoginUser.java)这个类主要用于struts2跳转到这个action 后。
struts2

一、Struts2入门1.概念什么是Struts2Struts2 是一个用来开发 MVC 应用程序的框架.它提供了 Web 应用程序开发过程中的一些常见问题的解决方案:对页面导航活动进行管理对来自用户的输入数据进行合法性验证统一的布局可扩展性国际化和本地化支持 Ajax表单的重复提交Struts2 VS Struts1Struts2与Struts1 相比,在体系结构方面更优秀,具体表现在类更少,更高效,扩展更容易等。
struts2 不是从 Struts1 扩展而来的, 说它是一个换了品牌标签的 WebWork 更合适。
2.程序Struts2 核心就是一个 Filter,该Filter会对所有的请求进行拦截(/*) StrutsPrepareAndExecuteFilterStrutsPrepareFilter + StrutsExecuteFilterStruts2 将所有的请求拦截下来,具体去访问哪个java类的方法需要读取配置文件 struts.xmlstruts.xml 文件需位于工程的类路径下实现一个 Struts 的 HelloWorld 程序1) 将 %struts2-blank例子%\WEB-INF\lib 目录下所有jar包拷贝至 webproject\WEB-INF\lib 中拷贝至webproject/WEB-INF/web.xml 中3) %struts2-blank例子%\将WEB-INF\classes 下的struts.xml 文件拷贝至工程src下清空 <struts></ struts> 标签之间的内容4) 新建 Action 实例, HelloWorldAction.javaAction可以不必是实现任何接口,它是一个普通java类(pojo),从这点可以看出 Struts2 是非侵入式设计,Action可以不依赖struts和Servlet 而独立存在Action中至少需要定义一个方法,且方法的返回值类型必须为Stringpublic String sayHello() {return "success";}6) 在 WEB-INF 下新建jsp页面hello.jsphello动手练习:用 struts2 实现最简单的mvc二、Struts2 细节1.package 元素配置action的组织包name:配置包名,用于被继承namespace: 配置访问路径以 /a/b/c/action 为例搜索action的顺序为 /a/b/c -- /a/b -- /a -- /extends: 指定继承的包2. action 元素1) name属性配置action的访问名称后缀默认为 action和””可以通过常量进行配置<constant name="struts.action.extension" value="do"></constant>2) class属性配置action对应的java类,必须为完整类名如果继承struts-default 包,默认class 为ActionSupport,该类的 execute方法默认返回 success我们在写 Action 类时通常会选择继承ActionSupport,也就自动继承了 execute 方法,同时可以使用父类定义的常量 SUCCESS、ERROR 等3) method属性配置action的访问方法名,默认访问execute方法4) 通配符映射一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系通配符的映射规则●若找到多个匹配, 没有通配符的那个将胜出●若指定的Action不存在, Struts 将会尝试把这个URI与任何一个包含着通配符 * 的Action名及进行匹配●若 Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出●被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…{0} 匹配整个 URI●* 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.例:<action name="*_add" class="cn.itcast.action.Girl" method="add"></action>匹配路径 Boy_add.action Girl_add.action<action name="Boy_*_*" class="cn.itcast.action.Boy" method="{1}"><result name="success"><param name="location">/WEB-INF/jsp/{2}.jsp</param></result></action>Boy_add_delete 会调用 Boy的add方法,转发给 delete.jsp5) 动态方法调用通过 url 动态调用 Action 中的方法<action name="Boy" class="cn.itcast.action.Boy">/strutsdemo/Boy!add.action 会调用Boy类的add方法默认情况下, Struts 的动态方法调用处于激活状态, 若想禁用该功能, 则可以在 struts.xml 文件中配置常量3. Action 类概念:action: 应用程序可以完成的每一个操作(用户的一个动作) 例如:显示一个登陆表单,保存商品信息Action类:Struts2中的Action是pojo(Plain Old Java Objects一个普通的java类)的,可以定义属性和方法,但需要遵循一些规则:●属性的名字必须遵守与 JavaBeans 属性名相同的命名规则. 属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生●必须有一个不带参的构造器●至少有一个供 struts 在执行这个 action 时调用的方法,方法的返回值为String类型(即视图名称)●同一个 Action 类可以包含多个 action.●Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例4. result 元素配置 action 的执行结果name: 配置result结果名称,根据action执行方法的返回值决定找那个 result默认为 successtype: result 结果类型,默认为 dispatcher 类型常用的result类型●dispatcherdispatcher 结果类型是最常用的结果类型, 也是 struts 框架默认的结果类型用于将控制权转发给web应用中的其他资源默认参数:location 用于指定转发的资源路径,通常为一个jsp页面●redirect用于将响应重定向到另一个资源参数:location : 指定重定向的资源路径parse : 指定是否将location的值视为一个 OGNL 表达式来解析默认值为true●redirectAction用于将响应重定向给另一个Action参数:actionName : 指定目标action, 该属性为默认属性namespace : 指定目标 action 所在的 package●chain用于构成一个 Action 链,前一个action将控制权转发给下一个action,并且前一个action的状态在后一个action中继续保持参数:actionName : 指定目标action, 该属性为默认属性namespace : 指定目标 action 所在的 packagemethod :指定调用action的方法,默认调用 execute 方法●httpheader用于将把一个 HTTP 状态发送到浏览器默认参数 status :指定状态码●plaintext将转发的资源作为文本输出 , 不常用。
Struts2_Action配置

Struts2学习笔记——ActionStruts2的简单配置拷贝 struts.xml 文件到项目的src目录下,并修改(添加如下) action name="hello">result>/Hello.jsp</result></action>拷贝必要的 jar 包到项目的W EB-INF的lib目录下修改 web.xml 文件(配置f ilter)filter>filter-name>struts2</filter-name>filter-class>org.apache.struts2.dispatcher.FilterDispatcher< filter-class></filter>filter-mapping>filter-name>struts2</filter-name>url-pattern>/*</url-pattern></filter-mapping>Struts2 的执行过程的简单分析:Struts2 NamespaceNamespace 决定了action 的访问路劲,默认为”,可以接受所有路劲的actionNamespace 可以写成/,或者/xxx,或者/xxx/yyy,对应的 action 访问路劲为index.action,/xxx/index.action,/xxx/yyy/index.actionNamespace最后用模块来进行命名ActionMethod上图中的 Struts.xml 文档中配置有两个action,首先看第一个,name=userAdd再看 UserAction.java 如下:public class UserAction extends ActionSupport {public String add() {return SUCCESS;}}Method=”add”浏览器中访问第一个action为:http://localhost:8080/xxx/user(package name)/userAdd(action name)如果 UserAction 中还有一个delete 方法或update方法或者更多方法,那么这里就需要配置更多的 action,如<action name=”userDel”class=”erAction”method=”delete”> 所以我们不提倡使用这样的方法,每增加一个方法,就需要多配置一个action,给我们的开发增添了额外的负担,我们提倡使用第二种 action配置方法我们只需要配置一个 action,采用动态访问的方式,输入如下 url就可以了:http://localhost:8080/xxx/user/user!add如果还有其他方法就将 add 换成UserAction.java中的方法就可以了,如:http://localhost:8080/xxx/user/user!delete通配符配置(采用通配符可以将配置量降到最低)UserAction.java 文件:public class StudentAction extends ActionSupport {public String add() {return SUCCESS;}public String delete() {return SUCCESS;}}观察位置 1,匹配s tudent* 的action,然后找到method=”{1}”, 这里的 1 代表着name 的值中的表达式中第一个*,如果 method 为 add 方法,那么 name 的值就studentadd。
Struts2返回JSON数据的具体应用范例

Struts2返回JSON数据的具体应用范例早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事。
直到前两天有同事在工作中遇到这个问题,来找我询问,我又细细地给他讲了一遍之后,才觉得无论如何要抽一个小时的时间来写这篇文章,从头到尾将Struts2与JSON的关系说清楚。
其实网络中,关于这个问题的答案已是海量,我当初也是从这海量的答案中吸收精华,才将“Struts2返回JSON数据”这个问题搞清楚的。
但是这些海量的答案,有一个共同的缺陷,就是作者们只关注问题核心,即“如何在具体的Struts2应用中返回JSON数据到客户端”如何实现,而对于"为何要这样实现"以及实现的本质却解释的不甚了了,在笔者看来这只是“授人以鱼”而非笔者所推崇的“授人以鱼的同时,授人以渔”。
在这篇文章中,笔者将总结前辈们的经验,并结合自己的理解,来从理论到实践由浅入深的说明“Struts2返回JSON数据”这一问题。
JSON(JavaScript Object Notation)首先来看一下JSON官方对于“JSON”的解释:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
易于人阅读和编写。
同时也易于机器解析和生成。
它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)。
struts2例子三【Action】整理文

struts2例⼦三【Action】整理⽂Action 的配置是 Struts2 框架的⼀个基础⼯作单元,每⼀个 Action 的配置都有对应的处理类,当⼀个请求和 Action 的 name 相匹配时,框架将根据所配置的 Action 映射来决定对请求的处理。
1、Action 映射配置在 Action 映射中可以指定 result types 、异常处理器( exception handlers )及拦截器,但是,只有Action 的 name 属性是必需指定的,其他属性也可以在 package 范围内进⾏定义,供该 package 下配置的所有 Action 引⽤。
如:<action name="Logon" class="tutorial.Logon"><result name="input">Logon.jsp</result></action>2、Action 名称及命名注意:如果在你的 action 的 name 中包含有斜线(如: <action name="xxxxxx/xxxxxx" class="xxxxxx.xxxxx"/> ),你需要在 struts.xml 中进⾏如下配置: <constant name="struts.enable.SlashesInActionNames" value="true"/> ,但是,启⽤该配置也会产⽣⼀些副作⽤。
具体-。
-问度娘警告:谨慎使⽤在 action 名称中包含点 (er) 、斜线 (create/user) 和横线 (create-user) 的情况,虽然 action 的名称定义⾮常灵活,但是,当在 action 的 name 中使⽤点、斜线或横线时,应该谨慎。
struts2 实验报告

1.系统分析与设计1.1系统功能描述本系统是个非常简单的注册、登录系统。
本系统的实现是基于Struts2、Spring、Hibernate三个框架,系统功能单一,业务逻辑简单。
当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。
当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。
系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。
系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。
故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。
当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。
除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。
1.2系统功能流程处理用户注册的流程图东北大学软件学院实践考核类课程(四)实验报告1.3数据库设计ColumnNarneDatatppe HOTH ULLAUTOI NC :FlagsDefaultValue Commentuser_id|S>INT(11)✓ ✓_|UNSIGNED _|ZEROFELLEBBQ username 心.VARCH.4.R(50]_|BINARYQ user_pass VARCHAR(50] ✓_|BIN4RYQ emailVARCHAR(100]1BIN4RY相关的映射文件:<hibernate-mapping package ="org.reg_login.model"><class name ="User"table ="usertable"〉<id name ="id"column ="user_id"><generator class ="identity"/> </id ><property name ="user"column ="user_name"not-null ="true"length ="50"unique ="true"/><property name ="pass"column ="userpass"n ot-null ="true"C=3length ="50"/><property name ="email"length ="100"/></class></hibernate-mapping >一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2增删改查例子UserBean//要添加set,getpublic class UserBean{private Long id;private String name;private String password;private int age;private Date birthday;private Long sex;private Set<Long> likes;private String des;//描述}public class LikeBean{private Long id;private String name;}FormActionpublic class FormAction{//属性要生成get,set//标记(添加,修改)private String tip;private UserBean userBean;private List<LikeBean> likeList;private List<UserBean> userList;//到列表页面public String list(){userList =new ArrayList<UserBean>();userList.add(new UserBean("abc",19,new Date())); userList.add(new UserBean("def",70,new Date())); userList.add(new UserBean("ghi",40,new Date()));return"list";}//到添加页面public String toAdd(){likeList =new ArrayList<LikeBean>();likeList.add(new LikeBean(new Long(1),"上网")); likeList.add(new LikeBean(new Long(2),"读书")); likeList.add(new LikeBean(new Long(3),"游戏"));tip ="add";return"info";}//添加方法,Struts2会自动把对应的值赋值给userBeanpublic String add(){System.out.println(userBean);return"toList";}//到更新页面,取出值,设置标记public String toUpdate(){likeList =new ArrayList<LikeBean>();likeList.add(new LikeBean(new Long(1),"上网"));likeList.add(new LikeBean(new Long(2),"读书"));likeList.add(new LikeBean(new Long(3),"游戏"));tip ="update";System.out.println("update name:"+userBean.getName()); userBean =new UserBean("update",100,new Date());userBean.setId(new Long(101));userBean.setSex(new Long(2));userBean.setDes("Struts2用户");Set<Long> likes =new HashSet<Long>();likes.add(new Long(2));likes.add(new Long(3));userBean.setLikes(likes);return"info";}//更新方法public String update(){System.out.println(userBean);return"toList";}//删除方法public String delete(){System.out.println("del name:"+userBean.getName());return"toList";}}struts.xml配置<struts><package name="form"namespace="/form"extends="struts-default"> <!-- 使用通配符调用多个方法,method为*对应的字符串 --><action name="userAction_*"class="com.struts2.form.FormAction" method="{1}"><!-- 方法返回的字符串对应name,再转发到页面 --><result name="list">/form/list.jsp</result><result name="info">/form/info.jsp</result><!-- 重定向Action,可以有Action名字和空间,参数 --><result name="toList"type="redirectAction"><!-- 空间参数,不写代表和当前Action同一个空间<param name="namespace">form</param>--><!-- 重定向Action的名称 --><param name="actionName">userAction_list</param><!-- url带的参数,${}是动态参数,值为Action的属性userBean中name的值 --><param name="userName">${}</param><param name="userAge">${userBean.age}</param></result></action></package></struts>jsp页面1.list(列表页面)<!-- 添加标签 --><%@ taglib prefix="s" uri="/struts-tags" %><div><ahref="${pageContext.request.contextPath}/form/userAction_toAdd.action">添加</a></div><div><!-- 判断用户是否为空 --><s:if test="(userList!=null)&&(!userList.isEmpty())"><div>用户列表</div><!-- 遍历用户 --><s:iterator value="#erList"id="u"status="st"><s:property value="#st.index+1"/> <s:property value="#"/> <s:property value="#u.age"/> <!-- 格式化日期 --><s:date name="#u.birthday"format="yyyy-MM-dd HH:mm:ss"/> <ahref="${pageContext.request.contextPath}/form/userAction_toUpdate.action?use=${}">修改</a> <ahref="${pageContext.request.contextPath}/form/userAction_delete.action?userB =${}">删除</a><br/></s:iterator></s:if><s:else><div>无用户</div></s:else></div>.jsp(添加和修改页面)<!-- 添加标签 --><%@ taglib prefix="s" uri="/struts-tags" %><!-- 显示标记(添加/修改) --><s:property value="tip"/><!-- action="userAction_%{tip}"tip为Action中的标记变量 submit不加method --><s:form action="userAction"namespace="/form"method="POST"><!-- userBean.id为Action中属性userBean中id的值 --><s:hidden name="userBean.id"></s:hidden><s:textfield name=""label="用户名"></s:textfield><s:textfield name="userBean.age"label="年龄"></s:textfield><s:textfield name="userBean.birthday"label="生日"><!-- 格式化日期 --><s:param name="value"><s:date name="userBean.birthday" format="yyyy-MM-dd"/></s:param></s:textfield><!-- 密码不能回填 --><s:password name="userBean.password"label="密码"></s:password><s:textarea name="userBean.des"label="描述"cols="35"rows="8"></s:textarea><!-- 这种checkbox显示出来是一行只有一个checkbox<s:iterator value="likeList"><s:checkbox name="userBean.likes" label="%{name}" fieldValue="%{id}"></s:checkbox></s:iterator>--><!-- 这种是一行多个 --><s:checkboxlist list="likeList"name="userBean.likes"listKey="id"listValue="name"label="爱好"></s:checkboxlist><!-- 下拉框<s:select list="likeList" listKey="id" listValue="name" headerKey="-1" headerValue="请选择爱好"></s:select>--><!-- value="1" 设置默认,但是好像设置了不能回填 --><s:radio list="#{'1':'男','2':'女'}"label="性别"name="userBean.sex"></s:radio><s:submit value="%{tip}"id="submitBut"method="%{tip}"></s:submit></s:form>。