您的位置:首页 > 编程语言 > Java开发

JavaWeb框架-Struts2-1-Hello Struts2!

2017-10-29 18:56 369 查看
话说:

世界之所以缤纷多彩,就在于百花齐放!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.LoginAction
10a06
3" 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、没有对比,就木有伤害。所以,博观而约取,项目中灵活运用即可。

好了,开饭喽!下期再会!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: