Struts2 —— 基础与实践

1 篇文章 0 订阅

一、基础使用


使用struts2.5.10

1、配置Struts2 与 简单使用

(1)、导包。通过实践,Struts 2.5.10必须导入的包如下:(其实在某个名为min-struts.xml 中所列的就是必须的jar包)


注:其中log4j-api-**.jar 不同于普通的log4j -**.jar,所以只能导入struts 中的该日志包,但common-logging-**.jar应该是相同的。


(2)、配置web.xml。两种方式使用struts。

<!-- 通过struts的StrutsServlet 类管理,不推荐,但适用于业务是特定的情况 -->
	<servlet>
		<servlet-name>strutsServlet</servlet-name>
		<servlet-class>org.apache.struts2.dispatcher.servlet.StrutsServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>strutsServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
	<!-- 通过struts的StrutsPrepareAndExecuteFilter 类管理,推荐方法-->
	<filter>
		<filter-name>struts</filter-name>
	    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
	    <filter-name>struts</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>


(3)、在java源文件目录src 目录配置struts.xml (不能在其它目录或src 的子目录!)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC    
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"    
    "http://struts.apache.org/dtds/struts-2.5.dtd">  
<struts>
	<package name="myPackage" extends="struts-default" >
		<action name="first">
			<result>/loginOn.jsp</result>
		</action>
	</package>
</struts>
注:action 的name属性值最后作为访问的url,访问基础格式:first.action。映射到loginOn.jsp

4、编写页面,通过struts2 实现简单跳转

index.jsp中:

<a href="first.action">first.action请求struts2</a>
说明:访问struts2的name 为first 的action。也即访问到映射的loginOn.jsp页面。


2、新手常见问题

常遇到错误:There is no Action mapped for namespace / and action name

常见原因:

(1)、struts.xml文件名错误。一定要注意拼写问题(自己就一直认为是Structs ...);

(2)、struts.xml文件放置路径错误。一定要将此文件放置在src目录下。编译成功后,要确认是否编译到classes目录中;

(3)、struts.xml文件内容错误。尤其是 声明部分,正确配置参考:

<!DOCTYPE struts PUBLIC    
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"    
    "http://struts.apache.org/dtds/struts-2.5.dtd">
说明:其中的版本号保留2位,所以不同版本的struts,在此基础上改版本号即可。

参考:

(1)、There is no Action for namespace / and..问题总结
(2)、DOCTYPE 声明标准

DOCTYPE 标准格式:

<!DOCTYPE rootElementName PUBLIC "PublicIdentifier" "URIreference">
其中publicIdentifier 格式如下,URIreference 为标签定义文件位置。

DTD名称格式为"注册//组织//类型 标签//语言"


二、Struts 2 的Action 对象

struts1 中,所有控制器都继承 org.apache.struts.action.Action 类。

struts2 中,有所改变:存在于core jar文件的com.opensymphony.xwork2包中。下面的记录都是关于struts2 的。



1、Action 接口

该接口定义了5个常量与execute 方法。常量分别为:SUCCESS、NONE、INPUT、LOGIN、ERROE,常量表示请求结果,并作为返回哪个页面的一个判断条件。

execute 方法便是返回这几个值中的某个,表明当前action 请求状态。

各常量值含义:

SUCCESS:
The action execution was successful. Show result view to the end user.成功并返回一个页面
NONE:
The action execution was successful but do not show a view. This is useful for actions that are handling the view in another fashion like redirect.成功但不返回页面。
INPUT:
This result is also used if the given input params are invalid, meaning the user should try providing input again.与输入有关的请求失败,如输入不合法、输入不全等。
LOGIN:
The action could not execute, since the user most was not logged in. The login view should be shown.用户未登陆,无法执行action
ERROR:
The action execution was a failure.Show an error view, possibly asking the user to retry entering data.执行action 失败,展示失败页面

2、应用动态Action 

所谓动态action,就是一个Action 对象(表示某类业务)中有中几个方法,每次决定请求哪个具体方法。

(1)、简单实践:PlainAction.java

package com.milan.actions;

import com.opensymphony.xwork2.ActionSupport;

public class PlainAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	public String actionA(){
		return "actionA";
	}
	public String actionB(){
		return "actionB";
	}
}


(2)、struts.xml 中配置该Action对象:(部分代码)

<struts>
	<package name="myPackage" extends="struts-default" >
		<action name="first">
			<result>/loginOn.jsp</result>
		</action>
		<action name="plainAction" class="com.milan.actions.PlainAction">
			<result name="actionA" type="">/showA.jsp</result>
			<result name="actionB" type="">/showB.jsp</result>
		</action>
	</package>
</struts>
说明:两个关键属性,result 元素的name属性值取该action 的某个方法的返回值,通常设置与对应方法名相同。type 用于设置返回类型,如转发还是重定向,具体取值暂不讨论。

(3)、页面中请求

<a href="first.action">first.action请求struts2</a>
<a href="plainAction!actionA">请求actionA并到达showA.jsp页面</a>
<a href="plainAction!actionB">请求plainAction的actionB方法并到达showB.jsp页面</a>
注:请求一个方法的action:actionName.action,动态请求action:actionName!方法名。


三、关于Struts 2 中的配置

使用Struts 2 时需配置相关文件,以使各程序模块之间可以通信。

1、Struts 2 的配置文件类型

(1)、struts-default.xml:位于core jar包中(该包中还存放了许多dtd文件);是struts2 提供的配置文件。

(2)、struts-plugin.xml:位于struts2 提供的各插件的包中。

(3)、struts.xml:Web 应用默认的struts 2 配置文件,需自己编写。

(4)、struts.properties:struts 2 中属性配置文件,需自己编写。

(5)、web.xml:即该应用的web.xml ,在里面配置Struts 2 的StrutsServlet 或 StrutsPrepareAndExecuteFilter 。



2、配置Struts 2 的package

实例:

<!-- struts元素下与package 元素同级的其它元素
	<bean class=""></bean>
	<constant name="" value=""></constant>
	<include file=""></include> -->
<!-- 
	属性说明:
		name:包名,不同于java的包名含义,此处只是用于区别包的
		extends:继承于
		namespace:指定命名空间,也对应路径,相当于java的包,对应文件夹。相对于根路径。
	 -->
	<package name="parentPackage" extends="struts-default" 
		namespace="resource">	
	</package>
	<package name="myPackage" extends="parentPackage" namespace="/jsp">
		<action name="first">
			<result>/loginOn.jsp</result>
		</action>
	</package>

说明:package 中name属性就是个标识符,用于继承的,不与文件夹对应。namespace 与文件夹对应,所以注意是否要加"/"。

此时访问该action路径应该为:

<a href="resource/jsp/first.action">路径加first.action请求struts2</a>
对应的目录应该为:

说明:继承包后,路径叠加。无论直接继承于哪个包,都要直接或间接继承于struts-default 包,该包在struts-default.xml中定义,用于配置struts2 相关信息。

3、配置struts 2 中action

略。



四、MVC 理解


JSP /Servlet :

Servlet 可充当控制器;

SpringMVC :

控制器为实现Controller 接口的类,web.xml中配置 DispatcherServlet 的servlet 对象转向对应的<自定义的该servlet名>-servlet.xml(见下面 说明一),再在该xml中定义url 映射bean (如org.springframework.web.servlet.handler.SimpleUrlHandlerMapping类,见说明二)与视图解析bean(如org.springframework.web.servlet.view.InternalResourceViewResolver),以及被管理的控制器bean(也即继承Controller 的类,见 说明二)。

Struts /Structs2 :

控制器为实现Action 接口的子类,通过web.xml中配置StrutsServlet 的servlet 对象或 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 的过滤器对象转向struts.xml。


不管哪种MVC 实现,其思想差不多都是,在特定的控制器(Action)中处理业务,同时可与对应的页面相关联,处理业务后,返回数据或页面。


说明一:

配置方式:

1、默认为WEB-INF下的"servletName-servlet.xml",假设该servlet取名为dispatcherServlet,则对应配置文件应为dispatcherServle-servlet.xml,且在WEB-INF目录下。

2、使用初始化参数指定xml配置文件位置:

<servlet>
	<servlet-name>dispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定配置文件位置 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
         <param-value>classpath*:servletNameConfig.xml</param-value>
         <!-- 或 <param-value>WEB-INF/servletNameConfig.xml</param-value> -->
     </init-param>
       <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
多个xml文件使用逗号分隔


说明二:

SpringMVC 中,映射关系也可使用注解方式,见另一篇日志:









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值