02.Struts2-01框架

02.Struts2-01框架

1、创建Action类:

处理请求的类,当Struts捕获到请求的时候会交给该类中的某个指定方法去处理
1、创建普通Java类
2、配置该Java类,作为Struts2中的一个Action

Struts2的核心配置文件
	<struts>:配置文件的根节点,有且只有一个,所有的配置项必须全部写在根节点中
	<package>:包,Struts2的基础配置之一,一般用于存放一组或者一个(Action:一个Java类,用于处理一个请求)
	name:该报的唯一标识,在struts程序中的
	extends:该包集成了哪个包的配置
	<action>:行为标签
	name:该action的唯一标识,对应处理的请求的url

2、Action类

​ 1、必须要有一个无参数的构造方法
​ 2、可以提供SET方法接收表单提交的参数,set方法要对应表单元素的name属性进行生成
​ 3、同一个Action中可以有多个请求处理方法
​ 4、Struts2的Action是线程安全的,不用去考虑并发问题

如何访问ServletAPI

​ HttpServlerRequest -> request
​ HttpSession -> session
​ ServletContext -> application
​ *HttpParameters

解耦:

一般不会直接访问这个对象
    HttpServlerRequest 	     -> request			->requestAttributeMap
    HttpSession		         ->	session		  	->sessiionAttributeMap
    ServletContext		     ->	application		->applicationAttributeMap
直接访问对象存值的方案

​ XXX.setAttribute(key,value);

通过作用于对应的Map存值的方案

​ XXXMap.put(key,value);
​ ActionContext ac = ActionContext.getContext();

获取AttributeMap的第一种方案

​ 注意:这些只能进行存值取值操作,不能替代对象本身

​ Map<String,Object> sessionAttributeMap = ac.getSession();
​ sessionAttributeMap.put(“key”, value);

Map<String,Object> applicationAttributeMap = ac.getApplication();
applicationAttributeMap.put("key", value);

Map<String,Object> requestAttributeMap = (Map<String,Object>)ac.get("request");
requestAttributeMap.put("key", value);
//获取AttributeMap的第二种方案
    //实现接口
    ApplicationAware
    SessionAware
    RequestAware
    //重写
    setApplication
    setSession
    setRequest

    @Override
    public void setXXX(Map<String, Object> XXX) {
    this.XXXAttributeMap = XXX;
}
//该方法中的参数,就是我们需要的对应的Map

耦合:

耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

案例:

导入相应的包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8mpQtTL-1609744071193)(images/img02.png)]

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 
		在页面的URL
			/url:绝对路径	->协议名称(http)+主机名(127.0.0.1)+端口号(8080)+URL
			url:相对路径	->协议名称(http)+主机名(127.0.0.1)+端口号(8080)+项目名						(struts2Test03)+当前的URL+URL
			所有路径都是绝对路径
	 -->
	<form action="user/userWelcome">
		Username:<input type="text" name="username"><br>
		Psername:<input type="text" name="password"><br>
		age:<input type="text" name="age"><br>
		<input type="submit" value="Login">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎下次光临!</h1>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="user/tm1" method="post">
		<input type="text" name="testValue"><input type="submit" value="提交啊">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${sessionScope.msg }|${requestScope.msg1 }|${applicationScope.msg2 }
</body>
</html>

web.xml(filter配置)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>struts2Test03</display-name>
  
  <filter>
  	<filter-name>dispatcherFilter</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>dispatcherFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

struts.xml(配置)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<!-- 
		namespace:给该包名添加一个映射
		默认值为:/
	 -->
	<package name="java53" extends="struts-default" namespace="/user">
		<action name="tm2" class="com.zb.action.TestAction" method="testMethod01">
			<result>
				/page04.jsp
			</result>
		</action>
		<action name="tm1" class="com.zb.action.DepartAction" method="testMethod01">
			<result>
				/page04.jsp
			</result>
		</action>
	
		<action name="userWelcome" class="com.zb.action.UserAction" method="testMethod01">
			<!-- 
				type
					适用于到页面
						dispatcher:默认值,转发
						redirect:重定向(到Action也可以用该属性)
					适用于到Action
						chain:转发到Action
						redirectAction:重定向到Action
			 -->
			<result name="toPage02" type="chain">
				stuWelcome
				<!-- 
					访问非本命名空间的Action
					<param name="namespace">/user</param>
					<param name="actionName">stuWelcome</param> 
				-->
			</result>
			
			<result>
				/page02.jsp
			</result>			
		</action>
		
		<action name="stuWelcome" class="com.zb.action.StuAction" method="testMethod02">
		</action>
	</package>
</struts>

Action包(.java)

package com.zb.action;

public class StuAction {
	
	public String testMethod02() {
		System.out.println("我是STU ACTION中的内容");
		
		return "toPage02";
	}
	
}
package com.zb.action;
//*Struts的Action类是线程安全的,不用担心并发问题
public class UserAction {
    //封装属性
	private String password;
	private Integer age;
	//必须有一个无参的构造方法(一般是由系统提供了,只有当我们自己在Action类中手动声明了带参数的构造方法之后才需要注意)
	
	public String testMethod01() {
        
		return "success";
        
	}
	
	/*
	 *	可以通过SET方法接收参数
	 *		set方法接受参数的时候,跟方法参数名无关
	 *		跟Set方法名有关 
	 *		SET方法会比Action的目标方法优先执行
	 * */
	public void setUsername(String abc) {
		System.out.println(abc);
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setAge(Integer age) {
		this.age = age;
	}
}
package com.zb.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;

public class DepartAction implements ApplicationAware,SessionAware,RequestAware {
	
	private String testValue;
	
	Map<String,Object> sessionAttributeMap;
	Map<String,Object> applicationAttributeMap;
	Map<String,Object> requestAttributeMap;
	
	public String testMethod01() {
		System.out.println("被访问了!");
		//获得Struts的ActionContext容器
		ActionContext ac = ActionContext.getContext();
		//request.setAttribute("msg","我已经成功接收到你输入的测试值了");
		/*
		Map<String,Object> sessionAttributeMap = ac.getSession();
		sessionAttributeMap.put("msg", "我已经成功接收到你输入的测试值了");
		
		Map<String,Object> applicationAttributeMap = ac.getApplication();
		applicationAttributeMap.put("msg2", "我是在Action中通过ApplicationAttributeMap存入的内容");
		
		Map<String,Object> requestAttributeMap = (Map<String,Object>)ac.get("request");
		requestAttributeMap.put("msg1", "我是REQUESTMap中存的值,我的获取方式特殊一点");
		*/
		sessionAttributeMap.put("msg", "我已经成功接收到你输入的测试值了2");
		applicationAttributeMap.put("msg2", "我是在Action中通过ApplicationAttributeMap存入的内容2");
		requestAttributeMap.put("msg1", "我是REQUESTMap中存的值,我的获取方式特殊一点1");
		
		System.out.println(testValue);
		
		return "success";
	}

	
	public void setTestValue(String testValue) {
		this.testValue = testValue;
	}

	@Override
	public void setApplication(Map<String, Object> application) {
		this.applicationAttributeMap = application;
	}

	@Override
	public void setSession(Map<String, Object> session) {
		this.sessionAttributeMap = session;
	}

	@Override
	public void setRequest(Map<String, Object> request) {
		this.requestAttributeMap = request;
	}
}
package com.zb.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

public class TestAction{
	
	public String testMethod01() {
		
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		ServletContext application = ServletActionContext.getServletContext();
		
		System.out.println(request);
		System.out.println(session);
		System.out.println(application);
		
		request.setAttribute("msg1", "啊哈哈");
		session.setAttribute("msg", "起飞");
		application.setAttribute("msg2", "恰饭");
		
		return "success";
	}	
}

3、练习

练习
使用Struts2框架完成如下功能
1、完成登录后的用户状态记录,用于验证用户是否登录,以及是否有权限进入登录注册以外的其他页面
2、完成对用户信息表的查询功能,并回传数据到页面
3、完成用户修改密码功能
4、在页面接受用户提交的爱好信息(复选框,后台使用数组接收),并在后台迭代显示
*完成今天练习的基础上,补全昨天练习中直要求捕获请求的Action目标方法
预习
如何在Struts2中如何设置请求后缀
Struts2中如何进行动态方法调用
了解Struts2中的值栈
sion.setAttribute(“msg”, “起飞”);
application.setAttribute(“msg2”, “恰饭”);

	return "success";
}	

}






## 3、练习

>练习
>	使用Struts2框架完成如下功能
>		1、完成登录后的用户状态记录,用于验证用户是否登录,以及是否有权限进入登录注册以外的其他页面
>		2、完成对用户信息表的查询功能,并回传数据到页面
>		3、完成用户修改密码功能
>		4、在页面接受用户提交的爱好信息(复选框,后台使用数组接收),并在后台迭代显示
>	*完成今天练习的基础上,补全昨天练习中直要求捕获请求的Action目标方法
>预习
>	如何在Struts2中如何设置请求后缀
>	Struts2中如何进行动态方法调用
>	了解Struts2中的值栈
>	Struts2的标签库中标签的使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值