struts2 的核心配置文件
- 名称和位置是固定的
- 在配置文件中主要有三个标签,package,action,result,标签里面有属性
package 标签
- package 标签类似于Java中的包,为了区别不同的action,必须首先写package标签,在package里面才能配置action
- name属性
- name属性值和功能本身是没有关系的
- 在一个配置文件中可以写多个package标签,但是name属性值是不能相同的
- extends属性
- 属性值是固定的
- 写了这个属性后,在package 中配置的类具有了action的功能
- namespace 属性
- 默认值是’/’
- namespace 属性值和action标签内的name属性构成了访问路径
action标签
action 标签配置action访问路径
name属性
- name属性和package标签的namespace属性的值一起构成了访问路径
- package内部可以添加多个action标签,但是action标签的name属性值是不能一样的
- class 属性
- action 的完整路径
- method 属性
- 表示要执行action的哪个方法,默认的是执行execute方法
result标签
- 根据action方法的返回值,配置到不同的路径里面
- name 属性
- 和方法的返回值一样
- 如果一样,那就将会跳转到result指定的页面
- 如果方法有返回值,但是在result 标签内没有和方法的返回名一样的name属性值,那么就会报错404
- SUCCESS :name属性的默认值
- NONE:action执行完不返回视图
- ERROR:action执行失败,返回错误视图
- LOGIN:action因为用户没有登录返回登录视图
- INPUT:action登录的时候,需要获取前端的参数,input代表这个参数输入的界面,参数没有校验成功,则返回该视图
- 和方法的返回值一样
- ==type 属性==
- 配置如何 到路径中(转发或者重定向)
- ==转发== dispatcher
- ==重定向到页面== redirect
- ==重定向到另一个action==redirectAction
- type属性默认值是做转发操作
- 配置如何 到路径中(转发或者重定向)
struts2 常量配置
- ==在struts.xml文件中配置==
- 在src下面创建struts.properties 进行修改
在web.xml进行配置
==常用的struts2常量配置==
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 所有匹配*.action的请求都由struts2处理 -->
<constant name="struts.action.extension" value="action" />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="false" />
<package name="basePackage" extends="struts-default">
</package>
</struts>
- struts.i18n.encoding=UTF-8
- 使用Servlet接受表单中文数据,需要进行处理编码问题
- 作用:
- 表单提交到action里,在action里可以获取表单 提交的数据
- 如果在action获取表单通过post方式提交的数据含有中文,中文乱码问题就已经解决了,,不需要自己处理问题
分模块开发
- 单独写配置文件,讲我们定义的配置文件引入到核心配置文件即可
- 就好像在写前端页面的时候一样,将写好的js,css文件引入到html中,即可,这样就实现了 模块开发
action 编写方式
- 创建普普通类,这个类不继承任何类,不实现任何接口
- 创建类,实现接口Action
- ==创建类继承ActionSupport==
- 第二中和第三种方式可以使用action接口中的一些常量,
- 第二种必须要实现execute方法,不方便
action 方法
- action的方法如果有返回值,那么必须是String类型
- 如果又返回值,那么必须在result标签的name属性有相同的值,如果没有会报错404,结果没有定义的 错误
- ==action方法可以没有返回值,两种设置方法==
- 将方法的返回值类型改为void(不推荐使用)
- 或者return “none” ;或者return NONE
- NONE 是action接口的常量,想要使用action接口常量,需要实现接口,或者继承actionsupport
- 如果没有返回值那么就可以不需要使用resutl进行配置了
==访问action 的方法==
- 使用action标签内的method属性指定要执行的action方法
- 定义action类
- 定义action核心配置文件
- 这种方式可以指定要访问的方法,但是如果有大量的方法需要写,那么就需要大量的配置文件,显然是不合适的
- ==使用通配符实现==
- 如果没哟进行配置,默认访问的是action中的execute方法,显然这样有很多的局限性
- 第一:一个action中指定定义execute方法了,虽然定义了多个,但是 配置文件只能指定一个,其他都是无效的
- 第二:这样的一个action一个小功能,和Servlet相似,代码冗余,
- 综上所诉,所以需要使用统配符的方式,一个action中配置多个方法,有请求路径动态调用
- 在action 标签里面name属性,name属性里面写符号 *
- 在method中获取匹配的内容,方式{第几个星号,从1开始计数}
- 如果有多个可以通过{星号的索引,从1开始计数}
- * 代表匹配任意的内容
- 如果没哟进行配置,默认访问的是action中的execute方法,显然这样有很多的局限性
- 动态访问实现(不推荐使用)
设置eclipse 访问页面不需要项目名
- 点击项目—右键—-properties—web project settings—context root –改为/