SSH学习之Struts2(一)

1.strust2框架来历简介

WebWork是由OpenSymbony组织开发的,是致力于组件化和代码重用的J2EE Web框架。(同时也是一个成熟的基于Web的MVC框架)。

MVC:Model是模型 View是视图 Control是控制器,这是一种框架模式。

值得一提的是:web项目的三层架构(和MVC是两个完全不同的架构)

1.表示层:struts2框架就是工作在这个地方,是一款于视图层的MVC三层架构的框架。其实我们在移动开发中,例如Android开发中,也是在表示层工作,我们同样可以采用MVC三层架构来编程开发。

2.业务逻辑层:service层,处理业务逻辑,比如判断用户名是否存在,密码是否正确,权限是否拥有,账号是否被冻结,账号是否异常,用户积分是否达到操作要求等等,多为一些执行某一个操作条件的判断。

3.数据访问层:也就是常说的dao层,专门用于处理与数据库交互的的一层,如常用的增删改查等等。jdbc/hibernate技术就是在这一层使用。

在项目中,这些不同分层的表现形式,其实就是在我们自己建的不同的package中写上各自分层中所使用的Java类。比如在项目中我们建了三个package,三个package中的java类的作用分别为表示层的代码,业务逻辑层的代码,数据访问层代码。

总结:随着WebWork框架的发展,衍生出了struts2框架,因此struts2框架是WebWork的升级而不是一个全新的框架,因此稳定性,性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork两者的优点。所以struts2框架也是一个基于Web的MVC框架。

但是值得注意的是:struts2框架并不是struts1框架的延续或者升级,两者的设计理念完全不同。与其说是从struts1继承而来,不如说是集struts1和xwork优点于一身的一款非常优秀的框架。

2.struts2框架引入到web项目中

2.1把struts2相关的jar包引入到项目中

我们可以在Apache官网下载all包,里面不仅有struts2必须有的jar包,还有示例提供给开发人员学习。我们将解压后的all包打开app文件夹,用好压打开(无需解压)struts2-blank.war文件,进入WEB-INF/lib,复制该文件下所有jar包到web项目中即可。

把其中的jar包直接复制到项目下webcontent中的WEB-INF下的lib中

2.2配置struts.xml

把struts2的配置文件直接放到src下,名字必须叫做struts.xml(因为运行时配置文件会被框架自动读取,到了后面用了注解技术可以大大减少xml文件的编写工作量)。需要注意到的是:如果struts.xml文件不能自动提升出标签内容,需要把相应的dtd文件配置上去。

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

         <action name="first*"
            class="com.verney.struts2.action.FirstAction"method="{1}">
            <result name="success">/WEB-INF/jsp/first.jsp</result>
        </action>
    </package>

</struts>

constant配置的是一些常量标签,这样的常量标签在默认配置default.properties文件中,可以自行设置。”struts.enable.DynamicMethodInvocation”表示的是是否允许动态方法调用,这里false表示的是禁止;”struts.devMode” value=”true”表示的是开发者模式。

一个struts.xml文件中可以配置多个package标签,一个package标签里面可以配置多个action标签,一个action标签里面可以配置多个result。

这里需要注意的是命名空间namespace的问题,namespace属于package的一个标签,唯一标识当前这个package。用来对请求action的路径进行管理。所谓的package包表示的是对请求action路径的配置。这里“/”表示的是上一级。extends=”struts-default”表示当前这个package继承了另外一个名字叫做struts-default的package,这个package在struts2的核心jar包中的struts-default.xml文件中定义的,里面定义了很多默认的配置

first*就是将来在浏览器中输入的这个action名字,如果输入的是first1,则*就表示1,如果输入的时firstlogin,则表示的就是login。但是如果原本需要配置的多个action没有非常明显的规律,那么久不要用这种方式来配置了。

action标签用来配置action的名称和class的来源路径,每当对该名称进行请求的时候会先来struts.xml中来进行查找,找到后再到相应的class路径下的对其方法进行加载,method=”{1}”表示匹配第一个first,传过来的是方法的名字即可。每一个action被访问完之后都会有一个字符串类型的返回值,返回值与result的name对应,决定了跳转的路径。当然两个不同名字的action可以对应的是同一个java类,此时method标签的作用就体现出来了:

<action name="test1" class="类A" method="login">
<action name="test2" class="类A" method="register">

这样使用test1和test2两个不同名字的action就是访问到同一个类中的两个方法:login和register方法。但是login方法和register方法必须和execute方法类似的,都是返回的是String类型的字符串。

result标签表示的是跳转的路径,如果action类中excute返回的是”success”(这个参数单词必须拼对,这些参数已经在框架中的default.properties已经定义好),则跳转到/WEB-INF/jsp/first.jsp页面中去。

请求action路径的格式是:命名空间+”/”+action的name+”.action”

这些struts.xml配置文件可以在从官网上下载的all包中的struts2-blank.war中可以找到,平时自己可以保存这些常用而又不容易记住的文件,到了需要用到的时候直接拿来用便可。

2.3在web.xml文件中配置struts2框架的过滤器

因为使用框架大多都要在web.xml文件中进行配置,所以我们在新建web项目的时候都要记得把web.xml文件建出来。配置过滤器的作用是:拦截struts2框架中的action.注意如果不配置这个filter,struts2框架就不能够工作。

<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>*.action</url-pattern>
</filter-mapping>

2.4框架中action方法的编写

struts框架中有一种java类叫做action,这种说法就像J2EE项目中有一种java类叫servlet,其实在struts2框架底层还是封装了servlet的相关内容实现出来的,只不过struts2框架除了servlet的功能以外还扩展了很多其他的功能,同是还大大简化了以前在servlet中繁琐的操作。之所以action比servlet功能还要强大的原因是我们在web.xml文件中配置了struts2框架中专门的过滤器,拦截住之后,struts2框架就可以给action添加很多丰富的功能了。

编写的action类最好都放在一个action包中,其中action类的命名最好用Action结尾,规范编写,便于管理。

框架中action方法的编写:

  • 1)方法继承ActionSupport类
  • 2)重写excute方法,类型必须是String类型,名称必须是excute,必须是无参。
    public class FirstAction extends ActionSupport{
    
        private static final long serialVersionUID = 1L;
    
        private String excute() {
            System.out.println("excute");
            return SUCCESS;
            }
        }
    

同时还有5个String类型的静态属性:

public static final String SUCCESS = "success";

public static final String NONE = "none";

public static final String ERROR = "error";

public static final String INPUT = "input";

public static final String LOGIN = "login";

新建first.jsp,将项目部署到服务器上,开启服务器,用浏览器访问试试看。

这样struts2就算引入成功了。当然这里提到的只是struts2的一些皮毛而已,这个框架的强大之处还没有体现出来,需要我们慢慢的去学习。其实我们仔细阅读default.properties属性文件便可以学到很多框架的知识。一个框架之所以被很多人认可,因为它做了很多开发过程中繁琐而又不得不做的事情,高度封装的前提下是设计思想的体现,我们学习框架正是学习前人优秀的设计思想,这样就算拿到别的框架去使用的时候也会很容易上手了。

时间: 2024-08-04 14:39:03

SSH学习之Struts2(一)的相关文章

SSH学习一 STRUTS2 DTO

DTO在STRUTS2的应用是从页面直接传递一个对象(比如自己写的类)到Action JSP只能传递基本类型,STRUTS的DTO更方便 两种使用方法: 一.如果表单中,各个属性都声明了实例的名字 <form action="w.action" method = "post"> 姓名:<input name="w.name" type="text" value="admin"/>&l

ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤

原创整理不易,转载请注明出处:ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤 代码下载地址:http://www.zuidaima.com/share/1760074977233920.htm 最近闲来无事可做,于是开始学习struts2.Struts2和struts1.webwork2有什么区别我也不说了,网上有很多这方面的资料.以前在项目中从未使用过struts,一直使用spring+hibernate,现在既然学习了Struts,也不能

SSH学习

SSH 学习笔记 SSH:struts + hibernate + spring 第一部分:struts2 (没有数据库) struts2 简介 servlet解耦,实现了MVC的思想: struts2 配置文件的标签 package name:唯一标识一个包,不能重名: extends:继承其他包,可以直接使用该包中的资源: abstract:true 包为抽象包,不能写action标签.默认为false: namespace:命名空间,注意搜索机制,默认namespace="/":

SSH学习之二 OpenSSH配置文件解析

下面是对SSH配置文件的一些选项的分解说明,ssh_config是OpenSSH客户端的配置文件,sshd_config是OpenSSH服务器端的配置文件. ssh_config的内容如下: # This is the ssh client system-wide configuration file.  See ssh_config(5) for more information.  This file provides defaults for users, and the values c

SSH学习笔记

一.Struts        在没有学习SSH框架前,我们一般采用Jsp+java bean+servlet开发,这里就是MVC架构.而Struts其实就是替代了Servlet,我们知道Servlet在一般的开发中做控制页面跳转,同时调用系统的业务逻辑层.现在想想Struts是不是做一样的是?只是它能够更加的提高开发速度.我们Servlet开发时,是要创建一个Servlet其实就是继承了HttpServlet这个类.而现在Struts里面的Action也要集成一个ActionSupport类.

【JAVA学习】struts2 中 Actionsupport 的作用

尊重原创:http://xumiao900.iteye.com/blog/469760 Action 跟 Actionsupport 的区别 当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢? Action接口有: public static final java.lang.String SUCCESS = "success"; public static final java.lang.String NONE

【JAVA学习】struts2的action中使用session的方法

尊重版权:http://hi.baidu.com/dillisbest/item/0bdc35c0b477b853ad00efac 在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到1.通过ActionContext class中的方法getSession得到2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作 下面先看一个采用第一种方式,在action中得到sessi

SSH学习之四 OpenSSH安全

OpenSSH是Linux/Unix下一款加密通讯软件,同时也是我们用来远程控制Linux/Unix服务器重要的必装软件.对于各版本的Linux及Unix发行版而言,OpenSSH的配置文件位置都各不一样.如Ubuntu下OpenSSH配置文件就在/etc/ssh/sshd_config. OpenSSH安全选项: Port 22 // OpenSSH打开的端口号 LoginGraceTime 120 // 客户端连接服务器成功后多少秒未登陆就被强制关闭连接 PermitRootLogin ye

SSH学习之三 SSH与SCP无密码登录

通常情况下,每次使用ssh登录或使用scp复制远程系统的文件时,都需要提供密码,然后才能做进一步的处理.为了省略输入密码这一步骤,有时可以采用Shell脚本的方法解决,但这需要把手工输入的密码以明码形式放在脚本文件中. 利用密钥配置文件,OpenSSH可以是ssh远程登录与scp文件复制的操作过程中省略密码验证的中间环节.为此,ssh客户端首先应建立OpenSSH连接,然后自动地想服务器发送其公钥.之后,服务器即可根据相应用户主目录中预定义的密钥列表,对收到的密钥进行比较.如果存在匹配的密钥,服