精华内容
下载资源
问答
  • eclipse配置struts2并创建简单登录程序

    千次阅读 2013-08-14 14:41:34
    然后,struts2包,官网下载最新的。 在eclipse中创建dynamic web project,填写project name,其他默认如下图 下一步,填写编译输出路径,默认为build\classes,可以改可以不改,默认即可。 下一步,勾选生成web....

    首先,有eclipse工具,我的是indigo版本,官网下载。

    然后,struts2包,官网下载最新的。

    在eclipse中创建dynamic web project,填写project name,其他默认如下图

    下一步,填写编译输出路径,默认为build\classes,可以改可以不改,默认即可。

    下一步,勾选生成web.xml文件,finish。

    一个dynamic web project就生成了,接下来加入相应jsp,action文件。

    解压struts包,把其中struts-2.3.15.1\lib下的几个包拷贝到工程的WebContent/WEB-INF/lib目录下,工程结构如下:

    根据需要拷贝你所需要的jar包到lib下,然后改写web.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>StrutsLoginDemo</display-name>
      <!-- 定义Struts2的核心控制器:FilterDispatcher -->
        <filter>
           <!-- 定义核心Filter的名称 -->
           <filter-name>struts2</filter-name>
           <!-- 定义Filter的实现类 -->
           <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>
      <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    首页默认为login.jsp。

    配置struts.xml文件,在src文件下创建struts.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="default" namespace="/" extends="struts-default">
            <action name="Login" class="action.LoginAction">
                <result name="success">success.jsp</result>  
                <result name="input">login.jsp</result> 
            </action>
        </package>
    </struts>

    注:struts.xml文件一定创建在src目录下,创建的web project默认src包在Java Resources下,而不在WebContent/WEB-INF下。


    创建action文件,要跟struts.xml里的配置一致。

    在src下新建一个包action,在action下创建LoginAction.java文件:

    package action;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport{
    	private static final long serialVersionUID = 1L;
    	public String loginName,password,message;
    	
    	public String execute() throws Exception
    	{
    		System.out.println("username:"+loginName+"; password:"+password);
    		if ("admin".equals(loginName)&&"admin".equals(password)) {
    			message=loginName+" Login Success!";
    		}else {
    			message=loginName+" Login Failed!";
    			return INPUT;
    		}
    		return SUCCESS;
    	}
    
    	public String getLoginName() {
    		return loginName;
    	}
    
    	public void setLoginName(String loginName) {
    		this.loginName = loginName;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	
    
    }
    

    在WebContent目录下创建login.jsp和success.jsp文件:

    login.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <!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=UTF-8">
    <title>Login</title>
    </head>
    <body>
    	<div align="center">
    		${requestScope.message }
    		<s:form action="Login" method="POST">
    			<s:textfield name="loginName" size="20" label="username"/>
    			<s:textfield name="password" size="20" label="password"/>
    			<s:submit value="submit"></s:submit>
    		</s:form>
    	</div>
    
    </body>
    </html>

    success.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!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=UTF-8">
    <title>Success</title>
    </head>
    <body>
    	Login Success!
    </body>
    </html>


    至此web project编写完成,下面创建一个server然后运行。

    首先new一个server(tomcat的配置在另一篇中介绍http://blog.csdn.net/rabbitlove/article/details/9669433):

    在eclipse中File->new->other->Server,next选择Tomcat v6.0 Server

    改个Server name为MyServer,next可以看到刚创建的web project,选择到右边的列表中:

    点击finish完成server的创建。

    选中刚创建的web project右键点击Run As->Run on Server,可以看到刚创建的server


    选择该server然后next可以看到web project在右侧configured列表下,点finish启动。

    eclipse中打开浏览器显示login界面:

    输入正确的用户名密码:

    输入错误的用户名密码:

    完成!

     

    参考:http://blog.csdn.net/zhoucqu2009/article/details/7206133

    http://blog.csdn.net/zhoucqu2009/article/details/7211017

    展开全文
  • 步骤 具体为以下几个步骤: 引入Struts2 ...创建并配置struts.xml文件 jar包 web.xml 在web.xml文件中进行核心调度器的配置。 <web-app xmlns:xsi="http://www.w3.org/

    	

    步骤

    具体为以下几个步骤:

    1. 引入Struts2 框架所需运行库文件

    2. 创建并配置web.xml文件

    3. 创建一个Action

    4. 创建并配置struts.xml文件

    jar包


    web.xml

    web.xml文件中进行核心调度器的配置。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	id="WebApp_ID" version="3.0">
    	
    	<display-name>Struts01</display-name>
    	<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>
    	
    </web-app>

    此处过滤了所有的访问路径。当然,也可以设置为仅过滤actionjsp文件。

    2.5版本后,支持多个url-pattern

    	<url-pattern>*.action</url-pattern>
    	<url-pattern>*.jsp</url-pattern>


    ACTION类

    需求分析:(此处使用的是简单的ACTION类,其他常用方式,下文再说明)

    1.Struts2直接使用Action来封装HTTP请求参数,因此Action类应该包含与请求相对应的属性,并为该属性提供对应的settergetter方法。

    2.Action类里增加一个execute方法,因为Struts2框架默认会执行这个方法。这个方法本身并不做业务逻辑处理,而是调用其他业务逻辑组件完成这部分工作。

    3.Action类返回一个标准的字符串,该字符串是一个逻辑视图名,该视图名对应实际的物理视图。

    public class UserAction {
    
    	private String username;
    
    	public String execute() {
    		if (username != null && !username.isEmpty()) {
    			return "success";
    		}
    		return "error";
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    }


    struts.xml

    Struts2的核心配置文件,放在src目录下。

    <?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="userAction" class="com.zhidisoft.action.UserAction">
    			<result name="success">/success.jsp</result>
    			<result name="error">/error.jsp</result>
    		</action>
        </package>
    </struts>

    注意:

    action标签中定义了nameclassname属性对应的是用户URL请求中的action名,比如在本应用中,用户请求为http://localhost:8080/Struts2/userAction.action,那么name属性就应该为userActionclass属性是处理请求的实现类(注意:要包含完整路径),本应用的实现类是com.zhidisoft.action.UserAction

    result标签定义逻辑视图和物理视图之间的映射,在我们的Action中,如果返回的字符串是"success”则由对应的success.jsp页面进行处理;如果返回的字符串是"error”则由error.jsp页面进行处理。


    编写前端界面:

    首页 index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>首页</title>
    </head>
    <body>
    	<form action="userAction.action" method="post">
    		<input type="text" placeholder="请输入用户名 " name="username">
    		<button type="submit">登录</button>
    	</form>
    </body>
    </html>

     

    登录成功页面  success.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML >
    <html>
    	<head>
    		<title>登录成功</title>
    	</head>
    	<body>	${username},欢迎回来。
    	</body>
    </html>

    登录失败页面 error.jsp


    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML>
    <html>
    	<head>
    		<title>登录失败</title>
    	</head>
    	<body>用户名没有输入。
    	</body>
    </html>




    
    展开全文
  • 计应134(实验班) 詹加全 1、首先在myeclipse中新建一个项目。 2、右键选择项目->...4、选择Finish就完成的Struts2的创建,接下来就开始Struts配置。 5、打开struts.xml配置 6、接下来新建...

    计应134(实验班) 詹加全

    1、首先在myeclipse中新建一个项目。

    2、右键选择项目->Myeclipse->Add Struts Capabilities 新建Struts

    3、选择Struts 2.1其他的不变。

    4、选择Finish就完成的Struts2的创建,接下来就开始Struts的配置。

    5、打开struts.xml,配置

    6、接下来新建helloWord。

    7、下面新建视图页面helloword.jsp。

    8、接下来新建success.jsp和error.jsp页面

    9、接下来就部署运行 选择Tomcat6.x。

    10、打开浏览器输入地址。

    11、输入内容后提交。

    12、如果没有输入内容就提示未输入内容。

    总结:学习Struts2总的来说主要是靠配置,与以前学的相比更加的有条理,更加的清晰不用混淆在一起,当两者需要的时候直接配置就行。

    在配置时也遇到许多的问题,例如在配置class时忘记加进java类 导致第一次运行时找不到页面,慢慢的根据书上才着找到错误 解决了这个问题。总的来说还是有一点困难。

     

    转载于:https://www.cnblogs.com/z-j-q/p/4560676.html

    展开全文
  • 第四章 深入Struts2配置(struts.xml) 一.bean元素 作用: 1.创建该Bean的实例,将该实例作为Struts2框架的核心组建使用。框架大部分核心组件Struts2不是直接以硬编码的方式写在代码中的,而是以自己的IOC(依赖注入...

    一.bean元素

    作用:

    1.创建该Bean的实例,将该实例作为Struts2框架的核心组建使用。框架大部分核心组件Struts2并不是直接以硬编码的方式写在代码中的,而是以自己的IOC(依赖注入、控制反转容器)来管理框架的核心组件。从而允许开发者可以非常方便的扩展该框架的核心组件,当开发者需要扩展,或者替换Struts2的核心组件的时候,只需要提供自己的组件实现类,并且将组件实现类部署在Struts2的IOC容器当中就可以了。

    PS:对于绝大部分Struts2应用而言,我们无需重新定义Struts2框架的核心组件。

    2.Bean包含的静态方法需要一个值注入。

    实例

    1.替换Struts2核心组件

    我们使用自定义的ObjectFactory来替换Struts2内置的ObjectFactory。

    <struts>
    	<!-- 配置定制的Objectfactory Bean,该Bean实现了ObjectFactory接口,实现类是MyObjectFactory -->
    	<bean type="com.opensymphony.xwork2.ObjectFacotry" name="myfactory" class="com.company.myapp.MyObjectFacotry"/>
    </struts>
    2.将自定义类依赖注入到Struts2中,可以在项目启动过程中被创建,并且可以控制类的初始化参数。

    <struts>
    
    	<bean class="org.apache.struts2.dispatcher.FilterDispatcher" static="true"/>
    </struts>

    属性详解:

    class:这个属性是个必填属性,它指定了Bean实例的实现类。

    name:该属性指定了Bean实例的名字,对于有相同type类型的多个Bean,则它们的name属性不能相同。

    这个属性也是一个可选属性。

    type:这个属性是个可选属性,它指定了Bean实例实现的Struts2规范,该规范通常是通过某个接口来体现的,

    因此该属性的值通常是一个Struts2接口。如果需要将Bean实例作为Struts2组件来使用,则应该指定该属性值。

    scope:该属性指定Bean实例的作用域。该属性是个可选属性,属性值只能是default、singleton、request、session或thread其中之一。

    static:该属性值Bean是否使用静态方法注入。通常而言,当指定了type属性时,该属性不应该指定为true。

    optional:该属性指定该Bean是否是一个可选Bean,该属性是一个可选属性。


    二。常量配置constant 

    说明:

    在struts.xml中配置struts.properties文件中的配置信息。

    PS:通常推荐在struts.xml文件中定义Struts2属性,而不是在struts.properties文件中定义Struts2属性。其实还可以在web.xml文件中配置,但很不推荐。

    通常,Struts2框架按如下搜索顺序加载struts2常量;

    1.struts-default.xml:该文件保存在struts2-core-xxx.jar文件中。

    2.struts-plugin.xml:该文件保存在struts2-xxx-xxxx.jar等Struts2插件JAR文件中。

    3.struts.xml:该文件是Web应用默认的Struts配置文件。

    4.struts.properties:该文件是Web应用默认的Struts2配置文件。

    5.web.xml:该文件是Web应用的配置文件。

    如果在多个文件中配置了同一个Struts2常量,则最后一个文件中配置的常量值会覆盖前面文件中配置的常量值。

    实例:

    在struts.xml文件中配置的方法:

    <struts>
    	<!-- 通过 constant元素配置 -->
    	<constant name="struts.custom.i18n.resources" value="mess"/>
    </struts>
    在struts.properties文件中配置的方法

    struts.i18n.encoding=UTF-8
    在web.xml文件中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    
      
    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>
    			org.apache.struts2.dispatcher.FilterDispatcher
    		</filter-class>
    		<init-param>
    			<param-name>struts.custom.i18n.resources</param-name>
    			<param-value>messageResource</param-value>
    		</init-param>
    	</filter>
    	
    	<filter-mapping>
    		<filter-name>struts2</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    
        <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    三。包配置package

    说明:

    Struts2框架中核心组件就是Action、拦截器等,Struts2框架使用包来管理Action、和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。

    配置包时,必须指定name属性,这个属性是引用该包的key。还可以指定一个可选的extends属性,extends属性值必须是另一个包的name属性。指定extends属性表示让该包继承其他包,子包可以继承一个或多个父包中的拦截器、拦截器栈、action等配置。

    除此之外,Struts2还提供了一种所谓的抽象包,抽象包中不能包含Action定义。可以为该package元素增加abstract="true"属性来彰显该包是抽象包。


    属性详解:

    name:这事一个必填属性,该属性指定该包的名字,该名字是该包被其他包引用的key。

    extends;该属性是一个可选属性,该属性指定该包继承其他包。继承其他包,可以继承其他包中的Action定义、拦截器定义等。

    namespace;该属性是一个可选属性,该属性定义该包的命名空间。

    1.namespace的格式是"/开头",单独用x不行,要设置为/x

    2.namespace可以重名。但只有一个生效,最后的配置会覆盖之前的配置。

    abstract:该属性是一个可选属性,他指定该包是否是一个抽象包。抽象包中不能定义Action。


    四。命名空间配置

    说明:

    考虑到同一个Web应用中需要同名的Action,Struts2以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。

    Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。

    如果一个包未指定namespace属性,即该包使用默认的命名空间,默认命名空间为“”。

    当某个包指定了命名空间后,该包下所有Action处理的URL应该是命名空间+Action名。例如包名为/book,Action名为getBook。则访问该action的URL为http://xxxxxxx/book/getbook.action

    除此之外,Struts2还可以显示指定根命名空间,通过设置某个包的namespace="/"来指定根命名空间。根命名空间与默认命名空间是不一样的。

    命名空间只有一个级别。

    实例:

    bar.action:在默认命名空间中查找。

    /bar.action:现在“/”根命名空间中查找,再到默认命名空间中查找。

    /barspace/bar.action:先在barspace命名空间中查找,再到默认命名空间中查找。

    /barspace/search/bar.action:先在barspace命名空间中查找,再到默认命名空间中查找。

    五。包含配置

    说明:

    包含配置体现的是软件工程中“分而治之”的原则。

    Struts2允许将一个配置文件分解成多个配置文件,从而提供配置文件的可读性。一旦分解则需要在struts.xml中将分解的文件导入。

    实例:

    <struts>
    	<include file="文件名称"/>
    	<include file="文件名称"/>
    </struts>


    六。拦截器配置
    说明:
    拦截器其实就是AOP(面向切面编程)的编程思想。拦截器允许在Action处理之前或者Action处理结束之后,插入开发者自定义的代码。
    在很多时候,我们需要多个Action进行相同的操作,例如权限管理,此处就可以使用拦截器来检查用户是否登录,用户的权限是否足够。
    例如:
    进行权限控制
    跟踪日志
    跟踪系统的性能瓶颈(我们可以通过记录每个Action开始处理时间和结束时间,从而获取耗时较长的Action)
    实例:
    定义拦截器和拦截器栈
    <!-- 该元素可以出现,也可以不出现,最多出现一次 -->  
            <interceptors>  
                <!-- 该元素的interceptor元素和interceptor-stack至少出现其中之一,  
                也可以两者都出现 -->  
                <!-- 下面元素可以出现0次,也可以出现无限多次 -->  
                <interceptor name="" class="">  
                    <!-- 下面元素可以出现0次,也可以出现无限多次 -->  
                    <param name="参数名">参数值</param>  
                </interceptor>  
                <!-- 下面元素可以出现0次,也可以出现无限多次 -->  
                <interceptor-stack name="">  
                    <!-- 该元素必须出现,可以出现无限多次 -->  
                    <interceptor-ref name="">  
                        <!-- 下面元素可以出现0次,也可以无限多次 -->  
                        <param name="参数名">参数值</param>  
                    </interceptor-ref>  
                </interceptor-stack>  
            </interceptors>

    使用拦截器

    <action name="MyAction" class"my.NyAction">
    	<result name="success">...</result>
    	<interceptor-ref name="authorityandlog"/>
    <action>
    七。Action

    1.当用户配置Action类没有指定class属性时,系统自动使用ActionSupport类作为默认的Action处理类。
    普通类就可以作为Action的类,在处理请求响应。String2提供了一些接口、类等来便于开发者开发。
    2.Action的name属性的命名规则。不推荐在Action的name属性值中使用(.)(-)。
    接口:
    Action
    该接口中定义了一系列的结果字符串,如error、input、success等。
    还提供了一个方法execute()定义,来等待开发者实现。
    类:
    ActionSupport
    该接口实现了Action,Validateable,ValidationAware,TextProvider,LocaleProvider,Serializable接口,包含以下方法的实现
    //收集校验错误的方法
    public void setActionErrors(Collection errorMessages){
          validationAware.setActionErrors(errorMessages);
    }
    //返回校验错误的方法

    		public Collection<String> getActionErrors() {
    			return ValidationAware.getActionErrors();
    		}


    //设置表单域校验错误信息

    		public void setFieldErrors(Map<String, List<String>> errorMap) {
    			validationAware.setFieldErrors(errorMap);
    		}


    //返回表单域校验错误信息

    		public Map<String, List<String>> getFieldErrors() {
    			return validationAware.getFieldErrors();
    		}
    //控制locale的相关信息
    		public Locale getLocale() {
    			return actionContext.getContext().getLocale();
    		}
    //返回国际化信息的方法
    		public String getText(String textName) {
    			return textProvider.getText(textName);
    		}
    //用于访问国际化资源包的方法

    		public ResourceBundle getTexts() {
    			return textProvider.getTexts();
    		}
    //添加错误信息
    		public void addActionError(String anErrorMessage) {
    			validationAware.addActionError(anErrorMessage);
    		}
    //添加字段校验失败的错误信息

    		public void addFieldError(String fieldName, String errorMessage) {
    			validationAware.addFieldError(fieldName,errorMessage);
    		}
    //默认的input方法,直接返回input字符串
    		public String input() throws Exception {
    			return INPUT;
    		}
    //默认的处理用户请求的方法,直接返回success字符串
    		public String execute() throws Exception {
    			return SUCCESS;
    		}
    //清除所有错误信息的方法
    		public void clearErrorsAndMessages() {
    			validationAware.clearErrorsAndMessages();
    		}
    //包含空的输入校验方法
    		public void validate() {
    		}
    2.Action访问Servlet API
    Web应用中通常需要访问的Servlet API就是HttpServletRequest、HttpSession和ServletContext,这三个类分别代表JSP内置对象中的request、session和appliaction。
    Struts2提供了一个ActionContext类,Struts2的Action可以通过该类来访问Servlet API。以下是ActionContext类中包含的几个常用的方法:
    Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法。
    Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。
    static ActionContext getContext():静态方法,获取系统的ActionContext实例。
    Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法。
    Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
    void setApplication(Map application):直接传入一个MAP实例,将该Map实例里的key-value对转换成application的属性名、属性值。
    void setSession():直接传入一个MAP实例,将该Map实例里的key-value对转换成session的属性名、属性值。
    例如:在action类execute()方法中
    //获取ActionContext实例,通过该实例访问Servlet API
    ActionContext ctx = ActionContext.getContext();
    //获取session
    cxt.getSession();
    //保存session
    cxt.setSession(session);
    //获取request值
    cxt.get(key);
    //保存request值
    cxt.put(key, value);


    3.Action直接访问Servlet API
    虽然Struts2提供了ActionContext来访问Servlet API,但这种访问毕竟不能直接获得Servlet API实例,为了在Action直接访问Servlet API,Struts2还提供了如下系列接口。
    ServletContextAware:实现该接口的Action可以直接访问web应用的ServletContext实例。
    ServletRequestAware:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例。
    ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例。


    4.动态方法调用
    DIM(Dynamic Method Invocation,动态方法),就是在访问URL时使用如下格式:ActionName!methodName.action
    struts-2.3.15.3-all默认将该功能关闭了。但可以通过struts.properties开启。
    5.为action元素指定method属性
    略过。。。
    6.使用通配符
    在配置action元素时,需要指定name、class和method属性,这三个属性都可支持通配符,这种使用通配符的方式是另一种形式的动态方法调用。
    例如:

    		<action name="*Action" class="com.messageAction" method="{1}">
    			<!-- 定义了三个result -->
    			<result name="input">/a.jsp</result>
    			<result name="error">/b.jsp</result>
    			<result name="success">/c.jsp</result>
    		</action>
    		当访问URL为loginAction时,调用com.messageAction类的login方法。
    
    		<action name="*_*Action" class="com.{1}Action" method="{1}">
    			<!-- 定义了三个result -->
    			<result name="input">/a.jsp</result>
    			<result name="error">/b.jsp</result>
    			<result name="success">/c.jsp</result>
    		</action>
    		当访问URL为login_messageAction时,调用com.loginAction类的message
    
    		<!-- 使用通配符配置了Action名,method属性是个动态值 -->
    		<action name="*">
    			<!-- 定义了三个result -->
    			<result name="input">/{1}.jsp</result>
    		</action>
    		当访问URL为abc.action时,则跳转到abc.jsp页面

    defAction.action的请求,struts.xml文件中同样配置了abcAction、*Action和*三个Action,defAction.action的请求显然不会被name为abcAction的Action处理,但到底是那个?
    结果:根据struts.xml中对以上三个配置的顺序而言,先配置的先匹配。

    7.默认Action
    Struts2还允许在容器中定义一个默认的Action,当用户请求的URL在容器中找不到对应的Action时,系统将使用默认的Action来处理用户请求。通过default-action-ref进行配置。

    		<default-action-ref name="strutsAction"></default-action-ref>
    		<!-- 使用通配符配置了Action名,method属性是个动态值 -->
    		<action name="strutsAction" class="com.messageAction" method="{1}">
    			<!-- 定义了三个result -->
    			<result name="input">/a.jsp</result>
    			<result name="error">/b.jsp</result>
    			<result name="success">/c.jsp</result>
    		</action>
    8.配置结果
    Struts2的Action处理用户请求结束后,返回一个普通字符串——逻辑试图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可让系统转到实际的视图资源。
    局部结果:将<result.../>作为<action.../>元素的子元素配置。
    全局结果:将<result.../>作为<global-results.../>元素的子元素配置。
    局部结果:详细配置
    	<result name="success" type="dispatcher">
    		<param name="location">/thank_you.jsp</param>
    		<param name="parse">true</param>
    	</result>
    属性详细:
    name:定义逻辑视图资源映射名。
    type:结果类型,
    location:该参数指定了该逻辑视图对应的实际视图资源。
    parse:该参数指定是否允许在实际视图名称中使用OGNL表达式,该参数值默认为true。如果设置该参数值为false,则不允许在实际视图名中使用表达式。通常无需修改该属性值。
    局部结果:普通配置
    	<action name="getBooks" class="action.GetBooksAction">
    		<result name="success">/showBooks.jsp</result>
    	</action>
    省去type:默认值为dispatcher
    省去name默认值为success
    9.Struts2支持的处理结果类型
    Struts2支持使用多种视图技术,例如JSP、Velocity和FreeMarker等。
    Struts2的结果类型要求实现com.opensymphony.xwork.Result,这个结果是所有Action执行结果的通用接口。如果我们需要自己的结果类型,我们应该提供一个实现该接口的类,并且在struts.xml文件中配置该结果的类型。
    dispatcher结果类型:用户JSP整合的结果类型。

    chain结果类型:Action链式处理的结果类型。从一个Action处理内部跳转到另一个Action,每个Action的拦截器都会执行。

    可以通过<param>标签向下一个Action传值。

    固定参数说明:

    actionName (默认) - 被调用的action的名字
    namespace - 被调用的action的名称空间. 如果名称空间为空,这默认为当前名称空间
    method - 用于指定目标action的另一个方法被调用. 如果空,默认为excute方法

    实例:

    		<!-- 定义拦截器 -->
    		<interceptors>
    			<interceptor name="simple" class="intercepter.SimpleInterceptor">
    				<param name="name">小拦截器(定义位置A)</param>
    			</interceptor>
    		</interceptors>
    		
    		<action name="Login" class="action.LoginAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Login)</param>
    			</interceptor-ref>
    			<result name="error" type="chain">
    				<param name="actionName">Chain</param>
    				<param name="namespace">/x</param>
    			</result>
    		</action>
    		
    		<action name="Chain" class="action.ChainAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Chain)</param>
    			</interceptor-ref>
    			<result name="success" >/Login.jsp</result>
    		</action>
    请求Login.action,由action.LoginAction类处理,返回"INPUT"字符串,请求从Login处理过程中跳转到Chain.action由action.ChainAction类处理。

    LoginAction和ChainAction的execute均有一个数据语句,证明执行通过。

    simple拦截器中有一句输出,证明执行通过。

    执行结果输出如下

    1.拦截器输出(Login的拦截器开始)

    2.LoginAction类处理信息输出

    3.拦截器输出(Chain的拦截器开始)

    4.ChainAction类处理信息输出

    5.拦截器输出(Chain的拦截器结束)

    6.拦截器输出(Login的拦截器结束)


    redirect结果类型:用于直接跳转到其他URL的结果类型。(重定向,丢失请求参数等等)。

          从一个Action处理后跳转到另一个地址(丢失上一个请求的全部请求参数值),每个Action的拦截器都会执行。

    可以通过<param>标签向下一个地址传值。

    固定参数说明:

    location (默认) - 跳转地址
    parse - 默认为true. 如果设置为false, location参数不会被当作Ognl表达式解析.

    		<!-- 定义拦截器 -->
    		<interceptors>
    			<interceptor name="simple" class="intercepter.SimpleInterceptor">
    				<param name="name">小拦截器(定义位置A)</param>
    			</interceptor>
    		</interceptors>
    		
    		<action name="Login" class="action.LoginAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Login)</param>
    			</interceptor-ref>
    			<result name="error" type="redirect">
    				<param name="location">/x/Chain.action</param>
    			</result>
    		</action>
    		
    		<action name="Chain" class="action.ChainAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Chain)</param>
    			</interceptor-ref>
    			<result name="success" >/Login.jsp</result>
    		</action>
    请求Login.action,由action.LoginAction类处理,返回"ERROR"字符串,请求从Login处理结束后跳转到Chain.action由action.ChainAction类处理。

    LoginAction和ChainAction的execute均有一个数据语句,证明执行通过。

    simple拦截器中有一句输出,证明执行通过。

    执行结果输出如下

    1.拦截器输出(Login的拦截器开始)

    2.LoginAction类处理信息输出

    3.拦截器输出(Login的拦截器结束)


    4.拦截器输出(Chain的拦截器开始)

    5.ChainAction类处理信息输出

    6.拦截器输出(Chain的拦截器结束)


    redirect-action结果类型:用于直接跳转到其他Action的结果类型。(重定向,丢失请求参数等等)

    此type值根据不同Struts2版本而不同:2.3为redirectAction,其他版本还有redirectaction、redirect-action等。

    启动失败提示如下There is no result type defined for type 'redirect-Action' mapped with name 'error'.  Did you mean 'redirectACtion'?则表示type值问题。


    可以通过<param>标签向下一个Action传值。

    固定参数说明

    actionName (默认) - 重定位到的action名
    namespace - action的名称空间. 如果为null,则为当前名称空间

    		<!-- 定义拦截器 -->
    		<interceptors>
    			<interceptor name="simple" class="intercepter.SimpleInterceptor">
    				<param name="name">小拦截器(定义位置A)</param>
    			</interceptor>
    		</interceptors>
    		
    		<action name="Login" class="action.LoginAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Login)</param>
    			</interceptor-ref>
    			<result name="error" type="redirectAction">
    				<param name="actionName">Chain</param>
    				<param name="namespace">/x</param>
    			</result>
    		</action>
    		
    		<action name="Chain" class="action.ChainAction">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="simple">
    				<param name="name">小拦截器(定义位置Chain)</param>
    			</interceptor-ref>
    			<result name="success" >/Login.jsp</result>
    		</action>

    请求Login.action,由action.LoginAction类处理,返回"ERROR"字符串,请求从Login处理结束后跳转到Chain.action由action.ChainAction类处理。

    LoginAction和ChainAction的execute均有一个数据语句,证明执行通过。

    simple拦截器中有一句输出,证明执行通过。

    执行结果输出如下

    1.拦截器输出(Login的拦截器开始)

    2.LoginAction类处理信息输出

    3.拦截器输出(Login的拦截器结束)


    4.拦截器输出(Chain的拦截器开始)

    5.ChainAction类处理信息输出

    6.拦截器输出(Chain的拦截器结束)


    chart结果类型:用于整合JFreeChart的结果类型。

    freemarker结果类型:用于FreeMarker整合的结果类型。
    httpheader结果类型:用于控制特殊的HTTP行为的结果类型。
    jasper结果类型:用于JasperReports整合的结果类型。
    jsf结果类型:用于与JSF整合的结果类型。
    stream结果类型:用于向浏览器返回一个InputStream(一般用于文件下载).
    tiles结果类型:用于与Tiles整合的结果类型。
    velocity结果类型:用于与Velocity整合的结果类型。
    xslt结果类型:用于与XML/XSLT整合的结果类型。
    plaintext结果类型:用于显示某个页面的原始代码的结果类型。
    遇到过的结果类型:
    json:用于返回json字符串,通过Ajax访问action后返回json字符串给ajax使用。


    10.动态结果
    我们可以想配置动态action那样配置动态的result。
    1.配置<result.../>元素时使用表达式语法,从而允许根据请求动态决定实际资源。
    	<action name="getBooks_*" class="action.GetBooksAction" method="{1}">
    		<result name="success">/{1}.jsp</result>
    	</action>
    当请求URL为:getBooks_success.action时,调用action.GetBooksAction类的success方法,返回success字符串时动态访问到success.jsp页面。
    2.配置<result.../>元素时,使用OGNL表达式。即形式为:${属性名.属性名.属性名},此处的属性名就是action中的属性。

    	<action name="getBooks" class="action.GetBooksAction">
    		<result type="redirect-action" name="success">/getBook.action?skillName=${currentSkill.name}</result>
    	</action>
    当请求URL到达action.GetBooksAction内处理,对currentSkill.name属性赋值为abc。返回字符串为success时,跳转到/getBook.action?skillName=abc的URL。
    11.全局结果
    全局结果:将<result.../>作为<global-results.../>元素的子元素配置。
    局部结果会覆盖全部结果的有效性。


    12.属性驱动和模型驱动
    模型驱动:就是使用单独的javaBean实例来贯穿整个MVC流程;
    属性驱动:就是使用action的属性作为贯穿整个MVC流程的信息携带者。
    模型驱动使用时,Action必须实现ModelDriven接口,实现该接口则必须实现getModel方法,该方法用于把Action和与之对应的Model实例关联起来。
    将URL请求参数转为action的属性或者action的模型,是通过Struts拦截器实现的。
    将参数转为属性是通过

    <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
    将参数转为模型是通过
    以上两个拦截器在默认拦截器栈中已被设置。
    13.Struts2的异常机制
    说明:
    Struts2提供了一种声明式的异常处理方式。通过在struts.xml中配置<exception-mapping.../>元素完成。
    action的execute方法定义public String execute() throws Exception,该方法将任何异常通通抛出去。在struts.xml中配置各种异常对应的物理页面地址。则当action抛出A异常时跳转到A异常对应的异常信息展现页面。
    该功能由拦截器实现:在默认defaultStack拦截器栈中已配置。
    <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>


    局部异常映射:将<exception-mapping.../>元素作为<action.../>元素的子元素配置。
    全局异常映射:将<exception-mapping.../>元素作为<global-exception-mapping.../>元素的子元素配置。
    局部异常映射覆盖全局异常映射的效果。
    实例:

    		<global-results>
    			<result name="sql">/sql.jsp</result>
    			<result name="root">/root.jsp</result>
    		</global-results>
    		<global-exception-mappings>
    			<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
    			<exception-mapping result="root" exception="java.lang.Exception"></exception-mapping>
    		</global-exception-mappings>
    		<action name="getBooks" class="action.GetBooksAction">
    			<exception-mapping result="my" exception="com.myException"></exception-mapping>
    			<result name="success">/showBooks.jsp</result>
    			<result name="login">/Login.jsp</result>
    		</action>
    属性详解:
    exception:此属性指定该异常映射所设置的异常类型。
    result:此属性指定Action出现该异常时,系统转入result属性所指向的结果。
    14.在页面中输出错误信息
    <s:property value="exception"/>:输出异常对象本身。
    <s:property value="exceptionStack"/>:输出异常堆栈信息。
    exception是一个对象,所以打点调用该对象的属性进行输出。

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 一、搭建Struts2环境步骤 1、下载相关Jar包 A、Apache Struts官方网站 http://struts.apache.org/ ... 2、创建Web项目 3、创建并完善相关配置文件  过滤器 (在src下创建struts.xml) (写自己要用的东西)
  • 在IDEA中配置struts.xml时 extends=“struts-default” 报红,配置拦截器时属性无预选项提示,也爆红。 struts.xml本身的配置没有错误。 解决办法 Ctrl+Shift+Alt+S调出Project Structure 原因 创建项目时,...
  • 在IDEA中配置struts.xml时extends="struts-default" 报红,配置拦截器时属性无预选项提示,也爆红。 struts.xml本身的配置没有错误。 解决办法 Ctrl+Shift+Alt+S调出Project Structure 原因...
  • 1.添加struts2支持包到...2.创建struts.xml文件放到src目录下。 View Code <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/str
  • struts2环境配置

    2019-06-04 17:34:30
    配置struts.xml 1.使用eclipse创建项目 File》New》Dynamic web project [记得选择生成web.xml文件,会在WebContent目录下生成] 2.在WebContent》WEB-INF>lib中导入包,build path 下载地址:h...
  • struts2.x的基本配置

    2012-11-22 19:18:24
    1.先配置xml  struts2  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter      struts2  /*   ...2.在src目录下面创建并配置struts.xml 之前要在w
  • Struts2性能调优配置

    2017-02-07 22:23:09
    配置Struts2核心过滤器添加struts2.xml到src目录 struts.xml配置如下 对应Action代码 此时的代码已经差不多编写完成 现在就差对应的页面请求,代码如下 注意此处代码,如果需要在某个请求开启性能监控的话...
  • Struts2配置与初步使用

    2017-07-08 10:08:07
    一:Struts历史 Struts是一个JavaWeb框架,Struts2不是Struts1的升级版本,而是一个基于WebWork的全新框架.Struts2是基于MVC开发模型的一个框架,基于表现层的框架. ...3:在web.xml配置Struts2的核心控制器
  • 今天在练习一个项目时,用到了shiro框架,刚开始在web.xml中把shiro过滤器的声明放到了struts2过滤器的后面,然后在spring配置文件中注入shiro的URL拦截规则,运行时发现没有按照预想的规则进行拦截。经过一段时间...
  • Struts2中,Action类实现任何接口或扩展任何类不是必需的,但它需要创建一个execute()方法来实现所有的业务逻辑,返回一个字符串值,告诉用户重定向到哪里。 Action类的作用 Struts的Action类存放动作和...
  • Struts2.0入门基本配置步骤

    千次阅读 2010-05-15 21:50:00
    Struts2.0入门基本配置步骤 1.创建web工程 2.添加Struts2框架所必须的jar包 3.配置web.xml文件 4.编写LoginAction.java...添加并配置Struts2的struts.xml配置文件 6.创建jsp页面 7.部署运行项目进行测试 1.创建we
  • 上篇文章详细记录了struts2环境配置的步骤,此篇文章主要记录strtus2整合spring环境配置 ...2.在web.xml中设置监听器,指明随后创建的spring的配置文件的地址 <?xml version="1.0" enco...
  • Struts2创建系统的Action代理...配置Struts2全局属性的struts.properties文件。 struts.xml文件内定义了Struts2的系列Action,定义Action时,指定该Action的实现类,定义该Action处理结果与视图资源之间的映射关系。
  • xml配置文件

    2018-07-19 18:36:00
    以前使用struts2框架的时候没有注意过创建的web.xml文件,最近在搭建struts框架的时候碰到一个问题。下面首先我把自己的环境介绍一下。  JDK1.8、Tomcat8、Myeclipse2017(Myeclipse8.5)、Maven3.5.4  问题是...
  • struts1 + spring + hibernate xml方式注入dao层接口applicationContext.xml配置文件配置实体类对应hibernate配置文件(Abc**.hbm.xml创建bean注入sessionFactoryapplicationContext-XXX.xml配置文件(模块自己...
  • 1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。  2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。  3、容器将转换为...
  • 2. web.xml配置struts2的核心过滤器 核心过滤器:StrutsPrepareAndExecuteFilter 配置核心过滤器: 3.创建action类 4.在struts.xml中配置Action的跳转路径,编写jsp页面 5.访问路径 http://localhost:8080/项目...
  • 1. 加载struts2的dtd文件,使struts.xml不用联网就能验证,在eclipse中有提示 在src下创建struts.xml:  xml version="1.0" encoding="UTF-8" ?> DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD...
  • Struts2框架创建流程

    2018-10-30 21:46:16
    Struts2框架创建流程 工具:MyEclipse - 搭建过程: 1. 首先新建一个普通的JavaWeb项目如图: 2. 然后需要导入jar包将其放在WebRoot的Web-INF的lib下: ** 注意:导入会自动解析放入Web App Libraries下;如果没有...
  • struts2学习心得

    2019-05-18 19:25:40
    创建并配置struts.xml 配置web.xml 发布并测试项目 第三章、第四章 1. struts框架的工作原理; 发起请求 服务器接收请求并交给struts2的核心控制器 根据请求的url查看struts.xml中的namespac...
  • Struts2创建Web项目

    2016-08-27 11:57:43
    一、导入相关jar包新建...二、配置web.xml文件在文件中加入filter过滤器,过滤到struts2下,其中确认filter-class的方法就是按住Ctrl键,点击看能否跳转链接,配置文件如下。<?xml version="1.0" encoding="UTF-8"?>
  • Struts2作为一个成熟的web框架,以其使用的便捷性赢得了大量拥簇,今天我就来手动创建一个类似于struts.xml配置文件,手动编写一个与struts2主过滤器作用相同的filter,仅供大家参考。 1、创建web项目。修改web....

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 309
精华内容 123
关键字:

创建并配置strutsxml