01.Struts2框架

01.Struts2框架

1、Struts2框架概述

​ 框架:为了简化开发而生的,为了完成某种特定的任务的一组工具的集合,一种约束。半成品的程序。
​ MVC模式的框架:
​ M:Model
​ V:View JSP
​ C:Controller Servlet(Action),SpringMVC(Servlet)
​ 为什么现在不怎么使用Struts2
​ 1、漏洞太多了
​ 2、不方便与Spring进行整合
​ 3、老项目/也有很多的公司在使用Struts2
​ MVC流程
​ view->controller->model->controller->view

2、Struts2的核心执行原理

​ 执行原理:使用过滤器进行请求的调度(SpringMVC使用Servlet)

3、为什么需要使用Struts2

​ 1、可以帮助我们自动封装参数
​ 2、简单的页面跳转
​ 3、简单的输入验证

4、怎么使用

​ 下载与安装
​ 解压
​ 目录:
​ apps:演示案例
​ docs:帮助文档
​ lib:jar包
​ src:源代码
​ 导入jar包
​ commons-fileupload-1.4:Struts文件上传依赖的jar
​ commons-io-2.6:Struts输入输出流依赖的jar
​ commons-lang:Struts原因依赖包
​ commons-lang3
​ freemarker-2.3.28:Struts的模板引擎依赖的jar
​ javassist-3.20.0-GA:Struts字节码处理Jar
​ log4j-api-2.12.1:打印日志依赖jar
​ slf4j-api-1.7.28:日志
​ ognl-3.1.26:Struts支持的OGNL表达式依赖jar
​ struts2-core-2.5.22:Struts的核心jar包

配置Struts2的核心过滤器

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

​ 引入Struts2的核心配置文件struts.xml
​ struts-2.5.22\src\apps\rest-showcase\src\main\resources
​ *关联dtd文档
​ Preferences->XML->XML CATAlog->Add

​ Locaion:找Struts2对应版本号的路径

​ Key type:URI

​ Key:struts2对应版本号的路径:http://struts.apache.org/dtds/struts-2.5.dtd

5、如何创建Action类:

​ 处理请求的类,当Struts捕获到请求的时候会交给该类中的某个指定方法去处理

​ 1、创建普通Java类
​ 2、配置该Java类,作为Struts2中的一个Action
​ Struts2的核心配置文件
​ :配置文件的根节点,有且只有一个,所有的配置项必须全部写在根节点中
​ :包,Struts2的基础配置之一,一般用于存放一组或者一个(Action:一个Java类,用于处理一个请求)

案例

案例1:

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>
	<form action="inserUserInfo" method="post">
		<input type="text" name="userUne"><br/>
		<input type="text" name="userPwd"><br/>
		<input type="date" name="createDate"><br/>
		<input type="submit" value="提交">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="selectAllUserInfo">查看所有用户信息</a><br/>
	<c:forEach items="${requestScope.uis }" var="ui">
		${ui.userId }|${ui.userUne }|${ui.userPwd }|${ui.createDate }<br/>
	</c:forEach>
	
</body>
</html>
配置filter
<?xml version="1.0" encoding="UTF-8"?>
<!--Struts2约束-->
<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>struts2Test01</display-name>
	
	<filter>
		<filter-name>dispatcherFilter</filter-name>
		<filter-class>com.zb.filter.MyFilterController</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>dispatcherFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

案例需要导入的jar

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

c3p0.properties的配置
//注意:此文件必须放在源文件(src)目录下
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///user_db?characterEncoding=UTF-8
c3p0.user=root
c3p0.password=123456
实体类
package com.zb.model;

import java.util.Date;

public class UserInfo {
	private Integer userId;
	private String userUne;
	private String userPwd;
	private Date createDate;

	public UserInfo() {
		super();
	}

	public UserInfo(Integer userId, String userUne, String userPwd, Date createDate) {
		super();
		this.userId = userId;
		this.userUne = userUne;
		this.userPwd = userPwd;
		this.createDate = createDate;
	}

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUserUne() {
		return userUne;
	}

	public void setUserUne(String userUne) {
		this.userUne = userUne;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	@Override
	public String toString() {
		return "UserInfo [userId=" + userId + ", userUne=" + userUne + ", userPwd=" + userPwd + ", createDate="
				+ createDate + "]";
	}

}
dao类
package com.zb.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.zb.model.UserInfo;

public class UserInfoDao {
	
	public List<UserInfo> getAllUserInfo() throws Exception{
		DataSource dataSource = new ComboPooledDataSource();
		Connection conn = dataSource.getConnection();
		
		ResultSet res = conn.prepareStatement(" SELECT * FROM user_info ").executeQuery();
		List<UserInfo> uis = new ArrayList<UserInfo>();
		while(res.next()) {
			UserInfo ui = new UserInfo(res.getInt(1), res.getString(2), res.getString(3), res.getDate(4));
			uis.add(ui);
		}
		
		conn.close();
		
		return uis;
	}
}
Filter(过滤器)

作用:可以完全替换Servlet

package com.zb.filter;

import java.io.IOException;
import java.util.List;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zb.dao.UserInfoDao;
import com.zb.model.UserInfo;

public class MyFilterController extends HttpFilter {

	private UserInfoDao uid = new UserInfoDao();
	
	@Override
	protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		
		String servletPath = request.getServletPath();
		
		if(servletPath.indexOf("selectAllUserInfo")>-1) {
			try {
				List<UserInfo> listUi =  uid.getAllUserInfo();
				request.setAttribute("uis", listUi);
			} catch (Exception e) {
				System.out.println("查询所有用户信息失败");
			}
		}else if(servletPath.indexOf("inserUserInfo")>-1) {
			UserInfo ui = new UserInfo();
		}else {
			chain.doFilter(request, response);
		}
	}
}

案例2:

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>
	<a href="sayhello">你好</a>
</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>欢迎光临XXX会所!</h1>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>zaijian</h1>
</body>
</html>

导入相应的jar

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

配置web.xml
<?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>struts2Test02</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	
	
	<!-- 注册 -->
	<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(注:名字必须为struts,大小写敏感)
<?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>
	<!-- 
		包:存放一个或者一组Action配置 
			name:该pageckage标签在程序中的唯一标识
			extends:该包继承了哪些包的配置(初期,去继承struts-default:Struts的默认配置)
	-->
	<package name="helloPackage" extends="struts-default">
		<!-- 
			配置一个Action类 
				name:该Action处理的请求名称
				class:捕捉到该请求之后,交给哪个类处理
				method:方法类处理该请求的方法
		-->
		<action name="sayhello" class="com.zb.action.UserAction" method="testMetdho01">
			<result name="hy">/welcome.jsp</result>
			<result name="bhy">/abc.jsp</result>
		</action>
		<action name="sayGoodBye" class="com.zb.action.UserAction" method="testMetdho02">
			
		</action>
	</package>
</struts>
定义一个Action类
package com.zb.action;

public class UserAction {
	
	public String testMetdho01() {
		System.out.println("你好,欢迎Struts2");
		return "bhy";
	}
	
	public void testMetdho02() {
		System.out.println("滚犊子");
	}
}

练习:

1、练习,熟练配置一个Struts2框架的应用程序。
2、配置三个action类,分别用于处理
用户相关请求
登录:/login
登录成功响应到首页(index)
注册:/register
登录失败响应到登录页(login)
订单相关请求
所有订单:/showAllOrder
已完成订单:/successOrder
产品相关请求
查看所有产品:/showAllGoods
条件查询产品:/getGoodsInfoByCondition
下架产品:/deleteGoodsInfoById
上架产品:/addGoodsInfo
报表相关请求
查看当月销售情况:/getNowMonth
查看全年销售情况:/getFullYear
*以上功能除了用户相关请求需要实现后台功能以外,其他请求能被Action的方法捕获即可,如有多余时间,请实现后台功能,数据库与页面自行设计。
3、预习
在Struts中如何进行重定向到页面
在Struts中如何获取页面提交参数
在Struts中如何访问(request,session,application等)ServletAPI资源
注册:/register
登录失败响应到登录页(login)
订单相关请求
所有订单:/showAllOrder
已完成订单:/successOrder
产品相关请求
查看所有产品:/showAllGoods
条件查询产品:/getGoodsInfoByCondition
下架产品:/deleteGoodsInfoById
上架产品:/addGoodsInfo
报表相关请求
查看当月销售情况:/getNowMonth
查看全年销售情况:/getFullYear
*以上功能除了用户相关请求需要实现后台功能以外,其他请求能被Action的方法捕获即可,如有多余时间,请实现后台功能,数据库与页面自行设计。
3、预习
在Struts中如何进行重定向到页面
在Struts中如何获取页面提交参数
在Struts中如何访问(request,session,application等)ServletAPI资源
在Struts中如何使用通过通配符调用Action类中的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值