struts2入门

来源:互联网 发布:淘宝安装师傅怎么加盟 编辑:程序博客网 时间:2024/04/30 20:18
1.创建javaweb  工程
2.找到开发struts应用需要的jar包
3.创建jsp文件(webroot里放个文件夹 如primer)
4.创建action文件
package(给个包)
add   action
5.编写Struts2的配置文件
在src下面    名字必须叫struts.xml(因为底层引用的就是这个名称)

6.在web.xml中加入Struts2 MVC框架启动配置

创建如下图的文件

test.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>       入门的路径:<br>        <a href="${pageContext.request.contextPath}/primer/helloWorldAction.action">helloWorld</a><br>             </body></html>

/primer/helloWorldAction.action是根据struts.xml进行配置的namespace+action

HelloWorldAction

import com.opensymphony.xwork2.Action;public class HelloWorldAction implements Action {@Overridepublic String execute() throws Exception {System.out.println("HelloWorldAction....");return "success";}}

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><package name="primer" namespace="/primer"  extends="struts-default"><action name="helloWorldAction" class="reed.HelloWorldAction"><result name="success">/primer/success.jsp</result></action></package></struts>

解析

<!-- /primer/helloWorldAction.action
        package:包
            * name:包名,唯一的,必选项
            * namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是"/"。页面中请求连接的前半部分
            * extends:继承

             * 为什么要继承这个struts-default.xml文件?

                * extends="struts-default":struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件
              
     -->

<!--
            action:
                * name:对应页面中请求连接的后面半部分
                * class:对应要执行的类的完整路径
         -->

<!--
                result:结果类型
                    * name:对应的是执行的类的方法的返回值
                        public String execute() throws Exception {
                            System.out.println("HelloWorldAction ************* execute()");
                            return "success";
                        }
                    * 后半部分的文本内容:要转向到的页面
             -->


web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>  <filter>  <filter-name>StrutsPrepareAndExecuteFilter</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>  <filter-name>StrutsPrepareAndExecuteFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping> </web-app> 

键入 http://localhost:8080/Mystruts/primer/test.jsp

跳出页面

入门的路径:
helloWorld

点击  helloWorld

跳转至  http://localhost:8080/Mystruts/primer/helloWorldAction.action


如果action没有指定class,如下

<?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><package name="primer" namespace="/primer"  extends="struts-default"><action name="helloWorldAction"><result name="success">/primer/success.jsp</result></action></package></struts>

相同的过程,结果会和上面相同,但是并不是因为执行了HelloWorldAction

而是没有为action指定class
                * 在struts2框架底层的struts-default.xml文件中,配置了默认执行的类
                    com.opensymphony.xwork2.ActionSupport
                        public String execute() throws Exception {
                            return SUCCESS;
                        }
                * 实际上,默认执行的是底层提供的ActionSupport类的execute()方法
                * result结果类型,默认是根据struts2框架底层提供的ActionSupport类的execute()方法返回值,进行跳转



如何配置默认的action

将test.jsp改为

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>        测试struts2 输出没有命名空间helloworld:<br>        <a href="${pageContext.request.contextPath}/primer/userAction.action">helloWorld</a><br>  </body></html>

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><package name="primer" namespace="/primer"  extends="struts-default"><default-action-ref name="helloWorldAction"></default-action-ref><action name="helloWorldAction" class="reed.HelloWorldAction"><result name="success">/primer/success.jsp</result></action></package></struts>
则,在primer包下没找到useraction,将会执行默认的HelloWorldAction

------------------------------------------------------------------------------------------------------------------------

struts中返回结果类型(type))

新建项目如下



struts_resulttype.xml

默认情况下是 dipatcher

<?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><package name="resulttype" namespace="/resulttype"  extends="struts-default"><action name="resulttypeAction" class="reed.resulttype.ResulttypeAction"><result name="success">/resulttype/success.jsp</result></action></package></struts>

指明dispatcher

<?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><package name="resulttype" namespace="/resulttype"  extends="struts-default"><action name="resulttypeAction" class="reed.resulttype.ResulttypeAction"><result name="success" type="dispatcher">/resulttype/success.jsp</result></action></package></struts>

指明dispatcher的标准写法

<?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><package name="resulttype" namespace="/resulttype"  extends="struts-default"><action name="resulttypeAction" class="reed.resulttype.ResulttypeAction"><result name="success" type="dispatcher"><param name="location">/resulttype/success.jsp</param></result></action></package></struts>


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><include file="reed/resulttype/struts_resulttype.xml"></include></struts>

package reed.resulttype;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ResulttypeAction extends ActionSupport{@Overridepublic String execute() throws Exception {System.out.println("ResulttypeAction ************ execute()");HttpServletRequest request=ServletActionContext.getRequest();request.setAttribute("username", "username_request");return "success";}}

form.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>    <form action="${pageContext.request.contextPath}/resulttype/resulttypeAction.action"           name="form1"  method="post">      <input type="submit" value="提交">    </form>  </body></html>

success.jsp
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>            resulttype :   ${requestScope.username}  </body></html>

键入  http://localhost:8080/Mystruts/resulttype/form.jsp

点击提交

跳转至

http://localhost:8080/Mystruts/resulttype/resulttypeAction.action

页面显示  resulttype : username_request

页面能显示,说明是dispacher

后台显示

ResulttypeAction ************ execute()


讲struts_resulttype.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><package name="resulttype" namespace="/resulttype"  extends="struts-default"><action name="resulttypeAction" class="reed.resulttype.ResulttypeAction"><result name="success" type="redirect">/resulttype/success.jsp</result></action></package></struts>

重复上面的操作:页面显示页面显示  resulttype :

不能获取到数据



重定向到action

<?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><package name="resulttype" namespace="/resulttype"  extends="struts-default"><action name="resulttypeAction" class="reed.resulttype.ResulttypeAction"><result name="success" type="redirectAction"><!-- param:* actionName:指定 “目的地” 动作的名字。指定的是struts.xml文件action标签的name属性的值* namespace:指定的是struts.xml文件action对应的package下的namespace属性的值 --><param name="actionName">helloWorldAction</param><param name="namespace">/primer</param></result></action></package></struts>
----------------------------------------------------------------------------------------------------------------------------------
action标签里的method属性

* struts2框架运行时,默认执行action类中的execute()方法

            * 在action标签里的method属性:指定的是要执行action类中的哪个方法


package reed.pattern;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class BookAction extends ActionSupport{@Overridepublic String execute() throws Exception {System.out.println("BookAction ********* execute()");return "success";}/*     * 自定义方法:     *         * 由public来修饰的     *         * 必须是String返回类型     *         * 不能传参数     *         * 方法名自定义     *      *     * 总之,一句话:除了方法名与execute()不一样,其他所有内容都一样。     *      */public String add() throws Exception {System.out.println("BookAction ********* add()");return "add";}}

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><package name="pattern" namespace="/pattern"  extends="struts-default"><action name="bookAction" class="reed.pattern.BookAction" method="add"><result name="add">/pattern/BookAction.jsp</result></action></package></struts>

test.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>     访问BookAction_add 测试action标签中的method属性<br>     <a href="${pageContext.request.contextPath}/pattern/bookAction.action"> 测试</a><br>    <br>     <br>   </body></html>

键入http://localhost:8080/Mystruts/pattern/test.jsp

点击测试,则控制台输出BookAction ********* add()并进行相应跳转
-------------------------------------------------------------------------------------------------------

struts2通配

package reed.pattern;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class BookAction extends ActionSupport{@Overridepublic String execute() throws Exception {System.out.println("BookAction ********* execute()");return "success";}public String add() throws Exception {System.out.println("BookAction ********* add()");return "add";}public String delete() throws Exception {System.out.println("BookAction ********* delete()");return "success";}}

package reed.pattern;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UserAction extends ActionSupport {@Overridepublic String execute() throws Exception {System.out.println("UserAction ********* execute()");return "success";}/* * 自定义方法: * * 由public来修饰的 * * 必须是String返回类型 * * 不能传参数 * * 方法名自定义 *  * * 总之,一句话:除了方法名与execute()不一样,其他所有内容都一样。 *  */public String add() throws Exception {System.out.println("UserAction ********* add()");return "add";}public String delete() throws Exception {System.out.println("UserAction ********* delete()");return "success";}}



<?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><package name="pattern" namespace="/pattern"  extends="struts-default"><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a>    <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a>     <br>     <br>    <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a>    <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a> -->            <!-- {1}匹配就是"*"通配符的第一个子串 -->               <!-- {2}匹配就是"*"通配符的第二个子串 --> <action name="*_*" class="reed.pattern.{1}" method="{2}"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/{1}.jsp</result></action></package></struts>


键入  http://localhost:8080/Mystruts/pattern/test.jsp

分别点击


图书添加
图书删除


用户添加
用户删除

控制台显示

BookAction ********* add()
BookAction ********* delete()
UserAction ********* add()
UserAction ********* delete()

---------------------------------------------------------------------------------------------------

struts2文件上传

新建web工程如下图

uploadAction

import java.io.File;import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UploadAction extends ActionSupport {  //上传文件的存储的临时文件: private File uploadImage;//上传文件的类型:text/plainprivate String uploadImageContentType;//上传文件的真是名称private String uploadImageFileName;public File getUploadImage() {return uploadImage;}public void setUploadImage(File uploadImage) {this.uploadImage = uploadImage;}public String getUploadImageContentType() {return uploadImageContentType;}public void setUploadImageContentType(String uploadImageContentType) {this.uploadImageContentType = uploadImageContentType;}public String getUploadImageFileName() {return uploadImageFileName;}public void setUploadImageFileName(String uploadImageFileName) {this.uploadImageFileName = uploadImageFileName;}public String saveFile(){System.out.println("UploadAction *********** saveFile()");ServletContext sc = ServletActionContext.getServletContext();String path = sc.getRealPath("/fileupload");File file = new File(path, uploadImageFileName);try {FileUtils.copyFile(uploadImage, file);} catch (IOException e) {e.printStackTrace();}uploadImage.delete();//清除零时文件return "success";}}

struts_upload.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><package name="upload" namespace="/upload"  extends="struts-default"><action name="uploadAction_saveFile" class="reed.upload.UploadAction" method="saveFile"><result name="success">/upload/success.jsp</result>        <result name="input">/upload/error.jsp</result>       </action></package></struts>

upload.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>    <form action="${pageContext.request.contextPath}/upload/uploadAction_saveFile.action"            name="form1"  method="post"  enctype="multipart/form-data" >                          上传文件名称:<input type="file" name="uploadImage">           <input type="submit" value="上传">    </form>  </body></html>

键入 http://localhost:8080/Mystruts/upload/upload.jsp

上传

上传后的文件在E:\tools\tomcat\webapps\Mystruts\fileupload文件夹中


但是文件大小不能超过2M,超过2M则报错

因为默认最大值为2M

在stuuts.xml中配置
    <constant name="struts.multipart.maxSize" value="2097152000"></constant>

则可上传2g以内文件


还可以在struts_upload.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><package name="upload" namespace="/upload"  extends="struts-default"><action name="uploadAction_saveFile" class="reed.upload.UploadAction" method="saveFile"><result name="success">/upload/success.jsp</result><result name="input">/upload/error.jsp</result><interceptor-ref name="defaultStack">       <!-- 配置上传文件的大小,struts.xml中配置的是总大小,此处是文件上传的单个大小 -->       <param name="fileUpload.maximumSize">4000000</param><!-- 配置上传允许的文件类型 ,中间用逗号隔开--><param name="fileUpload.allowedTypes">text/plain,application/msword</param><!-- 文件允许后缀名 --><param name="fileUpload.allowedExtensions">.txt,.doc</param></interceptor-ref></action></package></struts>
-----------------------------------------------------------------------------------------------------------------

struts自定义拦截器

新建工程如下


import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UserAction extends ActionSupport {public String save(){System.out.println("UserAction ************* save()");return "success";}}

import java.util.Map;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;@SuppressWarnings("serial")public class ExpessionInterceptor implements Interceptor {public void init() {System.out.println("ExpessionInterceptor ********* init()");}public String intercept(ActionInvocation invocation) throws Exception {System.out.println("ExpessionInterceptor ********* intercept()");//reed.aop.UserAction@15b5783,动作类的对象System.out.println("invocation.getAction() : "+invocation.getAction());//reed.aop.UserAction@15b5783,与invocation.getAction()方法获取的是同一的对象System.out.println("invocation.getProxy().getAction() : "+invocation.getProxy().getAction());//userAction_save,自定义配置文件中的action标签的name属性的值System.out.println("invocation.getProxy().getActionName() : "+invocation.getProxy().getActionName());//save,对应动作类指定要执行的方法名System.out.println("invocation.getProxy().getMethod() : "+invocation.getProxy().getMethod());///aop,自定义配置文件中的package标签的namespace属性的值System.out.println("invocation.getProxy().getNamespace() : "+invocation.getProxy().getNamespace());//null返回结果System.out.println("invocation.getResult() : "+invocation.getResult());Map sessionMap = ServletActionContext.getContext().getSession();Object obj = sessionMap.get("user");if(obj==null||obj.equals("")){return "error";}else{return "success";}}public void destroy() {System.out.println("ExpessionInterceptor ********* destroy()");}}

struts_aop.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><package name="aop" namespace="/aop" extends="struts-default"><interceptors><!-- 声明自定义的拦截器 --><interceptor name="expessionInterceptor" class="reed.aop.ExpessionInterceptor" /><!-- 声明自定义拦截器栈 --><interceptor-stack name="expessionStack">                <interceptor-ref name="defaultStack"/>                                <!-- 配置使用自定义拦截器 -->                <interceptor-ref name="expessionInterceptor"/>                            </interceptor-stack></interceptors><!-- 配置修改struts2框架运行时,默认执行的是自定义拦截器栈 --><default-interceptor-ref name="expessionStack" /><action name="userAction_save" class="reed.aop.UserAction" method="save"><result name="success">/aop/success.jsp</result><result name="error">/aop/error.jsp</result></action></package></struts>

index.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>      用户登录!!!          <%        session.setAttribute("user","user");     %>        </body></html>

test.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags"   prefix="s"%><html>  <head>    <title>My JSP 'index.jsp' starting page</title>    </head>  <body>      测试拦截器:<br>        <a href="${pageContext.request.contextPath}/aop/userAction_save.action">test</a><br>    </body></html>

在浏览器键入http://localhost:8080/Mystruts/aop/test.jsp

则会跳转至error.jsp页面

另:服务器刚启动init方法就被执行输出ExpessionInterceptor ********* init()


若现在浏览器键入http://localhost:8080/Mystruts/aop/index.jsp

讲user注入缓存

再键入http://localhost:8080/Mystruts/aop/test.jsp

则跳转至success.jsp页面

-------------------------------------------------------------------------------------------------

手工验收

新建工程如下

import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ValidateAction extends ActionSupport {private String username;private String psw;public void setUsername(String username) {System.out.println("ValidateAction ************ setUsername()");this.username = username;}/* * 验证方法: * * 该动作类action必须继承ActionSupport或者实现Validateable接口 * * 必须重写Validateable接口提供的validate()方法 *  * * 必须要保证setUsername()、validate()、login()方法的执行顺序如下: * * setUsername() * * validate() * * login() *  *  * 如果登录失败,如何处理: *  * this.addFieldError( key, value); *  * key:错误提示字段 *  * value:错误提示信息 *  *  * 通过底层代码说明: *  public synchronized void addFieldError(String fieldName, String errorMessage) {        final Map<String, List<String>> errors = internalGetFieldErrors();//声明一个map集合        List<String> thisFieldErrors = errors.get(fieldName);//声明一个list集合,放入对应错误提示信息        if (thisFieldErrors == null) {//如果list集合为空            thisFieldErrors = new ArrayList<String>();//重新创建一个list集合            errors.put(fieldName, thisFieldErrors);//把list集合放入到map集合中        }        thisFieldErrors.add(errorMessage);//把错误提示信息放入到list集合中    } *  * * 什么时候才是验证通过? * * 验证通过:1、map集合不存在;2、map集合存在并为空 * * 验证不通过:map集合存在并且不为空 *  * * 分析需求: * * 用户名不能为null ,"" * 密码不能为null, "" ,并且密码的长度6-12之间  *  * * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证? * * 重写的validate()方法,针对所有业务方法进行验证 * * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证 * * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名 *  */public void validateLogin() {System.out.println("ValidateAction ************ validate()");if(username==null||username.equals("")){this.addFieldError("error", "用户名不能为空!");}if(psw==null||psw.equals("")){this.addFieldError("error", "密码不能为空!");}else{String pattern = "^[0-9a-zA-Z]{6,12}$";Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(psw);boolean b = m.matches();if(!b){this.addFieldError("error", "密码的长度必须在6至12之间!");}}}public String login(){System.out.println("ValidateAction ********* login()");System.out.println("username = "+username);System.out.println("password = "+psw);return "success";}public String test(){System.out.println("ValidateAction ********* test()");return "success";}public String getUsername() {return username;}public String getPsw() {return psw;}public void setPsw(String psw) {this.psw = psw;}}

struts_validate.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><package name="validate" namespace="/validate"  extends="struts-default"><action name="validateAction_*" class="reed.validate.ValidateAction" method="{1}"><result name="success">/validate/success.jsp</result><result name="input">/validate/login.jsp</result></action></package></struts>

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags" prefix="s" %><html>  <head>        <title>My JSP 'login.jsp' starting page</title>  </head>  <body><!-- s:fielderror用于接收错误提示    加上filedName="error"就只接收key为value的内容-->      <s:fielderror/>      <s:form name="loginForm" method="post"  namespace="/validate"  action="validateAction_login.action" theme="simple" >         <table border="1">           <tr>              <td>用户名</td>              <td> <s:textfield name="username" /></td>           </tr>           <tr>              <td>密码</td>              <td><s:password name="psw" /></td>           </tr>           <tr>              <td> </td>              <td><s:submit value="登陆"/></td>           </tr>         </table>     </s:form>  </body>    <a href="${pageContext.request.contextPath}/validate/validateAction_test.action">test其他的方法</a>  </html>

在浏览器键入http://localhost:8080/Mystruts/validate/login.jsp

用户名输入 reed1991   密码为空

则输出 密码不能为空

若密码也为reed1991,则跳转至

http://localhost:8080/Mystruts/validate/validateAction_login.action并显示

登录成功






0 0
原创粉丝点击