创建struts2项目

来源:互联网 发布:国外优化软件 编辑:程序博客网 时间:2024/05/18 23:25
要导入的包:(共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类让其继承ActionSupportStruts2中有一个默认的方法不指定方法名的话有一个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、servletContext3个api对应jsp面向对象:request、response、applicationservlet中可以直接调用servlet apistruts2 Action中execute没有任何参数,也就是不存在servlet apistruts2 提供了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).action3: 第一个*代替{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,struts22.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,request5,获取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类的方法进行处理后,如果有错误则错误信息被添加到容器里,方法返回值INPUT3.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/>元素的子元素配置。

原创粉丝点击