struts2是一个MVC框架,用来在我们的项目中简化我们的开发流程,采用拦截器的机制处理用户发送过来的请求。用xml配置或注解的方法连接用户请求与对应的处理逻辑。当然,简化了多少还要我们自己用过才能有一个切身的体会啦。
一、下载jar包
首先当然是jar包的下载啦,从struts2的官网Download按钮点进去,接着就点击下图红框那里下载,这个选项下载的就只有jar包,如果想要全部的文件可以选择第一个full Distribution。
接着就解压并打开我们刚才下载的文件,我导入的就只有最基础的一些jar包,如下图所示,我这里使用的是2.5.13的版本。顺便提一下,之前的版本有要求xwork-x.x.x这个jar包,现在他已经合并到了struts2.core这个jar包里面了。
接着我们就可以在我们的项目中使用struts2了,首先在eclipse中建立一个Dynamic Web Project(相当于MyEclipse中的Web Project),把刚才列举到的一些jar包放入我们WEB-INF包下的lib包中。
二、项目配置
配置web.xml
导完jar包后,我们要在项目的web.xml中配置struts2的过利器,将所有的请求都通过struts2来处理,web.xml在WEB-INF包下
<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>
这里提一下filter-class这个参数,在2.5版本之后的包就改成这个了,而使用2.3版本则是另一个参数,这里参考了这个博客:
https://blog.youkuaiyun.com/nttzli/article/details/52729489
配置struts.xml
至此web.xml所需要的配制就结束了,我们还有一个更重要的配置文件就是struts.xml,当然不想使用xml配置也行,还有一种方法就是使用注解,我们这里先讲用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="hellWorld" extends="struts-default">
<!-- 注册Action,即处理逻辑类
name属性:对应前端页面form表单里的action
class属性:对应处理类的路径
method属性:执行的方法,可不写,默认的方法是execute() -->
<action name="helloWorld" class="com.action.HelloAction" method="execute">
<!-- 返回的结果,根据name属性返回对应的页面,除了jsp页面也能返回其他的如html页面 -->
<result name="success">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
这里就是我们最简单的一个struts.xml的配置,首先就是<package>标签,他使用name属性给他每个action归类,在action很多的时候很好用,而action就是我们的处理逻辑,result就是我们的返回结果,基本都标在代码里了。
Action类
接着来配置我们的Action类,在src下创建一个名为com.action的包,在里面创建一个类叫HelloAction,代码如下:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//执行的方法
public String execute() throws Exception {
if ("Yang".equals(name)) {
return SUCCESS;
} else {
return ERROR;
}
}
}
这个Action类就相当于一个servlet,对前端页面发送过来的请求进行一些处理,并返回一个字符串,而struts.xml就是通过该字符换来判断要返回哪一个结果(这里是jsp页面)。类里面我们就判断了名字为name的input输入框的输入,这里的name就对应了JSP里表单里的元素的name属性的值,如果元素里的name="aaaa",则这里的定义的变量名也是aaaa。
这个类继承了ActionSuppot类,而ActionSupport类实现了Action接口。因此我们在execute()方法里返回的SUCCESS是Action接口的变量,相当于返回"success"字符串,ERROR同理。当然,因为已经在struts.xml中注册过了,所以我们可以不继承这个类,而这种情况下编写的代码如下,在一开始我们可以先这样实现这个类:
package com.action;
public class HelloAction {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//执行的方法
public String execute() throws Exception {
if ("Yang".equals(name)) {
return "success";
} else {
return "error";
}
}
}
JSP页面
接着我们创建三个JSP页面,hello.jsp、index.jsp和error.jsp,首先hello.jsp代码如下,如果输入框输入的名字匹配则跳转到index.jsp,否则就验证失败,跳转到error.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>Insert title here</title>
</head>
<body>
<h1>Hello Struts2</h1>
<form action="helloWorld">
<label for="name">Please enter your name</label><br>
<input type="text" name="name">
<input type="submit" value="To Index">
</form>
</body>
</html>
首先我们这里的form标签的action大家都知道的了,对应了处理类的别名,在struts2中就是对应了struts.xml中Action的名字,通过struts.xml帮我们的页面找到对应的处理逻辑类。而input的name属性的值则是对应了Action中的变量的名字。再创建index.jsp和error.jsp就可以运行我们这个demo了。
三、运行结果
运行成功:
验证失败:
那这样我们的一个struts2的小demo就做完了,当然有错误的话欢迎指正~