在struts2中从jsp页面传值到action中

合集下载

基于Struts2 Result Type为chain 的Action之间数据传递

基于Struts2 Result Type为chain 的Action之间数据传递

chain:基本用途是构造成一条动作链。

前一个Action将控制权转交给后一个Action,而前一个Action的状态在后一个Action里仍然保持着。

我现在有一个场景,FirstAction 通过chain的方式,将控制权交给SecondAction。

FirstAction对应的页面代码为first.ftl,SecondAction对应的页面代码为second.ftl。

假设我们的FirstAction如下定义:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}意思很明确了,通过first.ftl的输入,到DB中或其他,生成了我们的CustomUser对象,这个CustomUser对象将要在SecondAction使用。

于是我们想到了要配置FirstAction 的name为toSecond的Result type为chain,将生成的CustomUser对象传递到SecondAction中,我们也这样做了,但是经过调试,发现在SecondAction中没有得到FirstAction中的CustomUser对象。

SecondAction是这样实现的:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}看一下ChainingInterceptor.java的实现,发现有这样的注释:An interceptor that copies all the properties of every object in the value stack to t he currently executing object.在FirstAction 中CustomUser user 并没有在value stack 中,所以没有拷贝到SecondAction中。

action之间的参数传递和结果类型

action之间的参数传递和结果类型

struts2的action之间的参数传递和结果类型action的默认结果类型是dispatcher,而action之间发送请求是不能直接用该结果类型的。

一般来说,可选的结果有redirect、redirectAction、chain。

前两种都是属于页面跳转,也就是说,发送请求以后,地址栏的地址会刷新为被请求的action的地址,而chain则不会更新地址。

redirect-action:“这个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选的)namespace.这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提供的模式. 这就是说你可以在任意点上改变URL模式而不会影响你的应用程序.因此强烈推荐使用这个Result而不是标准的redirect result来解决重定位到某个action的情况.”---webwork2的说法。

redirect:“调用{@link HttpServletResponse#sendRedirect(String) sendRedirect}方法来转到指定的位置。

HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求). 这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用。

”简单说,两者的共同点是,*地址栏会变化,所有前一个action的请求参数都会丢失,当然也包括action的属性值也会丢失。

*路径写法稍有不同,redirectAction请求下一个action时,不带后缀.action,而redirect和普通URL写法一致。

*redirectAction支持param来附加请求参数,但是这往往会导致ServletActionRedirectResult 报找不到xxx属性的警告,这大概是由于无法识别是IOC注入,还是参数附加URL导致的,虽然是W ARN级别,不过宁可写成xxx?a=x&b=y的形式,而&还需要写作&的格式,否则会报xml格式错误。

高级Java工程师面试题及答案

高级Java工程师面试题及答案

高级Java工程师面试题选择题各2分共44分1.下列说法正确的是A. Java语言不区分大小写B. Java程序以类为基本单位C. JVM为Java虚拟机JVM的英文缩写D. 运行Java程序需要先安装JDK答案:B,C,D2.下列说法中错误的是A. Java语言是编译执行的B. Java中使用了多进程技术C. Java的单行注视以//开头D. Java语言具有很高的安全性答案:A,B3.下面不属于Java语言特点的一项是A. 安全性B. 分布式C. 移植性D. 编译执行答案:D4.下列语句中,正确的项是A . int $ e,a,b=10;B. char c,d=’a’;C. float e=0.0d;D. double c=0.0f;答案ABD5.一个int 类型的常量和一个byte类型常量做减法,结果的类型是A. intB. byteC. charD. float答案 A6.下列程序段的输出结果是public class Expressions{void printExpr(){int x=3,y=4,z=5;System.out.println(x+y+z);}}A. xyzB. x+y+zC. 12D. 9答案 C7.下列关于for循环和while循环的说法中哪些是不正确的?A. for循环能实现的操作,while循环也都能实现B. for循环判断条件一般是非程序结果C. while循环判断条件一般是程序结果D. 两种循环结构中都必须有循环体,循环体不能为空答案ABC8.以下程序段执行后的K值为int x=10; y=34;k=(x<y)?y:x;A. 10B. 34C. 10D. 44答案 B9.下列不属于Java语言流程控制结构是A.分支语句B.条转语句C.循环语句D.赋值语句E.答案D10.设定义语句:int a[ ]={43,44,45};则下面对此语句的叙述正确的是A.定义一个名为a的一维数组B.a数组有3个元素C.a数组的元素的下标为1~3D.数组中的每一个元素都是整型E.答案ABD11.运行以下代码public class Person{int array[]=new int[10];public static void main(String args[]){System.out.println(array [1]);}}正确的是A.编译时将产生错误B.编译时正确,运行时将产生错误C.输出零D.输出空答案 A12.执行完下面语句int[ ]x = new int[20]; 后,说法正确的是A.x[19]为0B.x[19]未定义C.x[20]为0D.x[0]为空答案A13.设tmp是一个数组类成员,以下声明并初始化一个4个元素的数组选项A.int tmp[]={1,2,3,4};B.int tmp[]=new int[5];C.int tmp[]=new int(5);D.int tmp[];答案 A14.设定义:String s=”cake”,下面不合法的有A.s=s. toUpperCase();B.char c=s[1];C.int len=s.length;D.s=s.trim();答案BC15.设String s1=”Hello”;String s2=”World”;以下方法用来得到字符串“Hello World”有A.s2+s1;B.s1.concat(s2);C.s1.append(s2);D.s1.concate(s2);答案B16.下面哪一个是Java最基本的元素A. 接口B. 方法C. 包D. 对象答案:D17.如果Cake.java、Ball.java这两个类总共包含有8个方法,则编译后会产生多少个字节码文件A. 12B. 10C. 2D. 1答案:C18.下面关于抽象类的理解,错误的是A. 构造方法可以声明为抽象类型B. 抽象方法必须被子类的方法覆盖C. 不允许实现抽象方法D. 方法声明中,static 和abstract不能同时存在答案:A19.编译Java程序时编译器提示找不到要编译的代码,这种错误通常可能是A. 文件名拼写错误B. 没有导入相应的包C. 文件名不是.javaD. 源文件不在Java搜索路径中答案:A,C,D20.捕获异常应该使用下列哪个子句A. throwB. catchC. finallyD. throws答案:B21.下列哪一项不属于finally语句的工作A. 关闭数据库B. 释放资源C. 关闭文件D.分配资源答案:D22.下面哪些需要异常处理机制A. 编译出错B. 方法、类中抛出的异常C. 使系统从故障中恢复D. 程序因不可避免的原因产生错误答案:B,C,D简述题每题3分共18分(1)用final声明属性、方法和类时,被声明的属性、方法和类表现出哪些特性?下面的实例正确吗?如果不正确,请说明原因?实例:final Test t = new Test();t.setName(“Jack”);答:final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

struts2 从一个action 跳转到另一个action的两种方法

struts2 从一个action 跳转到另一个action的两种方法

从action1直接跳转到action2,有两种方法:1. 需要保存前一个action的属性信息时使用,保存住action1的request对象:<result type= "chain " name="a2">action2</result>2. 不保存前一个action的参数可以用这种方法:<result type= "redirectAction "> action2</result>Struts.xmlJava代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD StrutsConfiguration 2.1//EN""/dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>[java]view plain copyprint?1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://stru /dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象 redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>action1Java代码1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}[java]view plain copyprint?1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}action2Java代码1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}[java]view plain copyprint?1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}。

struts2中使用注解配置Action方法详解

struts2中使用注解配置Action方法详解

struts2中使⽤注解配置Action⽅法详解使⽤注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。

使⽤注解,可以在⼤多数情况下避免使⽤struts.xml⽂件来进⾏配置。

struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage、Namespace、Result和Action。

ParentPackage:ParentPackage注解⽤于指定Action所在的包要继承的⽗包。

该注解只有⼀个value参数。

⽤于指定要继承的⽗包。

⽰例:使⽤ParentPackage注解,其value值为mypackage,表⽰所在的Action需要继承mypackage包,@ParentPackage(value="mypackage")public class UserAction extends ActionSupport{}如果注解中只有⼀个value参数值,或者其他参数值都使⽤默认值时,则可以对value参数设置进⾏简写,⽐如上述的代码:@ParentPackage("mypackage")public class UserAction extends ActionSupport{}把struts2-convention-pligin-2.x.x.jar包导⼊到web应⽤中,才能在Action类中使⽤注解。

Namespace:Namespace注解⽤于指定Action所在的包的命名空间。

该注解只有⼀个value参数,⽤于指定ACtion所属于的命名空间。

当使⽤Namespace注解时,在为命名空间取名需要使⽤斜杠(/)开头。

使⽤Namespace注解,指定其Action所在的包的命名空间为/user:@Namespace("/user")public class UserAction extends ActionSupport{}Result:Result注解⽤于定义⼀个Result映射,该注解包含四个参数,1)name:可选参数,⽤于指定Result的逻辑名,默认值为success2)location:必选参数,⽤于指定Result对应资源的URL3)type:可选参数,⽤于指定Result的类型,默认值为NullResult.class4)params:可选参数,⽤于为Result指定要传递的参数,格式为:{key1,value1,key2,value2,...}如果type参数的值为NullResult.class,那么struts2框架在解析Result配置时,会使⽤默认的结果类型(即ServletDispatcherResult)来替换NullResult。

Struts2中 struts.xml的Action配置详解

Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。

由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。

Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。

使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。

Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。

“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。

“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。

例如,有如下配置:CODE:<package name="default"><action name="foo" class="mypackage.simpleAction><result name="success" type="dispatcher">greeting.jsp</result></action><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar1.jsp</result></action></package><package name="mypackage1" namespace="/"><action name="moo" class="mypackage.simpleAction"><result name="success" type="dispatcher">moo.jsp</result></action></package><package name="mypackage2" namespace="/barspace"><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar2.jsp</result></action></package>1 如果请求为/barspace/bar.action查找namespace:/barspace,如果找到bar则执行对应的action,否则将会查找默认的n amespace,在上面的例子中,在barspace中存在名字为bar的action,所以这个action 将会被执行,如果返回结果为success,则画面将定为到bar2.jsp2 如果请求为/moo.action根namespace('/')被查找,如果moo action存在则执行,否则查询默认的namespace,上面的例子中,根namespace中存在moo action,所以该action被调用,返回success 的情况下画面将定位到moo.jsp、Action配置在struts2框架中每一个Action是一个工作单元。

Struts2配置详解2 配置Action

Struts2配置详解2 配置Action

配置ActionStruts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:public String execute() throws ExceptionStruts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx()在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。

开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。

1.Action映射:action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。

action元素的完整属性表例如:<action name="user" class="erAction"><result name="success">/user.jsp</result></action>2. 使用method属性在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。

struts2传值出现乱码问题

struts2传值出现乱码问题

1、在struts.xml文件中添加:<constant name="struts.i18n.encoding" value="gb2312" />页面编码格式如果是gb2312那么value值就写gb2312,页面编码如果是GBK那么value值就写GBK;总之页面什么编码格式这里的value就写什么格式。

这样简单语句话就解决了乱码问题如下:<struts><constant name="struts.i18n.encoding" value="gb2312" /><package name="com" extends="convention-default">............</struts>2、url传值到Action的乱码解决方法jsp页面 URL传中文参数到Action里面出现乱码,用过滤器和控制器都解决不了,用了我两个多小时解决这个小问题!解决方法有以下几种:第一种:在Action中用 new String(str.getBytes("ISO8859_1"), "UTF8"),进行转码,因为传递的时候,中文默人的是ISO8859_1第二种:可通过配置TOMCAT来解决此问题,具体解决方法如下:在tomcat的server.xml里,找到<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443"acceptCount="100"debug="0" connectionTimeout="20000"disableUploadTimeout="true"useBodyEncodingForURI="true" URIEncoding="gbk">其中是修改 disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="gbk" 其方法是防止在url中出现乱码然后在每个Jsp页面添加如下代码<%@ page pageEncoding=”gb2312″%><%@ page contentType=”text/html;charset=gb2312″%><%request.setCharacterEncoding(”gb2312″);%>第三种:直接在ACTION中利用以下方法解决:request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");我用的是struct1.2+Hibernate3.0+Spring2.0在做那个两个action的页面的时候,jsp页面的下拉列表通过actionForm传值给action,老是得到乱码,过滤器+server.xml+页面编码统一后,仍不能解决。

Struct2_使用Ajax调用Action方法并返回值

Struct2_使用Ajax调用Action方法并返回值

Struct2_使⽤Ajax调⽤Action⽅法并返回值⼀、Login.jsp1、<head>引⼊jquery:<script type="text/javascript"src="/ajax/jQuery/jquery-1.7.1.js"></script>2、界⾯控件:⽤户名:<input type="text"id="userName"><input type="button"id="btnAjax"value="Ajax调⽤"/>3、提交ajax请求<script type="text/javascript">$(function() {$("#btnAjax").click(function() {var userName = $("#userName").val().trim();if (userName == '') {alert("⽤户名不能为空");return false;}//login1为Action类命名空间名称;AjaxExecute为Action⽅法名称$.ajax({type : "post",url : '/login1/ajaxExecute',data : {//设置数据源userName : userName,password : "我是密码"},dataType : "json",//设置需要返回的数据类型success : function(d) {alert(d.sayHi);},error : function(d) {alert(d.responseText);}});});});</script>⼆、后台类:LoginActionNoNamespcepackage action;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.apache.struts2.convention.annotation.Action;import space;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.interceptor.validation.SkipValidation;import freemarker.template.SimpleDate;@ParentPackage("json-default")@Namespace("/login1")public class LoginActionNoNamespce extends SuperActionSupport {private static final long serialVersionUID = 1L;private Map<String, String> dataMap;//会把本类所有getter⽅法序列化成字符串返回给jsp页⾯public Map<String, String> getDataMap() {return dataMap;}public void setDataMap(Map<String, String> dataMap) {this.dataMap = dataMap;}@SkipValidation@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) })public String ajaxExecute() throws Exception {this.dataMap = new HashMap<String, String>();// 参数名称必须和jsp的空间名称⼀⼀对应String userName = request.getParameter("userName");String password = request.getParameter("password");dataMap.put("isSuccess", "true");SimpleDateFormat now = new SimpleDateFormat("yyyy年MM⽉dd⽇ HH时mm分ss秒");dataMap.put("sayHi", "Hi:" + userName + " 当前时间为:" + now.format(new Date()) + password);return SUCCESS;}}三、注意事项1. 类注解:@ParentPackage("json-default"),⽐如为json-default,不能为struts-defaultjson-default是继承于structs-default的,见.m2\repository\org\apache\struts\struts2-json-plugin\2.3.16.3\struts2-json-plugin-2.3.16.3.jar\struts-plugin.xml2. Action注解:@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) }),这⾥的type必须为json、root是固定值,去掉params节点会返回undefined3. 这⾥的dataMap定义为:private Map<String, String> dataMap;必须要添加getter、setter参数,否则返回null4. JSP页⾯(这⾥可以⽤命名空间,如url : '/login1/ajaxExecute', @ParentPackage("json-default")这样设置就不会报错)5. maven管理,需要引⽤的库<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency></dependencies>。

JSP和Struts2之间跳转总结

JSP和Struts2之间跳转总结

JSP和Struts2之间跳转实验报告:
Struts2的处理步骤
Struts2框架对Wed请求处理的具体步骤如下所述。

1.客户端浏览器发送一个请求,
2.这个请求经过核心控制器FilterDispatcher过滤处理,FilterDispatcher将请求转交给相应
的Action代理。

3.Action代理通过配置文件中的信息找到对应的Action类,创建Action对象并调用其
execute()方法。

4.在调用Action的过程前后,涉及相关拦截器的调用,拦截器自动对请求应用通过功能,
5.一旦Action执行完毕,Action代理根据Struts.xml中的配置信息找到execute()方法返
回值对应的结果。

返回结果通常是视图资源或另一个Action。

在Wed应用中加入Struts2的核心类库后,还要修改wed.xml配置文件,在wed.xml文件中配置Struts2的核心控制器FilterDispatcher。

配置文件代码如下。

上述代码中配置了Struts2的核心过滤器,指明过滤器类是FilterDispatcher,过滤器URL模式是匹配所有请求。

如此,该Wed应用就具备了Struts2框架的功能支持。

配置业务控制器
Struts.xml位置
上述代码配置了一个名为add的Action,并指明对应的Action类,在<result>元素中指明返回值为“cal”时对应的跳转页面时add_result.jsp。

运行结果。

jsp页面向action传值中文乱码的问题

jsp页面向action传值中文乱码的问题

JSP页面向action传值时中文乱码的问题,记得以前做项目的时候出现过,后来我到网上搜索了一系列的资料,把所有别人说要加的条件都加上去,稀里糊涂就解决了。

最近做一个项目,又遇到这个问题,我决定试一试究竟需要注意哪几点就可以解决乱码的问题。

下面是我的结论。

1>在页面首行<%@ page langusge=”java” import=”java.util.*”pageEncoding=”UTF-8”>2>将此句加上<meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8” />。

这句的意思是文档类型为html,我试过,如果这句不加,有时候没问题,有时候只要打开这个页面,上面的中文直接乱码,还没等到传值给action。

只要在页面上加上上面两条,传值给action是没有中文乱码的问题的。

而且我在web.xml特意将<filter><filter-name>EncodingFilter</filter-name><filter-class>common.util.EncodingFilter</filter-class> <init-param><param-name>characterEncoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>enabled</param-name><param-value>false</param-value></init-param></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>注释掉,依然没有乱码。

struts2_超链接与action使用

struts2_超链接与action使用

Struts2 超链接和 action 使用Struts2.0 链接标签Web 应用区别于普通的站点之处在于Web 应用可以创建一个动态的响应。

为了使从一个页面中链接一个动态数据变得简单,Struts2 框架提供了一系列的标签。

Struts 标签的一种用法是创建链接到其他 Web 资源,特别是针对那些在本地应用中的资源。

1.普通链接Web 程序中最普通的应用是链接到其他页面,下面看 Welcome.jsp。

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>Welcome</title><link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"type="text/css"/></head><body><h3>Commands</h3><ul><li><a href="<s:url action="Login_input"/>">Sign On</a></li><li><a href="<s:url action="Register"/>">Register</a></li></ul></body></html>1.1 说明1.<%@ taglib prefix="s" uri="/struts -tags" %>此句表示导入 struts 标签,并以 s 为前缀。

Struts2中使用HashMap传值

Struts2中使用HashMap传值

通过测试发现:Struts2页面跟Action间传值可以直接使用HashMap,使用方法类似于erName,示例:Action中代码片段:……public HashMap<String, String> hm = new HashMap<String, String>();public String login(){("userName:" + hm.get("userName"));hm.put("msg", "You are success");ActionContext.getContext().getContextMap().put("loginOk", getText("partA.ok.welcome"));return super.toContentView(null, "ok");}……提交、返回页面的代码片段:<s:textfield name="erName" key=""></s:textfield><s:textfield name="hm.msg" key=""></s:textfield>使用方法说明:在Action中定义public的HashMap参数hm,在页面中使用hm.xxx即可与Action传值第一种:Map map = new HashMap();Iterator iter = map.entrySet().iterator();while (iter.hasNext()) {Map.Entry entry = (Map.Entry) iter.next();Object key = entry.getKey();Object val = entry.getValue();}效率高,以后一定要使用此种方式!第二种:Map map = new HashMap();Iterator iter = map.keySet().iterator();while (iter.hasNext()) {Object key = iter.next();Object val = map.get(key);}效率低,以后尽量少使用!。

struts2 jsp页面遍历List集合,修改后将集合传到action中

struts2 jsp页面遍历List集合,修改后将集合传到action中
)Y(W~v^巓
N6e0RNQBlRstruts2 jspubMSListT eT\ListT
N Oaction-N
[s`
1._eQstruts2ubh~{^<%@ taglib prefix="s" uri="/struts-tags"%>
2.h~{MSst<Ps:iterator
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>eMRHeg</title>
</head>
public String getName() {
return ;
}
public void setName(String name) {
= name;
}
}
a$action{|
import java.util.List;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>始weTvHeg</title>

struts2中的jsp值传到后台action接收的三种方法

struts2中的jsp值传到后台action接收的三种方法

1. Action中的属性与表单中的属性一致就可以JSP中的表单<formaction="login.action"method="post">用户名:<inputtype="text"name="username"/> <br/> 密码: <inputtype="password"name="password"/><br/> <inputtype="submit"value="登陆"/></form>Action中的属性publicclassLoginActionextends ActionSupport { private String username;private String password;public String getUsername() {returnusername;}publicvoid setUsername(String username) {ername = username;}public String getPassword() {returnpassword;}publicvoid setPassword(String password) {this.password = password;}public String execute(){if( username.equalsIgnoreCase("aaa")&&password.equals("aaaaaa")){ returnSUCCESS;}else{returnERROR;}}}2. 使用一个VO类在表单中提交的属性名改为ername<formaction="login.action"method="post">用户名:<inputtype="text"name="ername"/> <br/>密码: <inputtype="password"name="user.password"/><br/><inputtype="submit"value="登陆"/></form>LoginAction中的属性改为userpublicclassLoginActionextends ActionSupport{private User user;public User getUser() {returnuser;}publicvoid setUser(User user) {er = user;}public String execute(){if( user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals(" aaaaaa")){returnSUCCESS;}else{returnERROR;}}}3. 使用Struts2中的ModelDriven数据模式Action类要实现一个泛型接口,前台表单与1相同publicclassLoginActionextends ActionSupport implements ModelDriven<User> { private User user = new User();public String execute(){if( user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals(" aaaaaa")){returnSUCCESS;}else{returnERROR;}}public User getModel() {returnuser;}}。

struts2 中action 如何获取jsp 页面参数1

struts2 中action 如何获取jsp 页面参数1

struts2 中action 如何获取jsp 页面参数1. ActionContext1. ActionContext在Struts2 开发中,除了将请求参数自动设置到Action 的字段中,我们往往也需要在Action 里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http 的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action 中取得request 请求参数"username"的值:ActionContext context = ActionContext.getContext();Map params = context.getParameters();String username = (String) params.get("username");ActionContext(com.opensymphony.xwork.ActionContext)是Action 执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map 而已),它存放的是Action 在执行时需要用到的对象.一般情况, 我们的ActionContext 都是通过: ActionContext context = (ActionContext) actionContext.get();来获取的.我们再来看看这里的actionContext 对象的创建:static ThreadLocal actionContext = new ActionContextThreadLocal(); ActionContextThreadLocal 是实现ThreadLocal 的一个内部类.ThreadLocal 可以命名为"线程局部变量",它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.这样,我们ActionContext 里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的.通过ActionContext 取得HttpSession: Map session =ActionContext.getContext().getSession();2. ServletActionContextServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与Servlet 相关对象访问的功能,它可以取得的对象有:(1)javax.servlet.http.HttpServletRequest : HTTPservlet 请求对象(2)javax.servlet.http.HttpServletResponse : HTTPservlet 相应对象(3)javax.servlet.ServletContext : Servlet 上下文信息(4)javax.servlet.ServletConfig : Servlet 配置对象(5)javax.servlet.jsp.PageContext : Http 页面上下文如何从ServletActionContext 里取得Servlet 的相关对象:<1>取得HttpServletRequest 对象: HttpServletRequest request = ServletActionContext. getRequest();<2>取得HttpSession 对象: HttpSession session = ServletActionContext.getRequest().getSession();3. ServletActionContext 和ActionContext 联系ServletActionContext 和ActionContext 有着一些重复的功能,在我们的Action 中,该如何去抉择呢?我们遵循的原则是:如果ActionContext 能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action 尽量不要直接去访问Servlet 的相关对象.注意:在使用ActionContext 时有一点要注意: 不要在Action 的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext 里的一些值也许没有设置,这时通过ActionContext 取得的值也许是null;同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,也不要直接将req 作为类变量给其赋值。

Struts2_Action配置

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的Action参数详细说明

struts2的Action参数详细说明

Struts2 Action参数详细说明1,Action的配置格式基本为:<package name="包名字" extends="继承的包" namespace="空间名" > <action name="访问的名称" class="处理请求的类"><result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result> </action></package>如:<package name="aa" extends="struts-default" ><action name="myaa" class="com.test.MyAction"><result name="success">/test/msg.jsp</result></action></package>访问时:<a href="myaa.action" >访问myaaAction</a>2,method属性,该属性可以把一个类的多个方法映射为多个Action,如:类文件public class MethodAction extends ActionSupport{public String add(){return SUCCESS;}public String delete(){return SUCCESS;}public String modify(){return SUCCESS;}public String query(){return SUCCESS;}}struts.xml配置文件:<action name="访问的方法名" class="处理的类" method="处理的方法名"> <result name="结果页名">结果页面</result></action><action name="add" class="com.struts2.chen.MethodAction" method="add"> <result name="success">/method/addRes.jsp</result></action><action name="delete" class="com.struts2.chen.MethodAction" method="delete"> <result name="success">/method/deleteRes.jsp</result></action><action name="modify" class="com.struts2.chen.MethodAction" method="modify"> <result name="success">/method/modifyRes.jsp</result></action><action name="query" class="com.struts2.chen.MethodAction" method="query"> <result name="success">/method/queryRes.jsp</result></action>页面:<a href="add.action">增加</a><br /><a href="delete.action">删除</a><br /><a href="modify.action">修改</a><br /><a href="query.action">查询</a><br />3。

Struts2 中拦截器和Action的调用关系

Struts2 中拦截器和Action的调用关系
<!--注意,每一个action都有一个默认的拦截器,如果指定了自定义的拦截器,那么默认的拦截器就失去作用了,所以这里要再加上默认的拦截器-->
</action>
<action name="action2" class="com.suo.actions.Action2">
this.password = password;
}
public String execute()
{
System.out.println("action2 invoke !");
return SUCCESS;
}
public String execute()
{
System.out.println("action1 invoke !");
return SUCCESS;
}
}
复制代码
复制代码
Action2.java:
public class MyInterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy invoke !");
}
@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("init invoke !");

struts2 工作原理

struts2 工作原理

struts2 工作原理
Struts2是一个用于构建Java web应用程序的开源框架。

它的
工作原理可以简单概括为以下几个步骤:
1. 客户端发送请求:当用户在浏览器中访问一个Struts2应用
程序的URL时,客户端会发送一个HTTP请求到服务器。

2. DispatcherServlet接收请求:服务器上运行的Servlet容器
(如Tomcat)接收到HTTP请求后,会通过web.xml配置文
件将请求发送给Struts2的核心组件DispatcherServlet。

3. 动作(Action)处理:DispatcherServlet根据配置文件中的信息,确定请求对应的Action类,并创建该类的实例。

Action是一
个POJO(Plain Old Java Object)类,用于处理具体的业务逻辑。

4. 结果视图(View)解析:Action类中的方法执行完业务逻辑后,会返回一个结果视图。

Struts2的结果视图可以是JSP页面、HTML、JSON等格式。

DispatcherServlet根据配置文件中指定
的结果视图解析器,将结果视图转化为最终的响应内容。

5. 结果响应:DispatcherServlet将最终的响应内容发送给客户端,客户端浏览器会将响应内容渲染并呈现给用户。

在这个过程中,Struts2框架提供了一系列的核心组件来协助
处理请求和响应,包括拦截器(Interceptor)、值栈(ValueStack)、类型转换器(Type Converter)等。

这些组件
能够帮助开发者处理表单提交、数据验证、数据转换等常见的web开发任务,从而简化开发过程。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档