Struts2框架开发1.1

来源:互联网 发布:mysql 增加unique 编辑:程序博客网 时间:2024/06/06 04:43

1.下载Struts2的核心jar
2.将jar发布到项目当中
3.更改核心配置文件(在web.xml中配置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>

4.配置struts2的配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>     <package name="default" namespace="/" extends="struts-default">    </package></struts>    

Struts配置 已经完成

发布功能供页面访问(登录例子)

首先准备一个index.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title>My JSP 'index.jsp' starting page</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->  </head>  <body>    <form action="login.action">        <input type="text" name="user.name" /> <br/>        <input type="text" name="user.pass" /> <br/>        <input type="submit" value="提交" /> <br/>    </form>  </body></html>

之后编写一个名字为login.action的类

package com;public class UserAction {     public User user;    public String execute(){        if(user.getName().equals("zhangsan")){            if(user.getPass().equals("123")){                return "success";            }        }        return "error";    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }}

然后再在struts.xml中配置已经写好的action动作

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>     <package name="default" namespace="/" extends="struts-default">        <action name="login" class="com.UserAction" method="execute">            <result name="success"  >/success.jsp</result>            <result name="error">/error.jsp</result>        </action>    </package></struts>    

做完全部的准备之后,整个页面所完成的工作如下
项目配置到tomcat中,打开网址进入到项目中
首先进入web.xml进入默认页面index.jsp
index.jsp加载完成所有的页面样式
当用户提交信息的时候,表单提交到一个叫login.action的action中

<form action="login.action" >    ...</form>

web.xml里的拦截器拦截了所有.action的路径

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

现在struts.xml里查找是否存在该名字为login的action然后再找该名字的action的位置,再查找需要调用哪个功能的方法名字

<action name="login" class="com.UserAction" method="execute">

找到方法名字之后进入action的类,找到并执行该方法

public class UserAction {    public String execute(){        return "success";    }}

最后返回一个值后,丢到struts.xml的result中匹配相关的值,然后跳转到相关的页面中去。

<result name="success"  >/success.jsp</result>

大致的整个流程就是这样的

/*
package提供了将多个Action组织为一个模块的方式
package的名字必须是唯一的package可以扩展
当一个package扩展自另一个package时,该package会在本身配置的基础上加入扩展的package
的配置 父package必须在子package前配置
name:package的名称
extends:继承的父package名称
abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
namespace:定义package命名空间 该命名空间影响到url地址,例如此命名空间为/test 那么访问的地址是http:localhost:8080/struts2/test/XX.action
*/

<package name="default" namespace="/" extends="struts-default">

Struts2的工作原理及文件结构
工作原理
核心文件:
Web.xml
任何MVC框架都需要与Web应用整合,这就不得不借助于
web.xml文件,只有配置在web.xml文件中Servlet才会被
应用加载。
Struts.xml
struts2的核心配置文件,在开发过程中利用率最高。
该文件主要负责应用中的Action映射,以及该Action
包含的Result定义的等。
包含的内容:
1.全局属性
2.用户请求和响应Action之间的对应关系
3.Action可能用到的参数和返回结果
4.各种拦截器的配置
struts.properties
struts2框架的全局属性文件,自动加载
该文件包含很多key-value对。
该文件完全可以配置在struts.xml文件中,使用constant元素。

1.访问Servlet API
2.Action 搜索顺序
第一步:判断package是否存在
存在
第二步:判断action是否存在,如果不存在则去默认namespace的package里面去寻找action
第三步:如果没有,则报错
不存在
第二步:检查上一级路径的package是否存在(直到默认namespace),重复第一步
第三步:如果没有,则报错
3.动态方法调用
动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。
1.指定method属性
2.感叹号方式

/index.jsp
/add.jsp
/update.jsp


3.通配符方式(推荐)

/index.jsp
{1}
{1}


/index.jsp
{2}
{2}

4.指定多个配置文件

//保证编码不会乱

5.默认Action


/error.jsp

6.Struts2后缀
在struts.xml中配置
将后缀改成html,不是action

在web.xml中配置

struts.action.extension
do

7.接收参数
1.使用Action的属性接收参数
2.使用DomainModel接收参数(对象)
3.使用ModelDriven接收参数
8.处理结果类型
1.input 类型转换错误(自定义的Input可以写在valid方法里)
if(user.getUsername() == null || “”.equals(user.getUsername())){
this.addFieldError(“errorname”,”用户名不能为空”);
return INPUT;
}

Action的执行,需要从前端界面获取参数,input就是代表这个参数输入的界面,
一般在应用中,会对这些参数进行验证,如果验证没有通过,将自动返回该视图。
2.SUCCESS
Action正确的执行完成,返回相应的视图,success是name属性的默认
3.NONE
表示Action正确的执行完成,但并不返回任何视图
4.ERROR
表示Action执行失败,返回错误处理视图
5.LOGIN
Action 因为用户没有登录的原因没有正确执行,将返回该登录视图,
要求用户进行登录验证。

处理结果是通过在struts.xml使用<result/>标签配置结果。根据位置的不同。分为两种结果:局部结果:    将<result/>作为<action>的元素的子元素配置全局结果:    将<result/>作为<global-result />元素的子元素配置
0 0