struts(一)

Struts.xml 配置

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />  //常量名

<constant name="struts.devMode" value="false" />     //是否启动开发模式

<include file="example.xml"/>

<package name="default" namespace="/" extends="struts-default">

<default-action-ref name="index" />

<action name="index">

<result type="redirectAction">

<param name="actionName">HelloWorld</param>

<param name="namespace">/example</param>

</result>

</action>

</package>

一个package下可以配置多个action,一个action下也可以配置多个result

</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<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>  //把每个url提交到过滤器(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilte)

</filter-mapping>

</web-app>

当未给action中的result标签启用name 时默认的为 success

package标签的功能相当于Java中的包

web应用发布时,首选经过web.xml的过滤,再到struts.xml的配置中找到相应的action

namespace:

namespace决定了action的访问路径

当namespace为空时,匹配其他namespace不匹配的情况(相当于switch中default情况)

web应用程序的访问路径:httP//localhost:端口/webapp/namespace/action

Action:具体的视图的返回可以由用户自定义action 决定

三中方式:

实现 action 的方式可以是一个普通的 java类里边必须包含一个public String execute(){}方法

可以实现action接口

也可以继承ActionSupport(通常使用这个)

当没有定义action 的class时,会调用系统默认的action 方法返回值仍旧 是“success",根据返回值确定具体的视图

路径问题:

Struts中是根据action的路径决定,不要使用相对路径,使用绝对路径

Action执行的时候并不一定要执行execute方法可以在配置文件中配置Action的时候用method=来指定执行哪个方法

也可以在url地址中动态指定(动态方法调用DMI)(推荐)action的name和namespace保持一致,可以实现一个action下动态的方法调用,在url中指定使用哪个方法(url中用!方法名)

使用通配符,遵循约定优于配置(约定的好,可以简化配置)

action类和视图jsp 的名称有公共部分,各个action 的名称风格统一,各个jsp的名称风格统一

接受参数:

三中方式:1.属性方法

视图页面的 url的请求参数和action中的属性名称要一致,当调用方法时,系统会自动调用setXXX方法将请求参数传递,

若果类型不匹配会自动完成类型转换,构造函数必须是空参数的

2. DomainModel(域模型)或者增加 DTO(数据传输对象)方式

域模型就是一系列的对象模型,给出一系列的对象模型,在action中创建域模型对象,同样给出set和get方法以及构造函数

在url中使用对象名.属性名=valuel进行传值,系统会自动为我们创建一个相应的对象,然后调用域模型对象的set方法,之后调用action 的set对象的方法

3.模型驱动方式

解决中文问题:

在struts中增加   <constant name="struts.i18n.encoding" value="GBK" />配置   struts.i18n.encoding指的是国际标准化编码

简单的数据校验:

this.addFieldError("属性字段","错误信息"),可以向前台传送属性错误信息;在前台获取错误信息:

调用 struts 的标签库:<%@taglib uri="" prefix=" s"%> url指定路径,prefix指定使用标签的前缀,当错误信息在前台呈现时, struts2会使用<ul><li class="errorMessage">信息</li></ul>

<s:debug><s:debug>可以生成一个debug连接,会有一个键值栈,其中包含:Property Name 和Property Value

Struts ValueStack Debug(值占区)内容(访问直接使用property Name):

Object Property Name Property Value

texts

对象

actionErrors []

errors {关键字=[内容1,内容2],[],[]...}

PersonAction.personAction(Action 的路径) fieldErrors {关键字=[内容1,内容2],[],[]...}

errorMessages []

locale

actionMessages []

texts

Stack Context(栈环境) 区:(访问方式:#key)<以下只列出常用的>

key value

request

action

parameters

application

attr

session

可以通过<s:property value="property name" />获取相应的property value(注:标签前边的前缀是由引用标签库时指定的)

访问web元素:

获取Map类型的request,session,application,HttpServletRequest,HttpSession,servletContext

第一种方式(可以放到构造函数中,也可以放到execute()方法中:

request=(Map)ActionContext.getContext().get("request");

session=(Map)ActionContext.getContext.getSession();

application=(Map)ActionContext.getContext().getApplication();

第二种方式(使用泛型,实现RequestAware,SessionAware,ApplicationAware接口):

private Map<String, Object> request;

private Map<String, Object> session;

private Map<String, Object> application;

//DI dependency injection

//IoC inverse of control

public String execute() {

request.put("r1", "r1");

session.put("s1", "s1");

application.put("a1", "a1");

return SUCCESS;

}

@Override

public void setRequest(Map<String, Object> request) {

this.request = request;

}

@Override

public void setSession(Map<String, Object> session) {

this.session = session;

}

@Override

public void setApplication(Map<String, Object> application) {

this.application = application;

}

第三种:

private HttpServletRequest request;

private HttpSession session;

private ServletContext application;

public LoginAction3() {

request = ServletActionContext.getRequest();

session = request.getSession();

application = session.getServletContext();

}

public String execute() {

request.setAttribute("r1", "r1");

session.setAttribute("s1", "s1");

application.setAttribute("a1", "a1");

return SUCCESS;

}

第四种(实现ServletRequestAware接口)

private HttpServletRequest request;

private HttpSession session;

private ServletContext application;

public String execute() {

request.setAttribute("r1", "r1");

session.setAttribute("s1", "s1");

application.setAttribute("a1", "a1");

return SUCCESS;

}

@Override

public void setServletRequest(HttpServletRequest request) {

this.request = request;

this.session = request.getSession();

this.application = session.getServletContext();

}

模块包含:

<include file="url">将多个struts.xml配置文件合并

默认action配置:当所访问的action不存在是都提交给默认的 action

<default-action-ref name=""></default-action-ref>

时间: 2024-10-16 21:05:41

struts(一)的相关文章

struts(IDEA)的应用

目标 任务,完成以上功能. 第一步:模拟组长建project 1.建立一个空白工程(里面是没有文件的) 2.到此,我们见到新建的工程,目录里面没有其他文件,只有.idea目录 (这个是相关配置信息,可以不管它) 3.点击托管项目到码云 4. 输入账号和密码 注意:这里是直接创建远程仓库(在码云的服务器创建,不是本地) 作用:把本地的代码,统统托管到服务器上 5. 提示提交文件,但是没有文件可以提交,因为本项目本来就是空. 6.右下角,提示创建仓库成功. 同时,仓库里面,什么代码代码都没有 8.按

Struts初探(二)

总是找不到对应的action,但别的没用到动态方法调用的都没有问题. 报异常:java.lang.reflect.InvocationTargetException - Class: com.opensymphony.xwork2.inject.ContainerImpl$Me 实在是搞不清楚,我还以为全半角有问题,尚学堂的现有的工程,进去操作了一下是没有问题的,struts2-core-2.1.6.jar,我这里是2.3.31了,想一下只能是这个问题了吧. 在Struts2的action配置中

深入理解struts的运行机制

在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化.也谈不上优化,只是加上了点自己的想法 jar包准备 为什么会用到这两个jar包呢,因为我需要通过这个jar来解析xml配置文件. 新建项目 流程梳理 struts配置文件 <?xml version="1.0" encoding="UTF-8"?> <struts> <

struts文件上传

如果在表单中上传文件,表单的enctype属性为multipart/form-data struts默认上传文件大小为2M,如果需要修改,在配置文件中设置 <constant name="struts.multipart.maxSize" value="31457280"/> jsp页面 <input type="file" name="file"/> action中属性 private File fi

Hibernate+struts+JqueryAjax+jSON实现无刷新三级联动

看网上JqueryAjax三级联动的例子讲不是很全,代码也给的不是很全,给初学者带来一定的难度.小弟自己写了一个,可能有些地方不是很好,希望大家能够提出建议. 用的是Hibernate+struts2写的.http://blog.csdn.net/luckey_zh/article/details/22995389 以代码来说话吧. 首先是index1.jsp页面 [html] view plaincopy <%@ page language="java" import=&quo

SSH—Struts(三)—执行器(Action)

前面已经介绍了Struts的基本原理和控制器ActionServlet,按照一个请求的流程经过了ActionServlet之后就要到达Action类中做具体的处理了.ActionServlet通过ActionMapping获取映射的Action对象,通过Action来完成请求的处理,最后Action返回一个ActionForward对象. Action的创建 当请求经过ActionServlet时,ActionServlet会根据请求中截取的地址搜索对应名字的ActionMapping,即Str

struts的学习

在开发工具上进行struts的配置 1)新建项目,为项目添加Struts开发支持 2)为项目添加Struts开发支持,在项目点击右键,myeclipse->Add Struts Capabilities.选择支持的struts版本 3)在项目下的WebRoot下新建一个jsp文件.在Template to use下选在2中选择的struts版本 配置hello.jsp <%@ page language="java" pageEncoding="GBK"

struts 1.x 原理

Struts 当我接触到这个框架的时候,我就在想为什么是struts,而不是什么CraigFramework.结构.支撑,这样来理解也不难怪了. 为什么需要struts? 在struts in action这本书里,struts的开发者也讲到.在有了MVC后依然需要这样一个框架来支撑开发的工作,因为有了jsp和model和ejb来处理这一套流程还需要什么? 原理 首先需要在tomcat服务器启动,而tomcat启动后.部署在tomcat中的项目启动,相应在根据项目下的web.xml文件来实例化s

struts入门实例

创建maven web项目 配置pom.xml 加入struts的依赖包 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency> 下面是pom.xml的全部配置 <project xmlns="ht

Struts2 + Spring 学习(一)搭建struts开发环境

·为Web应用增加Struts2支持 1. 登陆struts2官网下载struts2的最新版,本文所用的是Struts 2.3.16.2 我们所下载的压缩包内内容应给如下 其中,apps包含了struts2的实例应用,docs包含了struts2的相关文档,lib包含了Struts2框架的核心类库以及struts2的第三方插件类库,src包含了struc包含了struts2框架的全部源码. 2. 在Eclipse新建Web工程,将是所用到的类库放到WEB-INF/路径下 3. 编辑Web应用的w