struts 2读书笔记-----struts2的开发流程

一、将struts 2的lib文件夹下地commons-fileupload.jar、commons-io.jar、freemarker.jar、javassist.jar、ognl.jar、struts2-core.jar和xwork-core.jar必需类复制到web应用的WEB-INF/lib路径下。如果需要在web应用中使用struts 2的更多特性,则需要将相应的JAR文件复制到web应用的WEB-INF/lib路径下。

二、编辑Web应用的web.xml配置文件,配置Struts 2 的核心Filter。在web.xml中定义核心Filter是来拦截用户请求。

由于Web应用是基于请求/响应构建的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心filter或者servlet,这样才可以让该框架介入Web应用中。

下面是struts 2 在web.xml文件中的配置片段:

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="GBK"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  6. <!-- 定义Struts 2的核心Filter -->
  7. <filter>
  8. <filter-name>struts2</filter-name>
  9. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  10. </filter>
  11. <!-- 让Struts 2的核心Filter拦截所有请求 -->
  12. <filter-mapping>
  13. <filter-name>struts2</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. </web-app>
<?xml version="1.0" encoding="GBK"?>
<web-app 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" version="3.0">
	<!-- 定义Struts 2的核心Filter -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<!-- 让Struts 2的核心Filter拦截所有请求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

三、如果需要以POST方式提交请求,则需定义包含表单数据的jsp页面。若果仅仅只是以GET方式放送请求,则不需要。

四、定义处理用户请求的Action类

这是所有MVC框架中必不可少的。因为Action就是MVC框架中的控制器。该控制器负责调用model里的方法来处理请求。

MVC框架的底层机制是:核心servlet或者Filter接收到用户的请求后,通常会对用户请求进行简单的预处理,例如解析、封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法来处理用户的请求。

但是当Servlet或Filter拦截请求后,它如何知道创建那个Action的实例?这里一般有两种方法可以解决

1:利用配置文件。如:我们可以配置login.action对应使用LoginAction类。这样就可以让MVC框架知道创建那个Action的实例了。

2:利用约定。如:我们可以约定xxx.action总是对应XxxAction类。如果核心控制器收到请求后,将会调用相应的Action类来处理用户请求。

五、配置Action

配置Action就是指定哪个请求对应哪个、Action进行处理,从而让核心控制器根据配置来创建合适的Action实例,并调用该Action 的业务控制方法。

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  5. <!-- 指定struts 2的配置文件的跟元素  -->
  6. <struts>
  7. <!-- 所有的Action定义都应该放在package下 -->
  8. <package name="mystruts" extends="struts-default">
  9. <action name="login" class="com.action.LoginAction" method="execute">
  10. </action>
  11. </package>
  12. </struts>
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
	<!-- 指定struts 2的配置文件的跟元素  -->
<struts>
	<!-- 所有的Action定义都应该放在package下 -->
	<package name="mystruts" extends="struts-default">
		<action name="login" class="com.action.LoginAction" method="execute">
		</action>
	</package>
</struts>

六、配置处理结果和物理视图资源之间的对应关系

当Action处理用户请求结束后,通常会返回一个处理结果。我们可以认为该名称是逻辑视图名,这个罗建视图名需要和指定物理视图资源关联才有价值。所以我们还需要配置处理结果之间的对应关系。

[html] view plaincopyprint?

  1. <action name="login" class="com.action.LoginAction" method="execute">
  2. <!-- 定义三个逻辑视图和物理资源之间的映射 -->
  3. <result name="input">/login.jsp</result>
  4. <result name="error">/error.jsp</result>
  5. <result name="success">/success.jsp</result>
  6. </action>
<action name="login" class="com.action.LoginAction" method="execute">
	<!-- 定义三个逻辑视图和物理资源之间的映射 -->
	<result name="input">/login.jsp</result>
	<result name="error">/error.jsp</result>
	<result name="success">/success.jsp</result>
</action>

七、编写视图资源

经过这个几个步骤,我们基本可以完成一个struts 2 的配置

下面一个完整的struts 2 的实例

1、配置核心Filter

代码和上面的一样

2、编写jsp页面:命名为login.jsp;实现基本的登陆功能

[html] view plaincopyprint?

  1. <%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>
  2. <html>
  3. <head>
  4. <title>用户登陆</title>
  5. </head>
  6. <body>
  7. <form action="login">
  8. 用户名:<input type="text" name="username" />
  9. 密  码:<input type="password" name="password" />
  10. <input type="submit" value="登陆">
  11. </form>
  12. </body>
  13. </html>
<%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>
<html>
  <head>
    <title>用户登陆</title>
  </head>

  <body>
	<form action="login">
	      用户名:<input type="text" name="username" />
	      密  码:<input type="password" name="password" />
	      <input type="submit" value="登陆">
	</form>
  </body>
</html>

3、配置Action  。命名为struts.xml  并放在src的目录下

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  5. <!-- 指定struts 2的配置文件的跟元素  -->
  6. <struts>
  7. <!-- 所有的Action定义都应该放在package下 -->
  8. <package name="mystruts" extends="struts-default">
  9. <action name="login" class="com.action.LoginAction" method="execute">
  10. <!-- 定义三个逻辑视图和物理资源之间的映射 -->
  11. <result name="input">/login.jsp</result>
  12. <result name="error">/error.jsp</result>
  13. <result name="success">/success.jsp</result>
  14. </action>
  15. </package>
  16. </struts>
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
	<!-- 指定struts 2的配置文件的跟元素  -->
<struts>
	<!-- 所有的Action定义都应该放在package下 -->
	<package name="mystruts" extends="struts-default">
		<action name="login" class="com.action.LoginAction" method="execute">
			<!-- 定义三个逻辑视图和物理资源之间的映射 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

4、编写处理用户请求的Action类

[java] view plaincopyprint?

  1. package com.action;
  2. public class LoginAction{
  3. private String username;
  4. private String password;
  5. public String getUsername() {
  6. return username;
  7. }
  8. public void setUsername(String username) {
  9. this.username = username;
  10. }
  11. public String getPassword() {
  12. return password;
  13. }
  14. public void setPassword(String password) {
  15. this.password = password;
  16. }
  17. //定义处理用户请求的login方法
  18. public String execute(){
  19. //通过ActionContext()设置session范围的属性
  20. ActionContext.getContext.getSession().put("user", getUsername());
  21. if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){
  22. //通过ActionContext()设置reque范围的属性
  23. return "success";
  24. }
  25. else {
  26. return "error";
  27. }
  28. }
  29. }
package com.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;
	}

	//定义处理用户请求的login方法
	public String execute(){
		//通过ActionContext()设置session范围的属性
		ActionContext.getContext.getSession().put("user", getUsername());

		if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){
			//通过ActionContext()设置reque范围的属性
			return "success";
		}
		else {
			return "error";
		}
	}
}

配置这些资源后,我们就可以通过浏览器来访问了:http://localhost:8080/struts2_01/login.jsp可以看到如下界面

           读李刚《轻量级java EE企业应用实战(第三版)—struts
2+Spring 3+Hibernate整合开发》

时间: 2024-10-13 22:32:18

struts 2读书笔记-----struts2的开发流程的相关文章

[读书笔记] Web 前端开发修炼之道

原创地址:http://www.cnblogs.com/bnbqian/p/3735565.html 转载请注明出处 今天我们要读的书是Web 前端开发修炼之道 第1章 从网站重构说起 1.1 糟糕的实现,头疼的维护 曾经, 网页代码很乱. 1.2 Web 标准,结构,样式和行为的分离 分离了. 1.3 前端的现状 人员参差不齐. 小结: 本章相当于引论. 第2章 团队合作 小结: 团队和沟通这个永远是个凑字数的好话题. 第3章 高质量的HTML 3.1 标签的语义 标签是有语义的,除了div

TIJ读书笔记02-控制执行流程

body, td { font-family: 微软雅黑; font-size: 10pt; } TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决定程序的执行路径. 由于java中布尔类型的特殊实现,如果想在布尔测试中测试一个非布尔值,必须将其转换成布尔表达式. 也就是说像C和C++中的while(1)这种方式是不可以的. if-else if-el

【读书笔记《C# 开发实战1200例》】1.2 Visual Studio 开发环境使用

005.为程序设置版本和帮助信息 效果图: 1.新建Windows窗体应用程序WindowsFormsApplication1 2.找到AssemblyInfo.cs文件,编辑下就可以了 using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; //定义程序集清单的程序集标题自定义属性 [assembly: AssemblyTitle("为程序设置版本

【读书笔记《C# 开发实战1200例》】1.3 快速开发项目必备

009.为项目添加DLL文件引用 1.选中项目单击右键,选择“添加引用” PS:DLL文件是一种最常用的第三方组件表示形式,在 C# 中引用 DLL 文件后,可以直接使用其中编写好的方法来实现相应的功能,从而提高程序的开发效率. 010.为项目添加已有类 1.同理,右键“添加” - “现有项” PS:已知类就是已经编好的类,类就是面向对象编程的核心,它可以封装数据成员.函数成员和其他类等信息, C# 中使用关键字 class 来声明类. 011.为项目添加第三方控件 1.新建Windows窗体应

【读书笔记《C# 开发实战1200例》】1.1 Visual Studio 开发环境的安装和配置

001.Visual Studio 开发环境安装与配置 1. “工具” - “导入和导出设置” 2.选中“重置所有设置” 3.选中“否,仅重置设置,从而覆盖我的当前设置” 4.在此界面根据实际情况选中适合自己的开发环境设置 002.设置程序代码的行号 1.菜单项“工具”/“选项”命令 2.选择“文本编辑器”节点下的“所有语言选项”,在右侧选中“行号” 003.使开发环境全屏显示 1.菜单栏“视图”/“全屏显示”命令,或者直接按 Shift + Alt + Enter 键即可. 004.根据需要创

《构建之法—现代软件工程》读书笔记之——敏捷开发

敏捷开发是一系列价值观和方法论的集合.在敏捷的大旗下,我们可以看到好几种软件开发的方法论,我们在这里主要分析Scrum这个方法论. 从Scrum方法论中分析,敏捷开发一共分四步: 第一步:找出完成产品需要做的事情--Product Backlog Backlog翻译成"积极的工作","待解决的问题","产品订单".产品负责人主导大家对于这个Backlog进行增删改的工作.每一项工作的时间估计为天. 第二步:决定当前的冲刺需要解决的事情--Spri

读书笔记-敏捷软件开发 原则,模式与实践

看了一下夹在书中的发票,2010年在当当网购买的. 断断续续的也看过几次,一直没有看完过. 这次试着写写读书笔记.看看能不能坚持住.

Struts2技术内幕 读书笔记二 web开发的基本模式

最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的:例如我们写自己的servlet的时候就得继承javax.servlet.http.HttpServlet接口. 在标准之上的是对不同标准的具体实现.例如同是servlet标准,tomcat有一套实现方式,Websphere又有不同的实现方式. 在程序员级别来说,面对复杂的业务流程,不同的程序员会有

Struts 2读书笔记-----使用Struts 2的输入校验

输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服务器端校验. 服务器校验: 服务器校验是整个应用阻止非法数据的最后的防线,主要是通过在应用中编程实现. Struts 2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts 2的验证框架将会负责进行服务器校验. 如下表单: 假定在该应用中要求这三个请求参数必须满足如下要求: