领略下传说中的Struts2,写了个小例子,有点意思。比起.net中的MVC有意思的在于它是你自己一步步去配置实现,想怎么搞就怎么搞,.net的MVC,它干了什么事你完全不知,只不过知道怎么用而已。

下载的struts2版本为2.3,里头有些小例子,我直接使用了最简单的那个struts2-blank.war里的jar包即可。(这是struts2最基本的jar,其实还有一些可以删除的,比如我删除了log4J)

1)有以下有个Jar需要引入到lib文件夹:

asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3..jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1..jar
freemarker-2.3..jar
javassist-3.11..GA.jar
ognl-3.0..jar
struts2-core-2.3.16.1.jar
xwork-core-2.3.16.1.jar

2)建一个BaseActionSupport.java

package com.my.action;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; /**
* Base Action class for the Tutorial package.
*/
public class BaseActionSupport extends ActionSupport { public String getContextPath() {
return ServletActionContext.getRequest().getContextPath();
} }

3)建一个LoginAction.java

package com.my.action;

public class LoginAction extends BaseActionSupport {

    private String userName;
private String password; public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
} public String execute() throws Exception {
return INPUT;
} public String signin() {
if( "admin".equals(getUserName()) && "admin".equals(getPassword()) ) {
return SUCCESS;
}
else {
return "false";
}
}
}

4)建一个MainAction.java

package com.my.action;

public class MainAction extends BaseActionSupport {

    public String execute() throws Exception {
return SUCCESS;
} }

5)在src目录下建一个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> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results>
<result name="error">/error.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings> </package> <include file="struts_login.xml"/> <!-- Add packages here --> </struts>

6)在src目录下建一个struts_login.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="login" namespace="/" extends="default"> <action name="login_*" class="com.my.action.LoginAction" method="{1}">
<result type="redirectAction" name="success">main</result>
<result type="redirect" name="false">login</result>
<result name="input">/pages/Login.jsp</result>
</action>
<action name="main" class="com.my.action.MainAction">
<result name="success">/pages/Main.jsp</result>
</action>
<action name="*" class="com.my.action.BaseActionSupport">
<result>/pages/{1}.jsp</result>
</action> </package>
</struts>

7)建一个jsp:Login.jsp

<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %> <html>
<head>
</head>
<body>
<form action="login_signin" method="post">
User name:<input type="text" id="userName" name="userName" /><br/>
Password:<input type="password" id="password" name="password" /><br/>
<input type="submit" value="Login" />
</form>
<body>
</html>

8)建一个jsp:Main.jsp

<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %> <html>
<head>
</head>
<body>
This is main page.<br/>
Context Path:${contextPath}<br/>
Action URL:<s:url action="main"/>
<body>
</html>

9)修改web.xml

    <filter>
<filter-name>struts2</filter-name>
<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>

因为没有用eclipse,直接使用命令行javac,写了一个bat做编译:build.bat

@echo off
set libDir=D:\Study\apache-tomcat-7.0.52\webapps\testStruts\WEB-INF\lib
set tempClassPath=%classpath%
set classpath=%libDir%\asm-3.3.jar;%classpath%
set classpath=%libDir%\asm-commons-3.3.jar;%classpath%
set classpath=%libDir%\asm-tree-3.3.jar;%classpath%
set classpath=%libDir%\commons-fileupload-1.3.1.jar;%classpath%
set classpath=%libDir%\commons-io-2.2.jar;%classpath%
set classpath=%libDir%\commons-lang3-3.1.jar;%classpath%
set classpath=%libDir%\commons-logging-1.1.3.jar;%classpath%
set classpath=%libDir%\freemarker-2.3.19.jar;%classpath%
set classpath=%libDir%\javassist-3.11.0.GA.jar;%classpath%
set classpath=%libDir%\log4j-1.2.17.jar;%classpath%
set classpath=%libDir%\ognl-3.0.6.jar;%classpath%
set classpath=%libDir%\struts2-core-2.3.16.1.jar;%classpath%
set classpath=%libDir%\xwork-core-2.3.16.1.jar;%classpath%
@echo on
javac -d WEB-INF\classes src\*.java
@echo off
copy src\*.xml WEB-INF\classes
set classpath=%tempClassPath%
@echo on

为了使编译后tomcat自动热加载,在tomcat安装目录下的conf\server.xml中加入了这句(在<host/>节点内):

<Context path="/testStruts" docBase="testStruts" reloadable="true" debug="0"></Context>

Struts2 - Study 1的更多相关文章

  1. Struts2 Interceptors

    Alias Interceptor : 别名拦截器 <action name="someAction" class="com.examples.SomeAction ...

  2. Struts2学习第五课 通过和ServletAPI耦合的方式获取WEB资源

    与Servlet耦合的访问方式 直接访问Servlet API将使Action与环境Servlet环境耦合在一起,测试时需要有Servlet容器,不便对Action的单元测试. 直接获取HttpSer ...

  3. Struts2学习第四课 通过Aware接口获取WEB资源

    使用XxxAware接口 看代码: package logan.struts2.study; import java.util.Map; import org.apache.struts2.inter ...

  4. Struts2学习第三课 访问Web资源

    1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...

  5. 4.Struts2转向类型详解

    struts2中提供了多种视图转向类型,类型由type属性指定,如: dispatcher:请求转发(默认值) redirect:重定向到页面 redirectAction:重定向到Action pl ...

  6. 2.第一个Struts2程序-HelloWorld程序

    1.新建Web Project项目:Study_Struts2 2.新建HelloWordAction.java类 3.复制struts.xml文件到src目录下,配置struts.xml文件内容如下 ...

  7. Struts2常用标签

    Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...

  8. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  9. Struts2的标签库(二)——OGNL表达式

    Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...

随机推荐

  1. LeetCode Rotate List (链表操作)

    题意: 将链表的后面k个剪出来,拼接到前面,比如 1->2->null 变成2->1->null.数字代表一段的意思. 思路: k有3种可能,k>n,k<n,k=n ...

  2. nginx的upstream目前支持5种方式的分配(转)

    nginx的upstream目前支持5种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight ...

  3. yii2构造方法

    控制器文件下面建 一公共控制器:: CommonController.php 里面写一个空方法  :  public function init(){} 然后在你要写构造函数的控制器类里写一个方法 ( ...

  4. Matlab神经网络工具箱学习之一

    1.神经网络设计的流程 2.神经网络设计四个层次 3.神经网络模型 4.神经网络结构 5.创建神经网络对象 6.配置神经网络的输入输出 7.理解神经网络工具箱的数据结构 8.神经网络训练 1.神经网络 ...

  5. code::blocks(版本10.05) 配置opencv2.4.3

    (1)首先下载opencv2.4.3, 解压缩到D:下: (2)配置code::blocks, 具体操作如下: 第一步, 配置compiler, 操作步骤为Settings  -> Compil ...

  6. code::blocks的快捷键汇总

      编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销 Ctrl + S:保存 Ctrl + Y / Ctrl + S ...

  7. HTML初讲

    整理老师所讲: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  8. poj1094 拓扑序

    题意:现在有多个大写字母(不一定连续),给出字母之间的大小关系,问到第几个关系时就能判断有唯一大小排序或出现矛盾,或是有多个合理排序,若有唯一排序,则输出它. 拓扑序,只不过坑爹的是如果关系处理到一半 ...

  9. centos启动流程[转]

    启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...

  10. 论文笔记之:Playing Atari with Deep Reinforcement Learning

    Playing Atari with Deep Reinforcement Learning <Computer Science>, 2013 Abstract: 本文提出了一种深度学习方 ...