Java Web : Struts2第一个简单例子 浅解

[环境:myeclipse8+jboss5]

先看一下最终的目录结构:

(如图,有7个导入的.jar包,它们在默认的myeclipse安装目录下,

我的是:D:\MyEclipse-8.6\configuration\org.eclipse.osgi\bundles\109\1\.cp\data\2.1\core)

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">
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

解析:在web.xml中以前主要就是servlet标签,现在是filter完成过滤请求的功能。/*是通配符,表示任何请求都要经过此filter先处理。(注:在此例中它未被赋予作用)


login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
    <form action="login.action" method="post">
      username:<input type="text" name="username" /><br/>
      password:<input type="password" name="password" /><br/>
      <input type="submit" value="提交" />
    </form>
  </body>
</html>

解析:action="login.action" ,默认的是以.action结尾,提交的请求信息"username"、"password"交由下面的LoginAction类处理。


LoginAction.java:

package com.test.action;

public class LoginAction {
    private String username;
    private String password;
    
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
    
	public String execute()throws Exception{
		return "success";
	}
}

解析:使用Action类控制导航业务数据,根据上面客户端login.jsp提交的信息,编写出两私有实例属性"username"、"password"及相应的getter/setter方法。

            当客户端提交过来信息时,自动调用Action类的set方法,set到实例属性里面去。login.jsp中定义了username那么就

            在LoginAction类中去寻找setUsername()方法,而非去比对属性名字。

            此类由Struts框架自动调用,来完成客户端发送过来信息的处理,完成赋值set取值get;之后再自动调用execute()方法。


result.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
    
  username:${requestScope.username }<br/>
  password:${requestScope.password }

  </body>
</html>

解析:这是提交请求之后显示的页面。${requestScope.username} 即获取request范围内的username用户名值。


struts.xml:(对于汉字传值不显示问题,注意要加上<constant name="struts.i18n.encoding" value="gb2312"/>在<struts></struts>内)

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="struts2" extends="struts-default">
		<action name="login" class="com.test.action.LoginAction">
			<result name="success">/result.jsp</result>
		</action>
	</package>
</struts>
解析:package标签 name="包名(此指web项目名)" 它继承自包struts-default
      action标签 name="前面客户端login.jsp中form标签中的请求目标名(以.action后缀)" class="处理请求的Action类全路径类名"
      result标签/处理完后转到的页面;可不给出name属性,因为execute()方法返回值只有"success"这一个,系统自动匹配,不会歧义。

运行流程:
当提交请求(login.jsp)时,它会提交到“login.action”,.action会由struts2进行自动处理, 它找到.action前面的名字login,匹配到struts.xml中action标签的name属性,接着由action标签中 class属性对应的Action类生成实例对象来处理login.action,这时LoginAction类发现客户端发送 过来的请求,自动set方法赋值,接着自动执行execute()方法,返回字符串"success",这就是result 标签中name属性的值,也就是说这个name属性匹配execute()方法的返回值后才会跳转到result.jsp页面。

它们怎么运行的:
1、       struts2容器收到login.action请求,从web.xml获取设置,org.apache.struts2.dispatcher.FilterDispatcher是所有应用(包括*.action)的入口点。
2、       struts2在struts.xml中找到Action类(LoginAction),并调用它的execute方法。
3、       execute方法返回SUCCESS,struts2收到SUCCESS标志,按照映射关系,把HelloWorld.jsp返回客户端。
4、       当HelloWorld.jsp开始运行,若调用<s:property value="username" />则会调用LoginAction类getUsername方法,把结果显示在页面上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值