Struts2的开发流程
为了能够在eclipse中使用Struts2在进行开发时,需要根据需要导入一些有关的jar包;
在官网下载相关的压缩包,这里下载了两个:struts-2.3.30-all.zip和struts-2.3.30-docs.zip,解压到同一个文件夹中。
在eclipse中新建了新的Dymamic Web Project以后,为该项目添加Struts2支持:
1.复制Struts2解压目录下struts2-blank.war解压后WEB-INF\lib目录下的所有jar包到web项目中的WebContent\WEB-INF\lib下;
2.把这些复制的jar包导入项目中去。
开始使用Struts2开发:
1.在web.xml中定义拦截器拦截用户请求:
如果eclipse中生成的Dynamic Web Project中没有自动生成web.xml文件,可以从Tomcat相关的文件夹中找到一个默认的web.xml文件,把此文件复制到项目的WEB-INF目录下(不是WEB-INF\lib下)。
也可以在struts2-blank.war解压后目录的WEB-INF下直接复制一个web.xml。
修改此web.xml文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 定义核心拦截器 -->
<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>
2.定义包含表单数据的JSP页面:
写一个提交请求的JSP页面,此JSP页面将会将请求提交给相关的Action类来处理。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!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> <s:form action="test_1"> <s:textfield name="username" key="username"/> <s:submit key="login" value="login"/> </s:form> </body> </html>
3.定义处理用户请求的Action类:
写一个与以上JSP关联的Action类来处理该JSP提交的请求。在eclipse中直接放在在src目录下即可
package testAction; import com.opensymphony.xwork2.ActionSupport; public class Test_1Action extends ActionSupport{ //定义封装请求参数的成员变量 private String username; //setter、getter方法 public void setUsername(String username){ this.username = username; } public String getUsername(){ return this.username; } //定义处理请求的execute方法 public String execute()throws Exception{ if(getUsername()!=null){ return SUCCESS; }else{ return ERROR; } } }
4.编写物理视图资源文件:
为了简单,我们把物理视图资源文件直接放在项目的webContent目录下
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>error page</title> </head> <body> 错误页面!username为空! </body> </html>
welcome.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!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>welcome page</title> </head> <body> 登陆成功! </body> </html>
5.配置处理用户请求的Action类并配置Action的处理结果和物理视图资源的映射关系::
使得JSP页面的请求能够准确找到与此JSP页面相关的Action类。
配置Action需要在项目的src目录下添加struts.xml文件,此文件的默认文件也可以在struts2-blank.war解压后目录的WEB-INF\classes下找到,把其修改为如下内容:
<?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="test" extends="struts-default"> <!-- 定义了名为test_1的Action; 处理请求的Action类为testAction.Test_1Action.java --> <action name="test_1" class="testAction.Test_1Action"> <!-- 定义逻辑视图与物理视图之间的映射关系 --> <result name="error">error.jsp</result> <result name="success">welcome.jsp</result> </action> </package> </struts>