创建struts2项目

要导入的包:(共9个)
commons-fileupload(上传下载包)
commons-io(输入输出包)
commons-lang 3-3.2(基础包)
commons-logging(日志包)
freemarker(模板引擎,通过模板生成文本输出的通用工具)
structs2-core(核心包)
xwork-core(一些类基于xwork)
ognl(表达式)
javassist-3.11.0.GA.jar(解析java类文件的一个包)
之后配置web.xml文档
web项目在启动tomcat时第一个启动的文件就是web.xml
首先定义过滤器
<filter>
<filter-name>struct2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
这里写完后按住ctrl点击鼠标左键如果可以跳转则证明正确
</filter>


filter的映射
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
/*是所有的都需要过滤
</filter-mapping>

映射与文件的filter-name应该保持一致

之后再src中创建struts的核心xml  struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

</struts>

之后创建action包
创建action类让其继承ActionSupport
Struts2中有一个默认的方法不指定方法名的话有一个execute()方法


之后去配置struts.xml中的action文件


2.Action搜索机制
第一步:判断package是否存在,如:path1/path2/path3/

如果package存在
第二步:则判断该package中action是否存在,如果不存在则去默认namespace的package里面寻找action
第三步:如果没有,则报错

如果package不存在:
第二步:检查上一级路径的package是否存在(直到默认namespace),重复第一步
第三步:如果没有则报错

 如果请求为/login.action,系统会根据根命名空间("/")中查找名为login的Action,如果在根命名空间中找到了名为login的Action,则该Action处理用户的请求;否则系统将转为在默认命名空间中寻找名为login的Action,如果默认的命名空间中有名为login的Action,则由该Action处理用户的请求。如果两个命名空间中都找不到名为login的Action,那么系统将出现错误。

      注意:命名空间只有一个级别。如果请求的URL是/bookservice/search/get.action系统将先在/bookservice/search的命名空间下查找名为get的Action,如果在该系统命名空间内找到名为get的Action,则由该Action处理该用户的请求;如果在该命名空间中没有找到名为get的Action,系统将直接进入默认的命名空间中查找名为get的Action,而不会在bookservice的命名空间下查找名为get的Action。
可以多个包使用同一个命名空间,但是相同的命名空间相当于同一个模块,也就是同一个包。
一个包中可以有name值相同的action,但是后面的action会把前面同名的action覆盖掉

4.servlet api:
httpRequest、httpResponse、servletContext
3个api对应jsp面向对象:request、response、application
servlet中可以直接调用servlet api
struts2 Action中execute没有任何参数,也就是不存在servlet api
struts2 提供了3种方式访问servlet api:
1.ActionContext类
2.实现***Aware接口
3.ServletActionCotext类

5.动态方法
动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。
三种方式:指定method属性、感叹号方式(不推荐)、通配符方式
1:<action name="add" method="add" class="com.imooc.action.HelloWorldAction">
2:<constant name="struts.enable.DynamicMethodInvocation" value="false">                                                </constant>
<action name="helloWorld" class="com.Action.HelloWorldAction">
      <result >/result.jsp</result>
      <result name="add">/add.jsp</result>
      <result name="update">/update.jsp</result>
      </action>
http://localhost:8080/HelloWorld/HelloWorld!add(或update).action
3: 第一个*代替{1},第二个*代替{2},result里的name是Action的返回值,action的里method是Action里的方法名,调用某个方法时最后目标就输入 {1}_{2}.action;这样可以访问多个Action里的方法.
<action name="*_*" method="{2}" class="com.imooc.action.{1}Action">
      <result >/result.jsp</result>
      <result name="add">/{2}.jsp</result>
      <result name="update">/{2}.jsp</result>
      </action>
http://localhost:8080/HelloWorld/HelloWorld_add.action


6.指定多个配置文件
<include file="helloworld.xml"></include>
如果是action太多的话不用写在一个struts.xml中 可以指定多个配置文件使用<include>添加到一个总的struts.xml文件中  <constant>还可以指定编码集
注意:
1.被include的标签一定要符合struts的dtd规范。也就是说被include的xml文件的内部格式要符合struts的xml文件规范。
2.xml文件的编码格式要相同,如果是utf-8,那么都是utf-8。

7.默认Action

当路径不存在时自动跳转到默认Action
<default-action-ref name="index"></default-action-ref>
    	
     	<action name="index">
    		<result>/error.jsp</result>
    	</action>   	
    	
    	<action name="log_*" method="{1}"  class="com.wayne.action.LoginAction">
    		<result name="login">/login.jsp</result>
    		<result name="logout">/logout.jsp</result>
    	</action>



8.strut2后缀
三种方式:
1.struts.properties中:struts.action.extension=action,do,struts2
2.struts.xml中增加常量constant:
<constant name="struts.action.extension" value="action,do,struts2"></constant>
3.在过滤器中配置intt-param参数:
<init-param>
  <param-name>struts.action.extension</param-name>
  <param-value>do,action,strtus2</param-value>
</init-param>

9.接收参数
1,使用Action的属性接受参数,在Action中定义需要接受的属性,并写它的set/get方法。
2,使用DomainModel接受参数,创建实体类定义需要接受的属性,并set/get方法,在Action中创建实体类名属性。并在界面进行指定。
3,使用ModelDriver接受参数,在Action中实现ModelDriver<实体类名>接口,并实现方法返回当前需要转换的对象,删除set/get方法,并对 对象 进行实例化,并取消指定。
4,request
5,获取List集合中的参数。获取多个参数。

第一种接收参数的方法:直接在action类中创建相应的属性和getter和setter,和前端的name名字相同。eg:前端的username,在action类中就要建立一个private String username; Struts会自动映射为这个属性赋值

第二种接受参数的方法:使用DomainModel,将username 和password两个属性封装为一个类User(必须是标准的JavaBean),在action中声明这个属性:private User user; 同时为user设置getter和setter;在前端中的name需要设置为user.name和user.password,才能映射成功

第三种接收参数的方法:使用ModelDriven<T>接口,这个action必须实现这个接口的public T getModel()方法。此时声明的属性必须实例化,eg: private User user = new User(); 同时不需要getter和setter。前端的name也只需要写username和password就可以,不需要再加域了。这种方法时最推荐的方法,因为可以减少前后端的耦合





结果处理类型
9.input的用法处理结果
1.Action类的父类ActionSupport中有一个收集错误信息的容器Map,错误信息是名称fieldName和描述信息errorMessage的键值对

2.struts框架把login.jsp中的表单数据传递给Action类的方法进行处理后,如果有错误则错误信息被添加到容器里,方法返回值INPUT

3.struts框架从处理结果中提取出错误信息,并注入到INPUT对应的jsp文件中,将该jsp返回给用户

4.用户得到jsp后,根据标签<s:fielderror>的属性name匹配错误信息fieldName,将错误信息显示在视图对应位置
结果类型input的效果
 * 1.当参数类型转换错误时,如age输入框中的类型是字母等情况,方法自动返回input
 * 2.当action中存在addFiledError时:
 *    1)addFileError放在一般执行方法,addFieldError("", "");语句后面有返回input的语句
 *    2)addFileError放在validate()中
 *3.FileError的表现形式:
 *    在jsp页面中使用<s:fielderror/>标签,该标签name属性为addFieldError方法中的参数fieldName,在jsp页面中使用struts标签,
 *    需要导入标签库  语句:<%@ taglib prefix="s" uri="/struts-tags"  %>




全局结果:
将<result/>作为<global-result/>元素的子元素配置。
局部结果:
将<result/>作为<action/>元素的子元素配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值