您的位置:首页 > 其它

strut2总结(1)

2016-09-18 22:59 113 查看
struts2是MVC框架的体现 他主要是将各个action通过拦截器的作用 来处理不同的业务逻辑

Struts2框架是MVC流程框架,适合分层开发。框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计。

关于这个的介绍可以详细看这篇博客
http://blog.csdn.net/lishuangzhe7047/article/details/21654169
首先是加载需要的jar文件



这是所需的jar文件 随后配置web,xml文件 来配置filter文件

<?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>strutDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>html</param-value>
</init-param>

</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置filterurl-pattern表示拦截所有的文件/*

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
表示加载这个类

随后在javaResources的src目录下新建一个struts.xml文件 表示配置strut文件

<?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来表示一个模块

用struts文件进行框起来 表示是struts范围内的

随后用package来组成action的一个模块 namespace 表示默认的后缀名 随后extend表示默认的扩展

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

随后配置action的名字 表示访问的路径名 后面跟随处理的类 再包含一个result标签 表示返回的结果 

<action name = "LoginAction"  class = "com.kevin.test.Login" method = "login">
<result name = "success">add.jsp</result>
</action>
整体初级的代码就是这样

<?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 = "LoginAction"  class = "com.kevin.test.Login" method = "login">
<result name = "success">add.jsp</result>
</action>
</package>
</struts>
随后在src目录下创建这个处理的类com,kevin,test,Login 这个类继承自ActionSupport类 默认执行的是excute这个方法 随后返回一个字符串 匹配result中的name 这里返回的事success随后再web-content文件下创建add.jsp即可

package com.kevin.test;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport {

public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
随后启动tomcat访问http://localhost:8080/struts2Demo/LoginAction

struts2Demo表示这个项目名 loginAciton表示action名 这样匹配即可 随后就可以访问道add.jsp这个文件

在struts中,默认的是访问excute() 这个函数,也可以自定义函数 比如login

这样就要改动action标签中的信息

<action name = "LoginAction"  class = "com.kevin.test.Login" method = "login">
表示执行login这个类中的login方法 这个方法也返回一个字符串 来匹配result中的信息

public String login(){
System.out.println(username);
return "SUCCESS";
}
在这个result中 根据返回的name 来找到不同的jsp文件 系统提供的有几个返回参数 例如success error等 有时我们也可以自定义返回值 例如返回login这样action标签就变为

<result name = "login">add.jsp</result>
这样即可

接下来谈一下namespace 的用法 主要是你在访问action之前可以有很多路径名 比如user

我们可以把package改编成这样

<package name = "example" namespace = "/user" extends="struts-default">
<action name = "login" class = "com.kevin.test.HelloWorld">
<result name = "success">add.jsp</result>
</action>
</package>
这样在web-content下面就要创建一个user文件夹 随后再这个下面创建add.jsp这样访问http://localhost:8080/Struts2Demo/user/login 就可以访问到add.jsp这个文件

接下来讲一下action的动态方法调用 我们可以为action来匹配多个参数

<action name="helloWorld_*" class="com.kevin.test.HelloWorld" method = "{1}">
<result name = "success">login.jsp</result>
<result name = "add">{1}.jsp</result>
<result name = "login">add.jsp</result>
</action>


这段代码的意思就是为helloWorld来匹配不同的参数 比如当访问helloWorld_add的时候 就执行HelloWorld这个类中的add方法 当返回为add的时候 就访问add.jsp这个文件 

这里只是讲一下初级的匹配 更深级的匹配以后再更新

当我们访问一个不存在的action的时候 要返回一个error.jsp这个文件 这时我们可以在,package标签内匹配一个   <default-action-ref标签 这里的name值表示映射到action值中的值 随后action来映射到一个错误的界面 如下

<package name="default" namespace = "/"  extends="struts-default">
<default-action-ref name = "index"></default-action-ref>
<action name = "index">
<result>error.jsp</result>
</action>
创建一个error.jsp随后访问不存在的action就可以映射到这个error.jsp

在以上的方法中,我们访问的都是action的名字 都没有加后缀 比如.html这时 我们可以在struts.xml中加这个标签

<constant name = "struts.enable.DynamicMethodInvocation" value = "true"></constant>
表示开启后缀名称,这实际上是在修改 struts.properties这个文件 我们可以在web.xml这个文件中在filter进行修改

<init-param>
<param-name>struts.action.extension</param-name>
<param-value>html</param-value>
</init-param>
表示初始化的参数这样我们就可以在访问action的时候来访问这个action.html这个路径

有时候一个struts文件有可能写不过 我们可以在头部包括一个新的xml文件



<include file = "helloWorld.xml"></include>
此时的helloWorld.xml文件也是一个配置的strut2.xml文件

获取表单中的值,有时候我们需要一个form表单 获得其中表单的值,这时我们先创建一个login.jsp 在其中创建一个form表单

有三种方法

 


<form action = "login" method = "post">
username<input type = "text" name = "username">
password<input type = "password" name = "password">
<input type = "submit" value = "submit">
</form>
在这其中要指定action的名字必须和strut.xml中的配置文件中的action名字统一 随后在指定的类中创建两个私有属性username和password

private String username;
private String password;
首先是第一种方法

生成getter和setter方法 随后在excute方法中可以打印输出username 整体代码如下

package com.kevin.test;

import com.opensymphony.xwork2.ActionSupport;

public class login extends ActionSupport {
private String username; private String password;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(username);
return SUCCESS;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


这样访问login.jsp文件中,填入表单的名字 就可以在后台控制器中进行访问输出

接下来是第二种方法,有时候在一个类中来保存表单的信息 不易于维护 例如有100个表单 就非常难操作 因此 我们可以新建一个User 这个类中包括了username和password

package com.kevin.test;

public class User {

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
此时在login这个类中就不能有username和password这两个属性,避免重复

此时在excute中输出就要用user.getName()这个方法

package com.kevin.test;

import com.opensymphony.xwork2.ActionSupport;

public class login extends ActionSupport {
private User user;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user.getUsername());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

}
这时在form表单中就要指定是user这个类的password和username
username<input type = "text" name = "user.username">
password<input type = "password" name = "user.password">
这时候访问上面这个域名http://localhost:8080/struts2Demo/login.jsp

填入表单的名称 也可以输出username

第三种方法用驱动的作用,这种方法也是比较推荐的 首先要实现ModelDriven这个接口 泛型指定为User

随后实现其方法 返回user这个类

public User getModel() {
// TODO Auto-generated method stub
return user;
}


随后user这个属性要进行实例化

private User user = new User();
随后不用执行user的get和set方法 删除去即可 整体代码如下

package com.kevin.test;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class login extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() { // TODO Auto-generated method stub return user; }

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user.getUsername());
return SUCCESS;
}

}
随后再form表单中就不用指定User的名字 这可以避免类user的名字改变时,前面form表单中也需要改变的局限性

<form action = "login" method = "post">
username<input type = "text" name = "username">
password<input type = "password" name = "password">
<input type = "submit" value = "submit">
</form>


这样即可,以上就是对strut2的简单部分的总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: