[Java Web]Struts2基础总结(三)

OGNL表达式

OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁。主要用法有:

访问值栈中action的属性

username = <s:property value="username"/>

访问值栈中的对象的属性(需要get set方法)

<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/>

访问值栈中对象的方法

<s:property value="password.length()"/>

访问值栈中action的方法

<s:property value="add()" />

访问静态方法

<s:property value="@[email protected]()"/>

访问静态属性

<s:property value="@[email protected]"/>

访问构造方法

<s:property value="new struts.action.User(8)"/>

访问List/Set/Map

<s:property value="users"/>

访问List/Set中某个元素

<s:property value="users[1]"/>

访问List中的元素某个属性的集合

<s:property value="users.{age}"/>

访问List中某个元素的属性

<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/>

访问Map中某个元素

<s:property value="users.zhangsan"/> | <s:property value="users['zhangsan']"/> | <s:property value="users[\"zhangsan\"]"/>

访问Map中所有的Key

<s:property value="users.keys"/>

访问Map中所有的Value

<s:property value="users.values"/>

访问容器的大小

<s:property value="users.size()"/> | <s:property value="users.size"/>

投影(? 选择满足条件的所有元素)

<s:property value="users.{?#this.age==1}[0]"/>

投影(^ 选择满足条件的第一个元素)

<s:property value="users.{^#this.age>1}.{age}

投影($ 选择满足条件的最后一个元素)

<s:property value="users.{$#this.age>1}.{age}"/>

声明式的异常处理

在程序中放弃try catch处理异常,通过struts.xml中的<exception-mapping>处理,该标签即可放在<action>标签中,也可以作为默认处理方案放在<global-exception-mapping>中,例如:

<global-results>
    	<result name="error">/error.jsp</result>
</global-results>

<global-exception-mappings>
    	<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>

<action name="user" class="struts.action.UserAction">
       	<result>/admin.jsp</result>
       	<exception-mapping result="error" exception="java.sql.SQLException" />
       	<result name="error">/error.jsp</result>
</action>

I18N国际化处理

用于项目的国际化,前台页面可以通过<s:text>或者<s:i18n>通过ActionSupport的getText方法取出配置文件中的内容,配置文件有三种写法

  1. Action级别,命名规范是"类名_语言名_地域名"
  2. 包级别,命名规范是"package_语言名_地域名"
  3. 全局级别,命名规范是"自定义名_语言名_地域名",同时在struts.xml文件中配置
    <constant name="struts.custom.i18n.resources" value="自定义名"></constant>   

自定义类型转换器

当对象中的属性没有get set方法时,通过自定义类型转换器进行转换,方法为:

  1. 实现一个转换器类,继承StrutsTypeConverter类,重写convertFromString和convertToString方法:

    public class MyPointConverter extends StrutsTypeConverter{
    
    	@Override
    	public Object convertFromString(Map context, String[] values, Class toClass) {
    
    			Point p = new Point();
    			String[] strs = (String[])values;
    			String[] xy = strs[0].split(",");
    			p.x = Integer.parseInt(xy[0]);
    			p.y = Integer.parseInt(xy[1]);
    			return p;
    
    	}
    
    	@Override
    	public String convertToString(Map context, Object o) {
    		// TODO Auto-generated method stub
    		return o.toString();
    	}
    
    }
  2. 建立properties文件配置信息,如果是Action级别,文件名为"类名-conversion",格式为"属性名=转换器类名"。如果是全局级别文件名为"xwork-conversion",格式为"需要转换类名=转换器类名"

Struts工作流程

  1. 客户端发起HttpRequest请求
  2. 通过Application的web.xml文件中的配置,将请求发送到FilterDispatcher(StrutsPrepareAndExecuteFilter)处理
  3. FilterDispatcher调用ActionMapper查找请求对应的Action,并交给ActionProxy处理
  4. ActionProxy寻找到准备调用的Action类,并创建一个ActionInvocation实例调用它的invoke方法
  5. ActionInvocation的invoke方法会查找配置文件中的下一个拦截器(Intercepter)并调用它的intercept方法,如果没有下一个拦截器则会调用Action类的execute方法
  6. 每个intercept方法 的执行中还会调用ActionInvocation的invoke方法,当所有的拦截器都调用过invoke方法后,将会调用Action类的execute方法,并得到result结果
  7. 反向执行完每个拦截器intercept方法 的后半部分,最后发送HttpResponse结果
时间: 2024-08-07 01:13:12

[Java Web]Struts2基础总结(三)的相关文章

java web进阶篇(三) 表达式语言

表达式语言(Expression Language ,EL)是jsp2.0中新增的功能.可以避免出现许多的Scriptlet代码 格式: ${ 属性名称 },  使用表达式语言可以方便的访问对象中的属性,提交的参数或者进行各种数学运算,而且使用表达式语言最大的特点是如果输出的内容是null,则会自动使用空字符串("")表示. <%request.setAttribute("name", "info");%> <h1>${n

java Web开发基础(一)工程项目文档结构

     2013年毕业后,在深圳工作开始是用.NET ASP.NET MVC做的项目,后来公司用java来做.于是就从.NET转java了.从.NET转java不是那么的难.今天刚好是清明节放假三天,整理了java web项目的文档结构. 一.Struts2+Spring+Hibernate 项目的文档结构   二.Spring MVC+MyBatis项目的文档结构   三.Tomcat文档目录结构

JAVA WEB SERVLET 基础知识点

Servlet Servlet Servlet API 概述 Servlet 编写基础的Servlet应用程序 1编写和编译Servlet类 2应用程序的目录结构 3调用Servlet ServletRequest ServletResponse ServletConfig ServletContext GenericServlet 1 HTTPServlet 2 HttpServletRequest 3 HttpServletResponse 处理HTML表单 使用部署描述符 掌握Servle

Java Web开发基础(1)-Servlet

概述 Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接.另外.Servlet也是一个用java语言的Servlet API编写的特殊的java类.它执行在Servlet容器中.它的功能是分析请求,处理请求,构造响应消息,它本来就处于web服务的线上这也非常easy理解.概念上就这么多了. Servlet容器 容器负责管理Servlet类,其内容包含:匹配Servlet,运行Servl

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

Java Web开发Tomcat中三种部署项目的方法

一般情况下,开发模式下需要配置虚拟主机,自动监听,服务端口,列出目录文件,管理多个站点等功能 准备工作: 软件包:apache-tomcat-6.0.20.rar 将软件包解压至硬盘一分区,进入%TOMCAT_HOME%/conf目录 一:server.xml 配置 1.配置端口,修改server.xml. <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"

【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式

一.struts.xml中的包和命名空间 1.Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间. 如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下 2.例如: <package name="lee" extends="struts-default"> <action name="

[Java Web]Struts2加起来(一个)

Struts2环境配置 进口Struts2的需要jar包 在WEB-INF/classes(src)文件夹下创建struts.xml文件 在web.xml文件里加入Struts过滤器信息 经常使用配置文件 struts.xml:用于存放Action映射关系.设置Struts配置信息 web.xml:用于配置容器的Struts过滤器,一般配置例如以下: <filter> <filter-name>struts2</filter-name> <filter-class

java web 相关基础概念的汇总

省去一些废话,反正是记录自学过程的,便于自己理清思路,自知自己资质欠佳,若有不对的地方还请不吝赐教. Java:是一种可以撰写跨平台应用软件的面向对象的程序设计语言.是由Sun公司1995年5月推出的Java程序设计语言和Java平台(SE/EE/ME). Java语言的特性:1.简单性. 2.面向对象:面向对象编程(Object Oriented Programming,OOP,即面向对象程序设计)是一种计算机编程架构.基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成.为了实现