struts2入门
来源:互联网 发布:淘宝安装师傅怎么加盟 编辑:程序博客网 时间:2024/04/30 20:18
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";
}
* 后半部分的文本内容:要转向到的页面
-->
<?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()并进行相应跳转
-------------------------------------------------------------------------------------------------------
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()
---------------------------------------------------------------------------------------------------
新建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并显示
登录成功
- Struts2入门
- struts2 入门
- struts2入门
- struts2-入门
- struts2入门
- struts2入门
- Struts2入门
- struts2入门
- Struts2入门
- struts2 入门
- struts2-入门
- Struts2入门
- struts2 入门
- struts2入门
- Struts2入门
- struts2入门
- Struts2入门
- Struts2入门
- 正则笔记
- Python入门——认识函数
- GDB简明教程
- 【leetcode】423. Reconstruct Original Digits from English
- 架构、框架、模式和平台的区别
- struts2入门
- JNDI服务提供者连接工厂之RegistryContextFactory(RMI)
- Unity 入门 Ray类
- hdu1098Ignatius's puzzle
- Maya2012中英文对照表(二)
- CodeForces 733B - Parade
- NYOJ-17 单调递增最长子序列
- 设置网站ico图标
- 关于jquery append() 加入的元素,绑定事件无效的方法