0%

struts2入门

编辑工具:Spring Tool Suite 3

提取码:f03i

java环境:jdk1.8

提取码:vo2x

运行环境:tomcat9.0(64)

提取码:fw8p

在项目中使用Struts2

Struts2配置步骤、执行过程

先放上项目结构图:

Login.java是放在src目录下的action包下,struts.xml是放在WebContent目录下的WEB-INF子目录下的classes文件夹中,jar包是放在WebContent目录下的WEB-INF子目录下的lib目录中



web.xml是放在WebContent目录下的WEB-INF子目录下



login.jsp和welcome.jsp是放在WebContent目录下


新建工程(Spring Tool Suite 3)

菜单栏“File”-“new”-“Dynamic-Web-Project”

拷贝jar包

将在下面连接中下载好的“struts2-jar包和配置文件”压缩文件夹解压,复制“struts2-basic-13jars”文件中所有jar包到Web工程的lib目录下

struts2-jar包和配置文件

提取码:0trk

配置web.xml

找到WEB-INF目录下的web.xml文件,在标签下添加过滤器filter

如果没有的话就在WEB-INF目录下新建一个web.xml文件,具体操作如下:右键点击“WEB-INF”-“New”-“File”,在“File name”后面填上文件夹的名称“web.xml”

或者在“struts2-jar包和配置文件”压缩文件夹中有一个已经配置好的web.xml文件,可以直接复制粘贴到项目中使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<!-- <welcome-file>项目主页,我的项目主页是login.jsp</welcome-file>-->
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<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>/*</url-pattern>
</filter-mapping>
</web-app>

配置Struts.xml

在WEB-INF目录下新建一个classes文件夹具体操作如下:右键点击“WEB-INF”-“New”-“Folder”,在“Folder name”后面填上文件夹的名称“classes”

在“classes”目录下创建一个Struts.xml文件,创建步骤如上同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--设置 struts2标签 的主题为 simple-->
<constant name="struts.ui.theme" value="simple"></constant>
<!--设置 post方法接收的数据 编码格式为 utf-8-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- package的namespace: 通常写功能模块名; -->
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="" method="">
<result name=""></result>
</action>
</package>
</struts>

或者在“struts2-jar包和配置文件”压缩文件夹中有一个已经配置好的Struts.xml文件,可以直接复制粘贴到项目中使用(在压缩文件的“Struts.xml模板”文件夹中)。

创建login类(login.java)

在“Java Resources”-“src”中创建一个包,我这里创建的是“action”包,在包中创建一个“Login.java”文件,具体步骤如下,右键“src”-“New”-“Package”,Name后面敲上包名“action”到这里包就建好了,接下来创建类,右键点击“action”-“New”-“class”,在Name后面敲上“Login”,创建好login类后就开始编辑login.java文件,如下

示例:login.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Login {

private String username;
private String password;

//生成get和set方法
public void setUsername(String username) {
this.username=username;
}
public void setPassword(String password) {
this.password=password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
//创建check方法,对应Struts.xml中action的method属性
public String check(){
System.out.println("接收到登录请求:username:"+username+",password");
if(!username.equals("")&&!password.equals("")) {
//用户名密码不为空
String message="登录成功"+username;
ActionContext.getContext().getValueStack().set("message", message);
return "ok";

}
if(username.equals("")&&!password.equals("")) {
//用户名为空
String message="登录失败,用户名为空";
ActionContext.getContext().getValueStack().set("message", message);
return "error";

}
if(!username.equals("")&&password.equals("")) {
//密码为空
String message="登录失败,密码为空";
ActionContext.getContext().getValueStack().set("message", message);
return "error";

}
else {
//用户名和密码为空
String message="登录失败,用户名和密码为空";
ActionContext.getContext().getValueStack().set("message", message);
return "error";
}
}

jsp页面

1.在WEB-INF目录下新建jsp页面,我这里新建的是login.jsp页面和welcome.jsp页面

示例:welcome.jsp页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎您</h1>
<hr/>
<s:property value="message"/>
</body>
</html>

效果图如下:


其中<s:property value="message"/>这句话放在不同位置效果不一样,可以根据自己的需要选择放的位置,这句话也可以放在<h1>``<form>等标签中,以下是不同位置的效果图

放在<h1>里面

1
2
3
···(省略部分代码)
<h1>欢迎您<s:property value="message"/></h1>
···

<h1>效果图


放在<form>里面

1
2
3
4
5
6
7
···(省略部分代码)
<body>
<form><s:property value="message"/></form>
<h1>欢迎您</h1>
<hr/><!--hr标签是一条黑色的分割线-->
</body>
···

<form>效果图



2.在页面中引用 struts标签库

1
2
3
4
<!--在页面中引用 struts标签库,引用后可使用这条语句
<s:property value="Action的属性名"/>
来获取Action的属性-->
<%@taglib uri="/struts-tags" prefix="s"%>

示例:login.jsp页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!--在页面中引用 struts标签库-->
<%@taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello world</h1>
<hr/>
<form action="login" method="post">
username:<input type="text" name="username"/><br><br>
password:<input type="password" name="password"/><br><br>
<input type="submit" value="登录"/>
</form>
<!--获取action的属性,在login.java中可以看到String message="登录成功"+username;
这里是定义一个message并对它赋值,定义的原因是要把Action的属性名设置成message。
ActionContext.getContext().getValueStack().set("message", message);
就是这句语句中把Action的属性名设置成message,
设置Action的属性名的原因当然是为了在<s:property value="Action的属性名"/>这一步获取,
至于获取的原因则是为了让message的值显示在页面中,怎么显示呢?
看这个语句的下一句,它是一个return语句return "error";当这个return语句所属的if条件为真时,返回error,
那么返回这个error有什么用呢?那就得看struts.xml文件了-->
<s:property value="message"/>
</body>
</html>

示例:struts.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!--设置 struts2标签 的主题为 simple-->
<constant name="struts.ui.theme" value="simple"></constant>

<!--设置 post方法接收的数据 编码格式为 utf-8-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

<!-- package的namespace: 通常写功能模块名; -->
<!-- package的子元素action:写具体的操作 由哪个Action类(即class="包名.类名")、 哪个方法处理(即类中定义的方法,也就是上面的Login.java类的check()方法)-->
<!--action的子元素result:写处理结果、跳转到哪个页面,这里的name对应的就是login.java中的return的值,当return的值与name值相等时,跳转到<result></result>中间的页面 -->
<!--action的子元素name的值与login.jsp中<form action="login" method="post">的action值相对应-->
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.Login" method="check">
<result name="ok">welcome.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>

</struts>

配置运行环境

“Window”-“Preferences”-“Server”-“Runtime Environment”

添加tomcat运行环境

“Add”-“Apache”-“Apache Tomcat v9.0”(这里选择下载的tomcat的版本号)-“Next”-“Browse”(选择tomcat的位置)-“Finish”-“Apply and Close”

配置Java Build Path

右键项目-“Build Path”-“Configure Build Path”-“Java Build Path”-“Libraries”-“Add Library”-“Server Runtime”-“Next”-“Apache Tomcat9.0”-“Finish”-“Apply and Close”

启动项目

“Run”-“Run As”-“Run On Server”-“Choose an existing server”-“localhost”-“Tomcatv9.0 Server at localhost”,选择刚刚添加的服务器-“Finish”

点这里请我吃个小蛋糕吧~~

Welcome to my other publishing channels