struts2-1-基本配置

来源:互联网 发布:数据对比分析ppt模板 编辑:程序博客网 时间:2024/06/15 04:38

环境:

eclipse+jdk8+tomcat+struts-2.3.32-min-lib.zip

1.web.xml:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1"><display-name>strutsNote1</display-name><filter><filter-name>struts2</filter-name><!-- struts2的核心拦截器 :本质:就是实现Filter --><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

2.struts2的默认配置文件是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><!--  struts2的常量配置:1.constant用于常量的配置2.struts.properties文件中配置3.web.xm中通过<init-param>配置 -->    <!-- 改了配置文件不需要重部署 --><constant name="struts.devMode" value="true"></constant><!-- 改变默认编码 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 开始支持访问静态方法 ognl --><constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant><!-- struts2的package配置:name:必填属性,定义包的名字,以便其他包引用namespace:可选属性,该属性定义该包的命名空间extends:表明继承了那个包abstract:表明该包是否是一个抽象包,抽象包中不能定义action,下面有案例struts.xml:是struts2的默认配置文件,struts2默认只加载这个xml文件struts.properties:shi web应用的默认struts2的配置文件同struts.xml一样,默认只加载它 --><!-- package 1 --><package name="MyStruts2" extends="struts-default"><!-- 继承了struts2-core-2.3.16.3.jar 里面的struts-defualt.xml文件 --><!-- 点击登陆时提交的url:http://localhost:8080/strutsNote1/login,便进入com.core.LoginAction类的默认方法execute()如果要指定一个特定的方法,添加method="方法名"login与action中的name对应  --><action name="login" class="com.core.LoginAction"><!-- action中没有指明方法那么登陆到这里时那么就会进入默认的方法( LoginAction类的execute方法,实际上LoginAction是继承了ActionSupport,但是高版本可以不写继承)--><result name="success">/WEB-INF/test/test.jsp</result><!-- name如果不写默认是success 这里的name值与action中调用的方法返回值对应那么就进入那个页面 --></action></package></struts>

com.core.LoginAction类对应的execute()的代码:

public String execute(){System.out.println("aaaaaaa=============");//System.out.println(username+"===name=login==="+password);return "success";}
访问:http://localhost:8080/strutsNote1/login

login和action中的name相呼应,便进入com.core.LoginAction的默认方法execute(),该方法返回“success”字符串,与result的name相呼应,故跳转到/WEB-INF/test/test.jsp页面

如果不想进入execute()方法,那么也可以设定特定的方法

<action name="login" method="方法名"   class="com.core.LoginAction">

案例二(对应的通配符配置):

<!-- package 2 --><package name="MyStruts2Test" extends="struts-default"><!-- 利用通配符 在登陆界面的form表单中如果form表单的acton='login_delete.action'那么就进入com.core.LoginAction的delete方法如果form表单的acton='login_update.action'那么就进入com.core.LoginAction的update方法这里的method="{1}":可以是项目名后面第一个用/分开的字符串也可以是如你的url为: ...项目名/login_随便什么A_随便什么B,那么"随便什么A"对应{1} , {1}:表示匹配第一个*"随便什么B"对应{2} , {1}:表示匹配第二个*--><action name="login_*" method="{1}" class="com.core.LoginAction"><result name="delete">/WEB-INF/test/delete.jsp</result><result name="update">/WEB-INF/test/update.jsp</result></action></package>
访问:http:localhost:8080/strutsNote1/login_delete

method={1}表示name中的第一个*,故进入com.core.LoginAction的delete方法,一下同理

案例三(命名空间):

对应的mingmingkongjian.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><!-- 命名空间一定要/keke  相当于将这个配置文件package放在不同的包下 根据不同的命名空间找到package--><package name="mingmingkongjian" extends="struts-default" namespace="/keke"><action name="logins" method="minming" class="com.core.LoginAction"><result >/WEB-INF/test/mingmingkongjian.jsp</result></action></package></struts><!-- package 4 --><!-- result中type的属性,默认值是dispatcherrequest.getRequestDiapather("login.jsp").forword(request,repsoinse);//转发对应下面的requestresponse.sendRedirect("loginSuccess.jsp");//重定向会导致数据的丢失对应下面的response在浏览器地址栏中输入http://localhost:8080/studyStruts01/keke/test_request.action会进入request方法http://localhost:8080/studyStruts01/keke/test_response.action 会进入response方法http://localhost:8080/studyStruts01/keke/test_plainText.action会进入plainText方法进入对应方法的url为:http://localhost:8080/studyStruts01/keke/test_方法名.actionresult中配置路径有相对路径和绝对路径之分绝对路径:以/开始相对路径没有以/开头result的子元素<param>的name有两个值,分别如下location:指定跳转到那个视图parse:指定逻辑视图资源名称中是否可以使用OGNL表达式案例:<result name="request"><param name="locationg">/resultType/resultType.jsp</param><param name="parse">true</param>//这是默认值</result>它与它是等价的<result name="request">/resultType/resultType.jsp</result> -->
因为不是在struts.xml中配置的,故需要在struts.xml中引用
<!-- package 3 --><!-- 当xml文件配置过多的时候引入文件     下面是尝试命名空间的作用--><include file="mingmingkongjian.xml"></include> 

访问的时候需要在action的值前加namespace的值


案例四(result中的type类型):

<!-- package 4 --><!-- result中type的属性,默认值是dispatcherrequest.getRequestDiapather("login.jsp").forword(request,repsoinse);//转发对应下面的requestresponse.sendRedirect("loginSuccess.jsp");//重定向会导致数据的丢失对应下面的response在浏览器地址栏中输入http://localhost:8080/strutsNote1/keke/test_request.action会进入request方法http://localhost:8080/strutsNote1/keke/test_response.action 会进入response方法http://localhost:8080/strutsNote1/keke/test_plainText.action会进入plainText方法进入对应方法的url为:http://localhost:8080/studyStruts01/keke/test_方法名.actionresult中配置路径有相对路径和绝对路径之分绝对路径:以/开始相对路径没有以/开头result的子元素<param>的name有两个值,分别如下location:指定跳转到那个视图parse:指定逻辑视图资源名称中是否可以使用OGNL表达式案例:<result name="request"><param name="locationg">/resultType/resultType.jsp</param><param name="parse">true</param>//这是默认值</result>它与它是等价的<result name="request">/resultType/resultType.jsp</result> --> <package name="resultType" extends="struts-default" namespace="/keke"><action name="test_*" method="{1}" class="com.core.LoginAction"><!-- 转发 --><result name="request">/resultType/resultType.jsp</result><!-- 重定向 --><result name="response" type="redirect">/resultType/resultType.jsp</result><!-- 它也是重定向 (重定向到一个已经定义好的action)它原来的url:为http://localhost:8080/strutsNote1/keke/test_redirectAction进入LoginAction的redirectAction方法返回redirectAction此时它的url为:http://localhost:8080/strutsNote1/keke/test_rA.action并且测试可知它没有进入chain方法根据url进入rA方法跳转页面也会丢失值 -->  <result name="redirectAction" type="redirectAction">test_rA</result><result name="rA" >/resultType/resultType.jsp</result><!-- 它跳转不会丢失值 --><result name="chain" type="chain">test_rA</result>   <!-- 打印页面的源代码  返回普通文本类容-->   <result name="plainText" type="plainText"><param name="charSet">UTF-8</param><param name="location">/resultType/resultType.jsp</param></result></action></package>
主要是跳转的方式不同


案例五

<!-- package 5 --><package name="tm-common-defaults" extends="struts-default" abstract="true"><!-- 加了abstract="true" 就不能在写action --><global-results><!-- 如果package A 继承了tm-common-defaults 只要A的result中没有name=login 那么如果有action方法返回login就重定向到login.jsp--><result name="login" type="redirect">/login.jsp</result></global-results></package>

抽象的package,以便其他的package继承


对应的LoginAction源码:

package com.core;/** * 登陆处理的Action  * LoginAction<BR> * 时间:2014年12月2日-下午10:13:03 <BR> * @version 1.0.0 *  extends ActionSupport */public class LoginAction {//private String username;private String password;//http://localhost:8080/strutsNote1/login//类的入口方法 execute()一个Action类的默认方法//不需要去继承ActionSupport//类命名规则:xxxxxxActionpublic String execute(){System.out.println("aaaaaaa=============");//System.out.println(username+"===name=login==="+password);return "success";}//保存资源public String save(){System.out.println(username+"==="+password);System.out.println("保存资源文件进入这里了");return "success";}public String delete(){System.out.println(username+"==="+password);System.out.println("删除进这里了...");//No result defined for action com.keke.login.LoginAction and result deletereturn "delete";//Result---找页面}public String update(){System.out.println("更新资料进入这里...");return "update";}public String minming(){System.out.println("命名空间...");return "success";}public String request(){System.out.println("========request");username="曹雪坤";password="123";System.out.println("test_request");return "request";}public String response(){username="曹雪坤";password="123";return "response";//Result---找页面}public String plainText(){System.out.println("========plainText");username="曹雪坤";password="123";return "plainText";}public String redirectAction(){System.out.println("========redirectAction");username="曹雪坤";password="123";return "redirectAction";}public String rA(){System.out.println("=======rA==========");return "rA";}public String chain(){System.out.println("========chain");username="曹雪坤";password="123";return "chain";}//生产属性的getter/setterpublic String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}









原创粉丝点击