步骤
具体为以下几个步骤:
-
引入Struts2 框架所需运行库文件
-
创建并配置web.xml文件
-
创建一个Action类
-
创建并配置struts.xml文件
jar包
web.xml
在web.xml文件中进行核心调度器的配置。
<?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>Struts01</display-name>
<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>
此处过滤了所有的访问路径。当然,也可以设置为仅过滤action和jsp文件。
2.5版本后,支持多个url-pattern
<url-pattern>*.action</url-pattern>
<url-pattern>*.jsp</url-pattern>
ACTION类
需求分析:(此处使用的是简单的ACTION类,其他常用方式,下文再说明)
1.Struts2直接使用Action来封装HTTP请求参数,因此Action类应该包含与请求相对应的属性,并为该属性提供对应的setter和getter方法。
2.为Action类里增加一个execute方法,因为Struts2框架默认会执行这个方法。这个方法本身并不做业务逻辑处理,而是调用其他业务逻辑组件完成这部分工作。
3.Action类返回一个标准的字符串,该字符串是一个逻辑视图名,该视图名对应实际的物理视图。
public class UserAction {
private String username;
public String execute() {
if (username != null && !username.isEmpty()) {
return "success";
}
return "error";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
struts.xml
Struts2的核心配置文件,放在src目录下。
<?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>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="userAction" class="com.zhidisoft.action.UserAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
注意:
在action标签中定义了name和class。name属性对应的是用户URL请求中的action名,比如在本应用中,用户请求为http://localhost:8080/Struts2/userAction.action,那么name属性就应该为userAction。class属性是处理请求的实现类(注意:要包含完整路径),本应用的实现类是com.zhidisoft.action.UserAction。
result标签定义逻辑视图和物理视图之间的映射,在我们的Action中,如果返回的字符串是"success”则由对应的success.jsp页面进行处理;如果返回的字符串是"error”则由error.jsp页面进行处理。
编写前端界面:
首页 index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>首页</title>
</head>
<body>
<form action="userAction.action" method="post">
<input type="text" placeholder="请输入用户名 " name="username">
<button type="submit">登录</button>
</form>
</body>
</html>
登录成功页面 success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML >
<html>
<head>
<title>登录成功</title>
</head>
<body> ${username},欢迎回来。
</body>
</html>
登录失败页面 error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>登录失败</title>
</head>
<body>用户名没有输入。
</body>
</html>