`
one_way_street
  • 浏览: 1433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

初识 Struts2 第一节

阅读更多

前言 :

         (1). 为什么学习 Struts2

                   简化开发 , 提高开发效率 .

         (2) 如何学习 Struts2

                   首先学习如何去使用 , 有余力深入了解原理和实现

1. MVC 设计思想在 JavaWeb 程序中的应用

         (1) 什么是 MVC, 为什么用 MVC

MVC 就是按照职责不同将程序划分为 3 个组成部分 . 可以改善程序结构 , 便于日后维护和扩展 .

                   模型 (Model): 负责业务处理和业务数据 .( 例如 DAO,DBUtil)

                   视图 (View): 负责数据的显示和与用户交互 ( 接受用户输入 ).( 例如 JSP)

                   控制器 (Controller): 负责协调视图和模型工作 .

         (2)MVC 设计思想的基本流程

         a. 所有请求都请求同一个控制器组件 .

b. 控制器负责维护一个 XML 配置文件 ( 配置文件主要定义请求和 Action 组件的对应关系 ).

c. 当请求进入到控制器 , 控制器根据 XML 配置 , 调用相应的 Action 组件进行业务处理 .

         d.Action 组件可以调用 DAO 等模型进行数据库操作 .

         f. Action 执行完毕 , 控制器负责调用相应视图进行响应 .

         (3)Struts 框架就是上述 MVC 思想的实现 .

2.Struts2 的入门实例

         Struts 发展史

                   Struts1 1.1,1.2,1.3,Struts1.2 版本属于使用最广泛 , 最成熟的一个 .

WebWork 框架也是 MVC 实现 , 实现技术和思想非常先进 . 后来将 Xwork 内核提取 , 结合 Struts1 特性 , 包装成了 Struts2 推出 .

            Struts2 版本 2.0,2.1.8,2.2

         (1). HelloWorld

                   1) 开发步骤

                   请求 --> Struts2 --> welcome.jsp

a. 创建 Web 工程 , 引入 Struts2 的必要开发包 .

struts2-core-2.1.8.jar  Struts2 核心

xwork-core-2.1.6.jar  WebWork 核心

commons-fileupload-1.2.1.jar  文件上传与下载

ognl-2.7.3.jar 表达式语言 , el 强大的表达式

freemarker-2.3.15.jar 视图模版技术 . 功能等价于 jsp, 技术比 jsp 先进 , 但现在企业应用一般都采用 jsp 充当视图 .

 

b. 配置 Struts2 的控制器 (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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>Struts2Controller</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Struts2Controller</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


c. 添加一个视图 , welcome.jsp

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	welcome
</body>
</html>






d. 添加一个 Action 组件 (WelcomeAction)

package struts;

public class WelcomeAction {

	public String execute(){
		return "success";
	}
}






e. 添加 WelcomeAction 组件配置 (src/struts.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="demo" extends="struts-default">
		<action name="welcome" method="execute" class="struts.WelcomeAction" >
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>






struts.xml 的声明可以参照 struts2-core-2.1.8.jar 中的 struts-default.xml 文件定义

f. 测试 :http://localhost:8080/struts2/welcome.action

 

2) 示例运行流程

         a. 客户端发出一个请求 , welcome.action

b. 请求进入 Struts2 控制器 (StrutsPrepareAndExecuteFilter), 控制器根据 struts.xml 配置文件调用 WelcomeAction 进行处理 .

c. 调用 WelcomeAction execute 方法处理 , 处理完毕后返回一个 result 标识符 (String 类型 )

d. 控制器根据返回的 result 标识符调用 struts.xml 中定义的 <result> 元素 , 进行视图响应

         4)struts.xml 基本配置 .

         a.  <struts> 根元素

b. <package> 元素 , 可以有多个 , 用于将 Action 分类管理 , 例如每个模块一个 package.

                   name : 包名称 .

         extends : 继承父包 , 一般使用 struts-default. 此包在 struts-default.xml 配置中定义 , 包含了框架运行的一些必要组件 .

                   namespace : 命名空间 . 用于对 Action 请求名进行限定 . 用于避免请求名重名冲突 .

         c. <action> 元素 , 用于指定 action 组件和请求之间的对应关系 .

                   name: 请求名 , 一般默认扩展名为 .action 或不写扩展名 .

                   class: 指定 action 组件 , 写明包路径 .

                   method: 指定调用 action 组件的那个方法 , 默认方法名为 execute.

         d. <result> 元素 , 用于指定相应视图 .

                   name: 视图标识符 , action 业务方法返回值一致 .

                   type: 指定视图类型 .

         (2). 列表显示

                   1) 开发过程

                   a. 引入 struts 开发框架 , 配置 struts 控制器 .

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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>ShowList</filter-name>
	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>ShowList</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>






                   b. 添加一个视图 list.jsp.

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<table border="1">
		
		<tr>
			<th>编号</th>
			<th>任务名称</th>
			<th>开始事件</th>
			<th>结束事件</th>
		</tr>
			<tr>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
			</tr>
	
	</table>
</body>
</html>






                    c. 依次添加 entity, TaskDAO, TaskListAction.

package entity;

import java.util.Date;

public class Task {
	private long id;
	private String tas_id;
	private String tas_name;
	private Date tas_begin;
	private Date tas_end;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getTas_id() {
		return tas_id;
	}
	public void setTas_id(String tasId) {
		tas_id = tasId;
	}
	public String getTas_name() {
		return tas_name;
	}
	public void setTas_name(String tasName) {
		tas_name = tasName;
	}
	public Date getTas_begin() {
		return tas_begin;
	}
	public void setTas_begin(Date tasBegin) {
		tas_begin = tasBegin;
	}
	public Date getTas_end() {
		return tas_end;
	}
	public void setTas_end(Date tasEnd) {
		tas_end = tasEnd;
	}
}







 

package dao;

import java.util.List;

import entity.Task;

public interface TaskDAO{
	public List<Task> findAll() throws Exception;package action;







 

package dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.sql.*;
import util.DBUtil;
import dao.TaskDAO;
import entity.Task;

public class TaskDAOimpl implements TaskDAO{

	public List<Task> findAll() throws Exception {
		List<Task> taskList = new ArrayList<Task>();
		Connection conn = DBUtil.getConnection();
		String sql = "select * from t_task";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		while(rs.next()){
			Task task = new Task();
			task.setId(rs.getLong("id"));
			task.setTas_id(rs.getString("tas_id"));
			task.setTas_name(rs.getString("tas_name"));
			task.setTas_begin(rs.getDate("tas_begin"));
			task.setTas_end(rs.getDate("tas_end"));
			taskList.add(task);
		}
		DBUtil.close(conn);
		return taskList;
	}

}







 

import java.util.List;

import dao.impl.TaskDAOimpl;

import entity.Task;

public class TaskAction {
	private List<Task> taskList;
	public String execute(){
		TaskDAOimpl dao = new TaskDAOimpl();
		try {
			taskList = dao.findAll();
			return "success";
		} catch (Exception e) {
			e.printStackTrace();
			return "error";
		}
	}
	public List<Task> getTaskList() {
		return taskList;
	}
	public void setTaskList(List<Task> taskList) {
		this.taskList = taskList;
	}
}
 
}






                     d. struts.xml 中配置 TaskAction.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="task" extends="struts-default">
		<action name="list" class="action.TaskAction">
			<result name="success">/WEB-INF/jsp/list.jsp</result>
			<result name="error">/WEB-INF/jsp/error.jsp</result>
		</action>
	</package>
</struts>









                     e. 修改 list.jsp, 使用标签或 EL 将数据列表显示 .

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<table border="1">
		
		<tr>
			<th>编号</th>
			<th>任务名称</th>
			<th>开始事件</th>
			<th>结束事件</th>
		</tr>
		<c:forEach items="${taskList}" var="list">
			<tr>
				<td>${list.tas_id}</td>
				<td>${list.tas_name }</td>
				<td>${list.tas_begin }</td>
				<td>${list.tas_end }</td>
			</tr>
		</c:forEach>
	
	</table>
</body>
</html>






处理错误页面

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	系统错误, 稍后<a href="list">重试</a>
</body>
</html>






 

 数据库脚本

create table t_task(
	id bigint primary key auto_increment,
	tas_id varchar(20),
	tas_name varchar(50),
	tas_begin date,
	tas_end date
);

insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-1', '2011-1-3');
insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-3', '2011-1-5');
insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-5', '2011-1-7');
insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-7', '2011-1-9');
insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-9', '2011-1-12');
insert into t_task(tas_id, tas_name, tas_begin, tas_end) values ('任务1', '项目', '2011-1-12', '2011-1-16');







 

 



分享到:
评论

相关推荐

    Struts2 in action中文版

    第2章 初识Struts 2 16 2.1 声明性架构 16 2.1.1 两种配置 16 2.1.2 声明架构的两种方式 17 2.1.3 智能默认值 20 2.2 简单的HelloWorld示例 20 2.2.1 部署示例应用程序 20 2.2.2 探索HelloWorld应用程序 24 2.3 使用...

    struts2帮助文档

    入门教程中的“第1章:初识Struts2”会介绍Struts2的基本概念,包括框架的历史、特点以及它如何简化Web应用开发。这章将引导新手进入Struts2的世界,了解其核心理念。 “第2章:环境配置”会讲解如何设置开发环境,...

    深入浅出Struts2(附源码)

    第1章 Model 2应用程序 1 1.1 Model 2概览 1 1.2 带servlet控制器的Model 2 2 1.2.1 Product动作类 3 1.2.2 ControllerServlet类 4 1.2.3 视图 6 1.2.4 部署描述文件 8 1.2.5 示例程序的运行 9 1.3 带过滤器...

    Struts2学习笔记

    2. **环境搭建**:(一)环境搭建.txt可能包含了安装和配置Struts2框架的基础步骤,这通常包括添加Struts2库到项目依赖、配置web.xml文件、创建第一个Struts2应用等。 3. **UploadServlet.java**:在Struts2中,...

    Struts教程大全

    "Struts 2.0入门.pdf"和"Struts快速学习指南.pdf"是针对初学者的教程,它们可能从最基础的概念开始,逐步引导读者掌握Struts 2的使用,包括环境配置、创建第一个应用、控制器的实现、视图的展示以及模型的交互等。...

    学习JSP的Struts的第一步:登录界面

    **Struts与JSP结合学习:初识登录界面** 在Web开发中,Struts框架是一个广泛应用的MVC(Model-View-Controller)架构,它帮助开发者有效地组织和管理应用程序的结构。而JSP(JavaServer Pages)则是一种用于创建...

    简单介绍Struts2中的拦截器的小示例

    当请求到达Action时,会先执行拦截器链上的第一个拦截器,然后是第二个,依此类推,直到最后一个拦截器。如果某个拦截器返回了非`null`的结果,那么Action将不会被执行,而是直接返回该结果。 4. **应用场景**:...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    第2章 初识Struts 14 2.1 Struts的优点 14 2.2 Struts的动作处理流程 15 2.3 拦截器 17 2.4 Struts配置文件 18 2.4.1 struts.xml文件 19 2.4.2 struts.properties文件 26 2.5 Struts应用程序示例 26 2.5.1 部署描述...

    STRUTS基础

    在“第08章 初识Java EE经典MVC框架Struts”的源代码中,你可以看到以下几个关键部分的实现: 1. **Action类**:每个Action类处理一个特定的用户请求,实现业务逻辑并返回结果到视图。 2. **ActionForm**:定义了...

    低清版 大型门户网站是这样炼成的.pdf

    2.1 初识mvc新秀struts 2 33 2.1.1 mvc概述 33 .2.1.2 struts 2的mvc实现 35 2.1.3 struts 2的基本组成 36 2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    ASP.NET编程宝典光盘源码

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    《ASP.NET编程宝典(十年典藏版)》光盘源码2

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    first_steps_with_struts.zip_Java书籍_Java_

    这个名为"first_steps_with_struts.zip"的压缩包,显然是一份关于Struts 2的教程或者书籍资源,旨在帮助开发者迈出使用Struts 2的第一步。下面我们将深入探讨Struts 2的基础知识,以及它如何与Java Web开发相结合。 ...

    第1章 初识Spring的基本应用.ppt

    【Spring的基本应用】是Java EE企业级应用开发中不可或缺的一部分,尤其在Spring+Spring MVC+MyBatis的组合中,Spring作为基础框架扮演着至关重要的角色。本章内容主要涵盖Spring的核心容器、依赖注入以及Spring的...

Global site tag (gtag.js) - Google Analytics