话说:
世界之所以缤纷多彩,就在于百花齐放!Web框架世界也是如此。Hibernate有它的魅力,Struts2也自有特点。来来,亲爱的读者朋友,我们一起来揭开Struts2的面纱吧。
目录:
一、整体架构
二、环境搭建
1、下载包
2、新建Maven项目(Web项目)
3、3种方式创建Action
4、配置struts.xml
5、配置web.xml
三、3中接收参数方式
四、总结
一、整体架构
开发环境:IDEA(2017.2.5)
最好新建Maven项目,Web项目也是可以的。
笔者经验,在MyEclipse、Eclipse中创建Maven项目都是一道坎,容易遇到各种报错,但是在IDEA中,It’s so Easy!
如果是web项目,把struts.xml放到src下即可,根据下载的包,把对应的包复制到lib下即可,其他跟Maven一模一样。
二、环境搭建
1、下载包
http://struts.apache.org/download.cgi#struts2513
下载那个-all的包。里面包含了所有。
作用是,方便在里面找到struts.xml配置文件,直接可以“拿来主义”。
2、新建Maven项目(Web项目)
此处省略100字……
如果读者对IDEA创建Maven项目有疑问,请参考笔者笔记:
http://note.youdao.com/noteshare?id=99b36d0e601fb56725fb7a7acece4aae&sub=D36A8FC839854BEE8C17FD6793E53BA3
3、3种方式创建Action
共3中方式创建Action,常用法一,简单嘛,什么也不用继承或者实现。Action作用类似我们的Servlet,主要实现业务逻辑、接收参数及页面跳转。
法一:普通Java类,编写public String execute() {}方法(要严格按照这个规矩来奥);
法二:实现Action接口,重写execute()方法;
法三:继承ActionSupport类,重写execute()方法。
package com.hmc.struts2.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
/**
* User:Meice
* 2017/10/29
*/
public class HelloAction extends ActionSupport{
/* @Override
public String execute() throws Exception {
System.out.println("法三:继承ActionSupport,重写execute方法...");
return "success";
}*/
//法二:实现Action接口,实现其中方法.注意导入的包:com.opensymphony.xwork2.Action;
/*public String execute() throws Exception {
System.out.println("法二:实现Action接口,实现execute方法...");
return "success";
}
*/
//法一:自己写一个方法:这个方法按照以下格式,返回String类型,方法名:execute,不能自作主张奥!
//默认方法名就叫做execute(),若要自定义,用method属性定义
public String execute() {
System.out.println("法一:自己写execute方法;execute Hello .....");
return "success";
}
}
4、配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="test" extends="struts-default">
<!--namespace默认:/ -->
<action name="hello" class="com.hmc.struts2.action.HelloAction">
<!--结果跳转,默认使用转发dispatcher-->
<result name="success">/hello.jsp</result>
</action>
<!--Action接受参数法一:属性方法-->
<action name="login" class="com.hmc.struts2.action.LoginAction" method="login">
<result name="success">/login_success.jsp</result>
</action>
<!--Action接受参数法二:JavaBean-->
<action name="login2" class="com.hmc.struts2.action.LoginAction2" method="login2">
<result name="success">/login_success.jsp</result>
</action>
<!--Action接受参数法三:ModelDriven-->
<action name="login3" class="com.hmc.struts2.action.LoginAction3" method="login3">
<result name="success">/login_success.jsp</result>
</action>
</package>
</struts>
5、配置web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
这个类,是Struts2规定死的,我们不用死记,只需要记住类:StrutsPrepareAndExecuteFilter,然后写一个测试类,自动导入即可。
这个过滤器有什么用呢?以前我们配置Servlet的时候,直接在web.xml中配置,所以默认和页面请求建立了关系。但这里我们在struts.xml中配置,怎么和页面建立联系呢?就是这个过滤器在起作用。
后续测试也可以发现,内置已经处理了中文编码问题,帅气!
三、3中接收参数方式
struts2有3中方式接收参数,最好做个对比表。原谅在下比较懒惰,所以嘛,看代码喽。
法一:属性方式接收
法二:JavaBean方式接收
法三:ModelDriven方式
三种方式法二、法三用得多。
这里分别用:LoginAction、LoginAction2、LoginAction3来实现三种接收参数的方式,对应的页面是:login.jsp、login2.jsp、login3.jsp
struts.xml不在重复,请读者参考创建Action的struts.xml配置。3中方法都可以输出username、pwd、及age。
1、法一:属性方式接收
LoginAction
package com.hmc.struts2.action;
/**
* User:Meice
* 2017/10/29
*/
public class LoginAction {
private String username;
private String pwd;
private int age;
public String login() {
System.out.println("登陆了...");
System.out.println("用户名:"+username+"用户密码: "+pwd+"年龄: "+age);
return "success";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
login_success.jsp
三种方法共用此界面。
<%--
User: Meice
Date: 2017/10/29
Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆成功</title>
</head>
<body>
恭喜?登陆成功!
</body>
</html>
login.jsp
<%--
User: Meice
Date: 2017/10/29
Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登陆</title>
</head>
<body>
<form action="login2" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确认"/></td>
</tr>
</table>
</form>
</body>
</html>
2、法一:JavaBean方式接收
这个最主要的特点是,把页面参数封装到一个实体类中,页面通过对象.属性来建立联系。
LoginAction2
package com.hmc.struts2.action;
import com.hmc.struts2.model.User;
/**
* User:Meice
* 2017/10/29
*/
public class LoginAction2 {
private User user;
public String login2() {
System.out.println(user);
//User{username='小美', pwd='123', age=0}
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
配置struts.xml(见最上面)
login2.jsp
<%--
User: Meice
Date: 2017/10/29
Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登陆</title>
</head>
<body>
<form action="login2" method="post">
<table>
<tr>
<td>用户名</td>
<%--这里user要用action里面定义的形参--%>
<td><input type="text" name="user.username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="user.pwd"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="user.age"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确认"/></td>
</tr>
</table>
</form>
</body>
</html>
注意,页面name=”user.username”
3、法三:ModelDriven方式
LoginAction3
package com.hmc.struts2.action;
import com.hmc.struts2.model.User;
import com.opensymphony.xwork2.ModelDriven;
/**
* User:Meice
* 2017/10/29
*/
public class LoginAction3 implements ModelDriven<User> {
private User user;
public User getModel() {
if(user ==null) {
user = new User();
}
return user;
}
public String login3() {
System.out.println(user);
return "success";
}
}
配置struts.xml(见最上面)
login3.jsp
<%--
User: Meice
Date: 2017/10/29
Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登陆</title>
</head>
<body>
<form action="login3" method="post">
<table>
<tr>
<td>用户名</td>
<%--这里user要用action里面定义的形参--%>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确认"/></td>
</tr>
</table>
</form>
</body>
</html>
这里页面属性可以恢复我们之前的习惯了。
使用ModelDriven,要news这个对象。
四、总结
1、Struts2给我们提供了获取参数的一个全新的视角:不用req.getParameter()等,页面跳转等都是不同于Servlet的全新方式;
2、web.xml中的过滤器,不用我们处理中文编码问题啦;
3、没有对比,就木有伤害。所以,博观而约取,项目中灵活运用即可。
好了,开饭喽!下期再会!
本文介绍了Struts2框架的基本概念,包括环境搭建步骤、三种创建Action的方法及其配置,并详细讲解了三种接收参数的方式。
2330

被折叠的 条评论
为什么被折叠?



