Struts2基本程序演示
Struts2启动配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 version="3.1"> 6 <filter> 7 <filter-name>struts2</filter-name> 8 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 9 </filter> 10 <filter-mapping> 11 <filter-name>struts2</filter-name> 12 <url-pattern>/*</url-pattern> 13 </filter-mapping> 14 </web-app>
Struts2主配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 6 <struts> 7 8 <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 9 <constant name="struts.devMode" value="true" /> 10 <!--默认就是UTF-8 所以不配置也行--> 11 <!--<constant name="struts.i18n.encoding" value="UTF-8"/>--> 12 13 <package name="default" namespace="/" extends="struts-default"> 14 <action name="index"> 15 <result>/WEB-INF/main.jsp</result> 16 </action> 17 </package> 18 19 <!--struts2qs模块--> 20 <include file="org/zln/struts2qs/cfg/struts2_struts2qs.xml"/> 21 22 </struts>
Struts2模块文件配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 6 <struts> 7 8 <!--国际化资源--> 9 <constant name="struts.custom.i18n.resources" value="org/zln/struts2qs/resource/messageResource"/> 10 11 <!--struts2qs模块--> 12 <package name="struts2qs" namespace="/struts2qs" extends="struts-default"> 13 <!--登录界面--> 14 <action name="loginUI" class="org.zln.struts2qs.action.LoginAction" method="loginUI"> 15 <result name="success">/WEB-INF/struts2qs/loginForm.jsp</result> 16 </action> 17 <!--登录动作--> 18 <action name="loginDo" class="org.zln.struts2qs.action.LoginAction" method="loginDo"> 19 <result name="success">/WEB-INF/struts2qs/welcome.jsp</result> 20 <result name="input">/WEB-INF/struts2qs/loginForm.jsp</result> 21 </action> 22 <!--获取书籍--> 23 <action name="getBooks" class="org.zln.struts2qs.action.BookAction" method="getBook"> 24 <result name="success">/WEB-INF/struts2qs/showBooks.jsp</result> 25 <result name="login">/WEB-INF/struts2qs/loginForm.jsp</result> 26 </action> 27 </package> 28 29 </struts>
Action
1 package org.zln.struts2qs.action; 2 3 import com.opensymphony.xwork2.ActionContext; 4 import com.opensymphony.xwork2.ActionSupport; 5 import org.apache.commons.lang3.StringUtils; 6 7 /** 8 * Created by sherry on 15-7-8. 9 */ 10 public class LoginAction extends ActionSupport { 11 private String username; 12 private String password; 13 14 //登录界面 15 public String loginUI(){ 16 return SUCCESS; 17 } 18 //登录动作 19 public String loginDo(){ 20 System.out.println("获取参数:" + username + ":" + password); 21 if ("zln".equals(username) 22 &&"123".equals(password)){ 23 ActionContext.getContext().getSession().put("user",username); 24 return SUCCESS; 25 }else { 26 return INPUT; 27 } 28 } 29 30 //输入校验 31 32 //所有方法的输入校验 33 @Override 34 public void validate() { 35 super.validate(); 36 } 37 38 //指定方法的输入校验 39 public void validateLoginDo(){ 40 if (StringUtils.isEmpty(username)){ 41 //对错误信息进行了国际化 也可以直接用文字 42 addFieldError("username",getText("username.required")); 43 } 44 } 45 46 public String getUsername() { 47 return username; 48 } 49 50 public void setUsername(String username) { 51 this.username = username; 52 } 53 54 public String getPassword() { 55 return password; 56 } 57 58 public void setPassword(String password) { 59 this.password = password; 60 } 61 } 62 63 64 /* 65 Action访问Servlet API 66 间接访问 67 static ActionContext getContext() 68 直接访问 69 * */
1 package org.zln.struts2qs.action; 2 3 import com.opensymphony.xwork2.ActionContext; 4 import com.opensymphony.xwork2.ActionSupport; 5 import org.zln.struts2qs.service.BookService; 6 7 /** 8 * Created by sherry on 15-7-8. 9 */ 10 public class BookAction extends ActionSupport { 11 private String[] books; 12 13 public String getBook(){ 14 String user = (String) ActionContext.getContext().getSession().get("user"); 15 if ("zln".equals(user)){ 16 //实际开发中会从容器中获取依赖对象 17 BookService bookService = new BookService(); 18 books = bookService.getLeeBooks(); 19 return SUCCESS; 20 }else { 21 return LOGIN; 22 } 23 } 24 25 public String[] getBooks() { 26 return books; 27 } 28 29 public void setBooks(String[] books) { 30 this.books = books; 31 } 32 }
jsp页面
1 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 3 <%@ taglib prefix="s" uri="/struts-tags" %> 4 <% 5 String home = request.getContextPath(); 6 %> 7 <html> 8 <head> 9 <%--s:text标签输出国际化信息--%> 10 <title><s:text name="loginPage"/></title> 11 </head> 12 <body> 13 <form action="<%=home%>/struts2qs/loginDo.action" method="post"> 14 <table> 15 <caption>用户登录</caption> 16 <tr> 17 <td>用户名:</td> 18 <td><input type="text" name="username" /></td> 19 </tr> 20 <tr> 21 <td>密 码:</td> 22 <td><input type="password" name="password" /> </td> 23 </tr> 24 <tr> 25 <td colspan="2"> 26 <input type="submit" value="提交"/> 27 <input type="reset" value="重置" /> 28 </td> 29 </tr> 30 </table> 31 </form> 32 <hr/> 33 <%--使用Struts2标签 默认提供表单输出提示--%> 34 <s:form namespace="/struts2qs" action="loginDo" method="POST"> 35 <%--使用标签的 key 输出国际化信息--%> 36 <s:textfield name="username" key="username"/> 37 <s:password name="password" label="密 码"/> 38 <s:submit value="提交"></s:submit> 39 </s:form> 40 </body> 41 </html>
1 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 3 <%@ taglib prefix="s" uri="/struts-tags" %> 4 <% 5 String home = request.getContextPath(); 6 %> 7 <html> 8 <head> 9 <%--使用表达式输出国际化信息--%> 10 <title><s:property value="%{getText('succPage')}"/> </title> 11 </head> 12 <body> 13 欢迎,${sessionScope.user},您已经登录!<br/> 14 <a href="<%=home%>/struts2qs/getBooks.action">获取书籍列表</a> 15 </body> 16 </html>
1 <%@ page import="com.opensymphony.xwork2.util.ValueStack" %> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 4 <%@ taglib prefix="s" uri="/struts-tags" %> 5 <html> 6 <head> 7 <title>书籍</title> 8 </head> 9 <body> 10 <table border="1" width="360"> 11 <% 12 /*Struts2的所有属性参数被封装在此*/ 13 ValueStack valueStack = (ValueStack) request.getAttribute("struts.valueStack"); 14 String[] books = (String[]) valueStack.findValue("books"); 15 for (String book:books){ 16 %> 17 <tr> 18 <td>书名:</td> 19 <td><%=book%></td> 20 </tr> 21 <% 22 } 23 %> 24 </table> 25 <hr/> 26 <table border="1" width="360"> 27 <caption>书籍</caption> 28 <s:iterator value="books" status="index"> 29 <s:if test="#index.odd == true"> 30 <tr style="background-color: aqua"> 31 </s:if> 32 <s:else> 33 <tr> 34 </s:else> 35 <td>书名:</td> 36 <td><s:property/></td> 37 </tr> 38 </s:iterator> 39 </table> 40 <hr/> 41 <a href="${pageContext.request.contextPath}/index.action">返回首页</a> 42 </body> 43 </html>
Action访问Servlet API的方法