Struts2学习笔记(一)

Struts2学习笔记(一)


1 回忆使用Filter作为控制器的MVC应用

实现MVC设计模式的三大部分构成:
(1)模型(Model):封装应用程序的数据和业务逻辑;(POJO)
(2)视图(View):实现应用程序信息显示;;(JSP)
(3)控制器(Controller):接收来自客户端的请求参数,调用模型层,响应页面需要的视图组件;(Servlet或Filter实现)
Filter方式实现简单登录业务(分析图如下):
在这里插入图片描述
Filter过滤器的使用步骤:
(1)编写一个类去实现Filter接口
(2)实现过滤方法doFilter()
(3)到web.xml去配置Filter的拦截路径
使用Filter作为控制器可以方便地通过应用程序(包括静态资源)进行控制访问,那么Servlet和Filter都可以作为Controller,而Filter的优势是:
(1)Servlet可以实现的Filter也可以实现;
(2)Filter可以进行资源拦截。其中,Filter中有一个FilterChain(使多个doFilter完成同一业务)。


2 struts2初识概述

Struts2是一个用来开发MVC应用程序的框架。提供了Web应用程序开发过程中的一些常见问题的解决方案:
1)对来自用户的表单数据进行合法验证;
2)统一的布局
3)支持ajax
4)文件的上传下载
等等
Struts2的优点:
1)在体系结构更优秀:类更少,更高效,无需像DispatcherFilter将请求参数进行类封装,只需要前端页面的name属性名和javabean的私有变量名相同即可;扩展更容易,Struts2通过拦截器完成了应用程序的大部分工作,在Struts2中插入一个拦截器对象的配置相当容易,一目了然,相比在代码中编写更容易。
2)测试更方便容易:不再依靠浏览器进行测试,基于Struts2的应用程序只需要在开发工具中就可以测试。
Struts2特点:
1)使用一个过滤器作为控制器;
2)HTML表单数据将直接映射到一个POJO;
3)Struts2中的验证逻辑编写在一个Action中,任何一个POJO都可以是一个Action类;
4)不再像EL和JSTL比较复杂的语法,而是使用OGNL来显示各种对象模型。
这里提供一个Struts2各种版本的下载:
http://archive.apache.org/dist/struts/binaries/
现在的执行路线:
在这里插入图片描述


3 Struts2搭建环境

这里提供一个工程创建过程(按照图片步骤就行):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

主要分四步:
以Struts2.3.4-all版本:
1)加入jar包
在这里插入图片描述
2)在web.xml文件中配置struts2(Filter配置)
在这里插入图片描述
3)在当前web应用的src下配置struts2的配置文件
在这里插入图片描述
4)添加DTD约束,方便struts.xml的代码自动提示
在这里插入图片描述
dtd约束操作的key路径可以在struts.xml中复制

<?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">

4 Struts2第一个应用程序

需求:
依然是在index.jsp页面的一个链接进入登录界面(input.jsp),然后输入数据后,通过另外一个details.jsp页面显示响应数据。
步骤:
(1)配置web.xml,主要是进行Filter过滤器的配置,下面将过滤掉*.action以外的action、href、src请求

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
	    <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>*.action</url-pattern>
    </filter-mapping>
</web-app>

(2)struts.xml配置:

<?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>
	<package name="helloWorld" extends="struts-default" namespace="/atguigu">
		<!--配置一个action:一个struts2的请求就是一个action-->
		<!--name:对应一个struts2的请求的名字,不包含扩展名(或对一个servletPath,但去除/和扩展名)默认在当前工程路径下-->
		<action name="product-input">
			<!--结果-->
			<result>/WEB-INF/pages/input.jsp</result>
		</action>
		<!--method 是类似于Servlet中通过Class类加载Product类反射调用方法save方法,需要在Product里面定义一个save方法-->
		<action name="product-save" class="com.atguigu.struts2.helloworld.Product" method="save" >
			<result name="details">/WEB-INF/pages/details.jsp</result>
		</action>
	</package>
</struts>

(3)向index.jsp添加a标签代码

<body>
	<a href="product-input.action">Product Input</a>
</body>`

input.jsp代码

<body>
	<form action="product-save.action" method="post">
		ProductName:<input type="text" name="name" />
		ProductDesc:<input type="text" name="desc" />
		ProductPrice:<input type="text" name="price" />
		<input type="submit" value="提交">
	</form>
</body>

details代码:

<body>
	<form action="product-save.action" method="post">
		ProductName:<input type="text" name="name" />
		ProductDesc:<input type="text" name="desc" />
		ProductPrice:<input type="text" name="price" />
		<input type="submit" value="提交">
	</form>
</body>

(4)在src下创建一个包,并在包下创建一个Product类,即可用于数据的封装,也可用于struts2进行方法调用
Product类代码

package com.atguigu.struts2.helloworld;

public class Product {
	private Integer id;
	private String name;
	private String desc;
	private Integer price;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Product [id=" + id + ", name=" + name + ", desc=" + desc + ", price=" + price + "]";
	}
	
	public String save(){
		System.out.println("save:"+this);
		//这个details和struts2配置里面的details对应
		return "details";
	}

}

(5)目录结构
在这里插入图片描述
(6)然后右击项目,Run as->A run on server

struts.xml具体细节分析

在这里插入图片描述
在这里插入图片描述

本篇参考尚硅谷学习资料并加深自己的理解做的学习笔记,如某些地方有错,请多多建议!虚心接受!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值