在Struts2中,若你的所有页面都放在pages这样的目录下,并且没有进行特别的配置,而你在对外访问的时候,不想通过jsp,而是使用Struts的action来进行处理,这样,即所有的jsp都需要配置一个对应的Action.
假设我配置了Struts2的扩展名为.do.
如http://localhost:8080/myapp/admin/main.do希望是访问我的web/pages/admin/main.jsp
这样一来,所有的页面的显示,均需要配置一个action.有时,我们仅是需要显示一个信息提示的页面,并不需要作页面的数据处理,这时,我们可以配置一个公共的Action作为这些访问的缺省处理。该处理则仅显示对应的jsp即可。
1.在Struts.xml中配置一个能动态处理的Action.该Action包括一个动态的视图属性,如
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value="do" />
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="xhtml"/>
<constant name="struts.custom.i18n.resources" value="conf/message" />
<package name="default" extends="struts-default">
<default-action-ref name="defaultAction"/>
<action name="defaultAction" class="com.ht.web.action.BaseAction">
<result>${successResultValue}</result>
</action>
</package>
</struts>
其中successResultValue为BaseAction中的属性。
如下为BaseAction的实现:
import org.apache.struts2.dispatcher.DefaultActionSupport;
public class BaseAction extends DefaultActionSupport{
@Override
public String execute() throws Exception {
HttpServletRequest request=getRequest();
String uri=request.getRequestURI();
String url=uri.substring(request.getContextPath().length());
url=url.replace(".do", ".jsp");
url="/pages"+url;
setSuccessResultValue(url);
return SUCCESS;
}
}
其中DefaultActionSupport的代码如下:
/*
* $Id: DefaultActionSupport.java 471756 2006-11-06 15:01:43Z husted $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2.dispatcher;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* A simple action support class that sets properties to be able to serve
*/
public class DefaultActionSupport extends ActionSupport {
private static final long serialVersionUID = -2426166391283746095L;
private String successResultValue;
/**
* Constructor
*/
public DefaultActionSupport() {
super();
}
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String requestedUrl = request.getPathInfo();
if (successResultValue == null) successResultValue = requestedUrl;
return SUCCESS;
}
/**
* @return Returns the successResultValue.
*/
public String getSuccessResultValue() {
return successResultValue;
}
/**
* @param successResultValue The successResultValue to set.
*/
public void setSuccessResultValue(String successResultValue) {
this.successResultValue = successResultValue;
}
}
因此大家可以看出,successResultValue可以为动态的result结果页。
所以在BaseAction中的execute,则把逻辑视图的url,转成真正的物理视图jsp,设置至successResultValue变量中去,然后再由struts的ActionMapping去处理。
分享到:
相关推荐
在IT行业中,SSH...通过这些配置,SSH能够协同工作,Spring负责整体控制和事务管理,Struts2处理用户交互,Hibernate处理数据库操作。这种整合提供了强大的功能,使开发者能更专注于业务逻辑,而非底层技术细节。
- 通过ActionMapping,Struts2能够根据请求URL找到对应的Action处理程序。 #### 六、文件上传配置 ##### 1. **Multipart配置** - **MultipartRequestHandler**:处理文件上传请求的关键组件。 - 默认使用`org....
4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的...
- 开发者只需在Action类中定义文件域,Struts2会自动处理文件上传的细节。 #### 六、Struts2标签库 - **Struts2标签使用原理解疑**: - Struts2的标签库主要基于JSP技术实现。 - 这些标签内部使用了OGNL表达式...
- **FilterDispatcher和Action**:FilterDispatcher是Struts 2的前端控制器,它负责处理所有HTTP请求并转发给相应的Action;Action是业务逻辑的主要承载者。 - **配置文件**:Struts 2使用XML配置文件来管理框架的...
- `web.xml`中定义了Struts2过滤器的配置,确保所有请求都经过Struts2处理。 - **3.2 使用配置文件struts.xml实现页面导航定义** - **知识点**: 解释了如何使用`struts.xml`文件定义页面间的跳转规则。 - **核心...
ActionServlet是Struts框架的核心组件,用于处理用户请求,并将请求转发给合适的Action处理。在配置ActionServlet时,可以通过以下参数来支持模块化: - **Config**: 配置缺省模块的路径,默认为`/WEB-INF/struts-...
在 Struts 框架中,**ActionServlet** 扮演了 MVC 模式中的 **控制器** 角色。 - **用户界面** 主要通过 JSP (Java Server Pages) 来构建,并且不包含业务逻辑,这部分属于 MVC 中的 **视图(View)** 部分。 - 用户...
数据标签在Struts2中扮演着数据传输和处理的角色。 2. **控制标签**:控制标签用于控制程序的执行流程,比如执行条件判断和循环控制,它们类似于传统编程语言中的控制流语句。 3. **UI标签**:这类标签负责生成Web...
通过上述步骤,我们可以清晰地看到如何利用Struts2框架中的`<s:doubleselect>`标签实现动态的缺省值设置功能。这种方法不仅能够提高用户体验,还大大简化了开发工作量。在实际项目中,可以根据具体需求灵活调整数据...
Struts2以**过滤器**(Filter)为核心,采用**拦截器**(Interceptor)机制来处理用户的请求。这种设计模式提高了代码的复用性,并简化了控制器的开发工作。 3. **构建Struts2应用的基础类库** 构建Struts2应用...
Struts2是一个流行的MVC框架,其输入校验可以通过在Action类中处理方法、继承`ActionSupport`并重写`validate()`方法或使用Struts2的内置校验框架来实现。 Struts2的工作原理涉及一系列步骤,包括客户端的HTTP请求...
import org.apache.struts.action.ActionForward; /** * * @author yangjuqi 2007-06-13 * @struts.action name="biddingForm" path="/carriageBidQuery" validate="false" * @struts.action-forward name=...
- **与Struts比较**:Spring不强制使用FormController,允许直接操作任何对象,避免了ActionForm和Action之间的绑定。 - **与WebWork比较**:Spring的控制器、命令对象和模型概念更明确,而WebWork将这些角色集中...
过滤器是在 java web 中,你传入的 request、response 提前过滤掉一些信息,或者提前设置一些参数,然后再传入 servlet 或者 struts 的 action 进行业务逻辑。 7. JAVA 语言如何进行异常处理 Java 通过面向对象的...