STRUTS2学习(一)——入门程序及基本流程

STRUTS2学习(一)——入门程序及基本流程

1、摘要

主要讲述了Struts2的相关入门知识及客户端向web容器发出请求后在服务器端处理用户请求的大概流程。本文的开发环境为MyEclipse-10.7.1+tomcat-7.0.68+jdk1.8.0-77+struts-2.2.1。本人菜鸟一枚,刚刚开始学习struts2,本文如有错误,希望大家能够指出,并谅解!

2、项目结构及代码

整个项目的结构如下图所示:

其中struts.xml文件内容为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<constant name="struts.devMode" value="true" ></constant>
	<package name="user" namespace="/User" extends="struts-default">
		<action name="Login">
			<result>/login.jsp</result>
		</action>
		<action name="Welcome" class="action.WelcomeUserAction">
			<result name="SUCCESS">/welcome_user.jsp</result>
		</action>
	</package>
</struts> 
web.xml文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.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>
action.WelcomeUserAction文件内容为:
package action;

public class WelcomeUserAction
{
	private String username;

	public String getUsername()
	{
		return username;
	}

	public void setUsername(String username)
	{
		this.username = username;
	}
	// all struts logic here
	public String execute()
	{
		return "SUCCESS";
	}
}
login.jsp内容为:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
	<h1>Struts 2 Hello World Example</h1>

	<s:form action="Welcome">
		<s:textfield name="用户名" label="Username" />
		<s:password name="密码" label="Password" />
		<s:submit />
	</s:form>
</body>
</html>
welcome_use.jsp内容为:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
	<h1>Struts 2 Hello World 示例</h1>

	<h2>
		Hello
		<s:property value="username" />
	</h2>
</body>
</html>
注:以上程序引用自http://www.yiibai.com/struts_2/struts-2-hello-world-example.html,由Wallen Heng翻译整理。

3、几点个人的思考

3.1、客户端浏览器发出HttpRequest(GET /struts2/User/Login.action)之后,都发生了什么?

这个请求最初当然是被tomcat捕捉到,他发现客户端发出的请求是指向struts2这个webapp的,于是他在webapp文件夹下(默认配置下)读取struts2文件夹下的web.xml的相关配置,在配置中读到了有一个名叫struts2的Filter(具体Filter的作用请参考:http://www.runoob.com/servlet/servlet-writing-filters.html),实现类是StrutsPrepareAndExecuteFilter。我们查看StrutsPrepareAndExecuteFilter的源码,可以看到其实现了Filter接口,尤其是实现了Filter下的doFilter方法:
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter
{
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain);
}
doFilter方法会根据struts.xml中的配置查找相应的命名空间(上面的例子中找到的是命名空间User),而名称空间之后的url中紧跟的是相应的action(上面的例子中为Login)。在查到相应的action之后,struts将相应的结果页面(上面的例子中为login.jsp)交还给tomcat,最终解析成为html文档之后发还给客户端,在客户端的浏览器上解释展现。

3.2、Struts2作为一个二道贩子存在的意义在哪里?

可以看到,Struts在整个服务器反馈给客户端html的过程当中充当的是一个二道贩子的角色:他不像tomcat一样参与动态页面的计算,反而在jsp页面和web容器中间扮演了一个二传手的角色,将用户的请求和服务器最终展现给用户的界面(更官方的说法是视图View)分离开来,提供更加良好的扩展性,为复杂工程的开发提供便利。这也是Struts框架的最基本的目的。
注:以上理解来自于尚学堂马士兵老师的教学视频:http://v.youku.com/v_show/id_XMjU5NTYzNjM2.html?from=s1.8-1-1.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值