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. Action访问Servlet API
  65. 间接访问
  66. static ActionContext getContext()
  67. 直接访问
  68. * */
  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的方法

Struts2基本程序演示的更多相关文章

  1. C程序演示产生僵死进程的过程

    先抄录网上一段对僵死进程的描述: 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中.这种 ...

  2. struts2入门程序

    struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...

  3. 制作Android Demo GIF:程序演示效果GIF图录制

    [转] 制作Android Demo GIF:程序演示效果GIF图录制   在平时写博客或者分享自己写的程序效果的时候经常需要做成GIF图,以下就是介绍几种常用的GIF录制方法: 一.录制工具 1.( ...

  4. MapGuide应用程序演示样例——你好,MapGuide!

    图 3‑4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程能够分为五个阶段.图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流. 1) 载入文件类型的数据,配置 ...

  5. 【UNIX网络编程(三)】TCP客户/server程序演示样例

    上一节给出了TCP网络编程的函数.这一节使用那些基本函数编写一个完毕的TCP客户/server程序演示样例. 该样例运行的过程例如以下: 1.客户从标准输入读入一行文本,并写给server. 2.se ...

  6. html5 canvas程序演示--P1197 [JSOI2008]星球大战

    html5 canvas程序演示--P1197 [JSOI2008]星球大战 <!doctype html> <html> <head> <meta char ...

  7. nginx反向代理tomcat应用,struts2网站程序redirect时导致请求地址错误的解决方法

    一个使用struts2的网站在登录页面需要进行redirect跳转,大致如下: <package name="admin" extends="httl-defaul ...

  8. 【转】 制作Android Demo GIF:程序演示效果GIF图录制

    在平时写博客或者分享自己写的程序效果的时候经常需要做成GIF图,以下就是介绍几种常用的GIF录制方法: 一.录制工具 1.(生成动画的工具:Ulead GIF Animator),可以讲单独的图片生成 ...

  9. 经典网页设计:20个华丽的 iPhone 应用程序演示网站

    一个物品销售很好,重要的原因之一是它的包装,因为这是最重要的细节,可以把一个人转变成购买者.一个好的包装设计和良好的表现比产品本身更重要,因此被分配了大量的金钱和资源,以创造伟大的东西. 因此,为了销 ...

随机推荐

  1. windows 编译安卓iconv 库

    由于NDK r15后,谷歌要统一将来的设备都要支持64位,而iconv只支持32位,后续的ndk都会去除iconv的支持,所以只能在iconv的官网下载源码编译库文件使用, 下载地址:https:// ...

  2. 在 publicId 和 systemId 之间需要有空格。

    spring  applicationContext_datasource.xml中约束错误 org.springframework.beans.factory.xml.XmlBeanDefiniti ...

  3. Spring框架基础2

    Spring框架基础2 测试Spring的AOP思想和注解的使用 导包(在前面的基础上添加) SpringAOP名词解释 AOP编程思想:横向重复代码,纵向抽取:就是说多个地方重复的代码可以抽取出来公 ...

  4. Spring Cloud 入门Eureka -Consumer服务消费(Ribbon)(二)

    前面一篇介绍了LoadBalancerClient来实现负载均衡, 这里介绍Spring cloud ribbon 1.ribbon Spring Cloud Ribbon 是一个基于Http和TCP ...

  5. MARK 一条关于Linux 运维方面个人向收藏网址

    吴钧泽博客 https://wujunze.com/archives.html Linux运维笔记 https://blog.linuxeye.cn/ Linux中文网 http://www.ppze ...

  6. python中字符串编码方式小结

    Python2中字符串的类型有两种:str和unicode,其中unicode是统一编码方式,它使得字符跟二进制是一一对应的,因此所有其他编码的encode都从unicode开始,而其他编码方式按照相 ...

  7. 百度MIP校验错误整理与解决方法

    MIP校验工具地址: https://www.mipengine.org/validator/validate 1.强制性标签缺失或错误 错误提示:line 1,col 1: 强制性标签'<sc ...

  8. PHP Socket服务器搭建和测试

    1.socket服务器搭建思路 1) 目的:理解socket服务器工作机制 2) 思路:创建socket -> 把socket加入连接池 -> 处理接收信息 -> 握手动作 -> ...

  9. SSO 单点登录总结(PHP)

    本篇文章根据个人理解的知识整理汇总,如有不足之处,请大家多多指正. 单点登录(SSO--Single Sign On)的应用是很普遍的,尤其在大型网站系统中,比如百度,登录百度账号和,再转到百度经验. ...

  10. C语言字符篇(五)内存函数

    memcpy不可以把目的地址写成本身 但是memmove可以,因为它是先保存到临时空间 #include <string.h>   void *memcpy(void *dest, con ...