struts2---小demo

来源:互联网 发布:java发展史 编辑:程序博客网 时间:2024/05/18 00:47

struts2的学习从敲代码开始,下面将用一个小例子来说明struts2的使用
1 环境要求:
       1.1 JDK安装:struts2 需要的jdk最低版本为1.5,我选择的是jdk1.8
       1.2 tomcat安装:struts2是一个java web开发框架,所以需要安装一个支持servlet和jsp的web服务器,这里采用的是tomcat 6.0
       1.3 安装eclipse:呵呵,电脑上有就直接使用了。
        1.4  在eclipse配置jdk和tomcat,具体细节省略
       1.5 下载struts2 
2  创建项目
新建一个dynamic web project项目,命名为struts2_01。
3 导入struts2类库
   commons-logging-1.1.3.jar:struts2框架使用这个日志包哎支持log4j和jdk的日志记录
   freemarker-2.3.19.jar:struts2的UI标签的模板使用freemarker编写
   ognl-3.0.6.jar:struts2 框架使用的一种表达式语言
   struts-2.3.20 :struts2 框架的核心类库
   xwork-core-2.3.20.jar:xwrok类库,struts2在其上构建
将下载jar包粘贴到WEB-INF/lib下
4 配置web.xml文件
    新建web.xml文件在WEB-INF下

    <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>

FilterDispatcher是早期struts2的过滤器,在2.1.3之后就推荐使用StrutsPrepareandExecuterFilter了。Struts2框架是基于MVC模式开发的,它提供了一个核心控制器,用于对所有请求进行统一处理,由FilterDispatcher的servlet过滤器充当。需要在web.xml文件中配置FilterDispatcher过滤器,指定要映射到FilterDispatcher的url样式,匹配这个URL样式的所有请求,都将被web容器交由filterdispatcher进行处理。但是这个拦截器也存在一些问题,如果自己定义过滤,是要放到struts2过滤器之前的,如果放在之后,自定义的过滤器就失去了对action的作用。如果必须使用action环境,但是又想在struts2过滤器之前使用自定义的过滤器,FilterDispatcher是无法满足需求的,StrutsPrepareandExecuterFilter是两个拦截器的合集:StrutsPrepareFilter和StrutsExecuterFilter。

看下面的代码:

<filter>   <filter-name>StrutsPrepareFilter</filter-name>   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class></filter><filter>   <filter-name>sitemesh</filter-name>   <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class></filter><filter>   <filter-name>StrutsExecuteFilter</filter-name>   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class></filter><filter-mapping>   <filter-name>StrutsPrepareFilter</filter-name>   <url-pattern>/*</url-pattern></filter-mapping><filter-mapping>   <filter-name>sitemesh</filter-name>   <url-pattern>/*</url-pattern></filter-mapping><filter-mapping>   <filter-name>StrutsExecuteFilter</filter-name>   <url-pattern>/*</url-pattern></filter-mapping>
在两个拦截器之间调用了自定义的拦截器,实现了在调用struts2拦截器前,调用了自己的拦截器。另外,拦截器的执行顺序是filter-mapping的先后顺序决定的。

5 创建action类

       在src文件夹下创建包com.bjpowenodea.strtus,在包中添加类LoginAction类,继承action基类。一个 action就是一段只有特定的url被请求时才会执行的代码。struts根据请求不同的url来执行相应的action。
       在struts2中,action执行的结果通常都对应着一个要呈现给用户的result。所有的result都是通过字符串名字来表示的,struts根据action返回的结果字符串来选择对应的result显示给用户。action与其对应的result是在struts.xml文件中配置的。
        在struts2中也可以使用一个普通的类,作为action类,只要这个类提供execute方法的是实现。通常情况下,我们所写的action类会选择实现com.opensymphony.xwork2.action接口。就像上面说到的实现接口action。这个接口中除了定义了execute方法外,还定义了5个字符串类型的静态常量。
public interface Action {    //action执行成功,要向用户显示成功页面,返回SUCCESS常量    public static final String SUCCESS = "success";   //action执行成功,但不需要用户显示结果页面,使用NONE常量    public static final String NONE = "none";    //action执行失败,要向用户显示失败页面,返回ERROR常量    public static final String ERROR = "error";    //action的执行需要用户输入更多信息,要向用户显示输入页面,返回INPUT常量    public static final String INPUT = "input";    //由于用户没有登录,action不能执行,要向用户显示登录页面,返回LOGIN常量    public static final String LOGIN = "login";       public String execute() throws Exception;}
 LoginAction类中代码:
<pre name="code" class="html">package com.bjpowenode.struts;import com.opensymphony.xwork2.Action;public class LoginAction implements Action{    @override public String execute() throws Exception{   return SUCCESS;}}



6 编写结果页面
在webroot中添加一个jsp页面,login.jsp。
代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><pre name="code" class="html">
<body><form action="login"><input type="submit" value="登录" ><br/></form></body></html>
添加一个login_success.jsp页面,显示登录成功。
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body>登录成功,耶。</body></html>


7 配置struts.xml文件
一个action创建完成后,还需要为其配置一个url,只有这样struts拦截器才知道哪一个url对应哪个action,除了一个action配置规格url外,还需要action关联一个或多个结果页面,当action执行完毕后返回一个结果代码,这个结果代码对应的页面就会被呈现给用户。对action进行配置,需要创建struts.xml文件,struts.xml是struts2框架的核心配置文件。默认路径是WEB-INF/classes/struts.xml.在eclipse开发环境中我们只需要在项目的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.devMode"  value="true"></constant><package name="struts2"   extends="struts-default"><action name="login" class="com.bjpowenode.struts.LoginAction"><result name="success">/login_success.jsp</result></action></package></struts>

8 将项目添加到tomcat服务器。运行就OK了
总结:
       从第一步到第八步用一个小例子说明了struts2的使用,通过写这篇博客将各种配置文件和拦截器又重新梳理了一遍,还是挺有收获的。


0 0
原创粉丝点击