领略下传说中的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. CART

    一.为什么有CART回归树 以前学过全局回归,顾名思义,就是指全部数据符合某种曲线.比如线性回归,多项式拟合(泰勒)等等.可是这些数学规律多强,硬硬地将全部数据逼近一些特殊的曲线.生活中的数据可是千变 ...

  2. getDefinitionByName getDefinition 区别

    一闺密用flash开发IOS应用是遇到一个问题,她把声音资源放到swf里,然后load到主程序中使用,但是ios提示不支持这个swf,我在想是不是因为有声音的原因 于是我让她换种做法,不用swf,用s ...

  3. PAT (Basic Level) Practise:1033. 旧键盘打字

    [题目链接] 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以 ...

  4. java 中的几种 "通用方法“

    前言 Java中,除了基本的数值类型,其他所有数据类型(包括数组)都是对象. 而Object这个类是所有类的超类,它提供的方法,自然能够使用于它的所有子类(所有非基本数值类型). 本文介绍了Objec ...

  5. CUDA 并行编程简介

    前言 并行就是让计算中相同或不同阶段的各个处理同时进行.目前有很多种实现并行的手段,如多核处理器,分布式系统等.本专题的文章将主要介绍使用 GPU 实现并行的方法.参考本专题文章前请务必搭建好 CUD ...

  6. win7建立无线wifi热点的几个常见的问题

    命令行开启WiFi方法: 开启WiFi.bat netsh wlan set hostednetwork mode=allow netsh wlan set hostednetwork ssid=ss ...

  7. mybatis处理小于号

    Mybatis中xm文件里写小于等于时间,不能直接写 <=,要写成 and reg_time <![CDATA[ <= ]]> #{params.endTime} 下面引用自m ...

  8. Android—对话框

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  9. poj2553 强连通

    题意:定义了一个图的底(bottom),是指在一个图中能够被所有点到达的点,问途中有哪些点是图的底. 首先是同一个强连通分量中的点都能够互相到达,强连通分量中一个点能到达其他点,也必然代表该强连通分量 ...

  10. Python正则表达式总结

    正则表达式也一直用,但是没系统的总结过,今天借这个时间梳理一下. Python中的正则表达式操作依靠re模块儿完成. 常用的方法: re.compile(pattern,flags=0) #返回一个编 ...