计算机课程个性化内容推荐系统的设计与实现+文档等

news2024/11/26 0:42:21

  博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计

项目名称

计算机课程个性化内容推荐系统的设计与实现+文档等

视频演示

计算机课程个性化内容推荐系统的设计与实现

系统介绍

计算机课程个性化内容推荐系统的设计与实现

摘  要:在当前疫情形势下,网络课程的需求不断增加。随着技术的成熟,网络课程变得越来越方便和实用。课程推荐系统彻底告别传统模式,使得管理不再复杂和困难,减少相同和繁琐的操作,运用科学技术解决反复出现的问题,让管理规范、灵活化。使用Java开发的课程推荐系统能够方便学生进行线上学习,有助于老师在线布置作业并管理批改学生作业,同学们在线上即可完成或缴纳作业,减少接触,还有方便老师们统一的管理和检查。自定义化的提升,让老师和同学们都更灵活的时间安排。

根据查阅的资料和结合实际需求加上参考大量的项目来进行分析和设计,采用B/S框架结合JSP技术来开发。为了保证数据持久化需要使用数据库保存数据,使用MySQL数据库来保存,本系统的设计实施为课程推荐系统的运行做基础,并且使用基于用户的协同过滤算法对向用户推荐更加感兴趣的课程,做到个性化推荐的目的。

 

关键词:课程推荐系统;Java;个性化推荐

3  需求分析

3. 1  功能需求分析

根据需求进行功能模块分析,明确所需完成的功能明细点模块,然后将其连成一个闭环,确保每个流程环环相扣,同时排除耦合的情况。接着,将逻辑需求转换为实际内容,并按照指定好的模型进行开发。系统设计不仅要明确需求和功能,还要在功能模块的前提下设计好页面交互,良好的页面交互可以让数据库设计更加得心应手。系统主要包括前台和后台两个部分。后台人员主要负责维护基础处理的初始化和数据管理等维护工作,而前台用户分为学生和老师两种角色,登录验证成功后即可对应权限操作系统。

3.1.1系统用户确定

本课程推荐系统的主要功能包括课程学习、作业提交、签到管理和答疑管理等。为了实现这些功能,需要对用户角色进行划分。

根据系统的设计,主要分为学生用户模块、教师用户模块和管理员模块三个部分。其中,学生用户主要使用课程学习模块和作业完成模块进行学习、作业提交和签到等操作;而教师用户则主要进行作业审批、课程发布、答疑回复等管理操作。最后,管理员角色主要对系统的基础数据进行维护和系统架构进行管理。

在具体开发过程中,需要根据需求分析来明确各个功能模块,并设计好相应的页面交互,从而使得系统的功能环环相扣,每个流程都能够顺畅运行。同时,需要根据所制定的模型进行开发,保证逻辑需求能够顺利转换成实际内容。系统设计不仅需要考虑功能模块,还要考虑页面交互以及数据库设计的优化,以提高系统的使用效率和用户体验。

在具体实现中,前台主要面向学生和教师两种用户,需要进行权限管理;而后台则由管理员进行维护,负责处理系统的初始化、数据管理等维护工作。因此,需要在系统设计中考虑到这些不同角色的需求和操作,并为其提供相应的功能模块和权限管理。

所以本系统的用户角色包括三类用户角色:学生、老师、管理员。

3.1.2系统用例词汇表

(1)管理员:系统管理员主要是为了对系统的基础数据作出维护、主要包括用户名、密码、权限等信息。

(2)学生:学生用户是系统的主体服务对象,对课程学习、作业下载、签到管理、在线测评功能做使用角色。

(3)老师:老师用户是系统对于课程、章、节、作业批阅、答疑等功能的维护。

(4)课程:本系统的课程就是为了提供给用户进行学习并且老师进行数据维护的,主要包括编号、名称、图片等信息。

(5)章:一个课程下面可以分为多个章节,章节下面主要包括编号、课程ID、名称、图片等信息。

(6)节:一个章下面有可以分为多个节,节下面主要包括编号、课程ID、章ID、图片、名称、简介、视频信息等内容。

3.1.3系统用例模型

系统包括了三种用户角色,用户的用例图也需要有三个用户角色。

管理员的功能模块主要包括人员管理、课程管理、章节管理、签到管理、测评管理、答疑管理、作业管理等功能,管理员用例图3-1如下所示。

图3-1 管理员用例图

学生的功能模块主要是为学生用户设计的,包括了教学信息的查看、在线自测、学生登录、下载作业、学生签到、修改个人资料、修改密码等功能。学生用户是系统的前台主要使用人员,他们的操作数据将为系统的基础数据提供保障,学生用例图如下3-2所示。

图3-2 学生用例图

老师的功能模块主要是针对课程信息的维护和学生作业、测评的评判与打分。包括课程管理、章节管理、签到管理、测评管理、答疑管理、作业管理等功能。老师作为课程的主讲人和学生的辅导者,需要对学生的学习情况和作业完成情况进行跟踪和评估,并对学生提出问题进行答疑解惑,为学生提供更好的学习体验和教学效果,老师用例图如下3-3所示。

技术栈

1. 后端:Spring+SpringMVC+Mybatis
2. 前端:JSP+CSS+JavaScript+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8080/ 登录

运行截图

 用户管理控制层:

package com.houserss.controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;

/**
 * Created by admin
 */
@Controller
@RequestMapping("/user/")
public class UserController {
    @Autowired
    private IUserService iUserService;

    /**
     * 用户登录
     * @param username
     * @param password
     * @param session
     * @return
     */
    @RequestMapping(value = "login.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<User> login(User user,String uvcode, HttpSession session){
        String code = (String)session.getAttribute("validationCode");
        if(StringUtils.isNotBlank(code)) {
            if(!code.equalsIgnoreCase(uvcode)) {
                return ServerResponse.createByErrorMessage("验证码不正确");
            }
        }
        ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword());
        if(response.isSuccess()){
            session.setAttribute(Const.CURRENT_USER,response.getData());
        }
        return response;
    }

  
    
    
}

管理员管理控制层:


package com.sxl.controller.admin;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller("adminController")
@RequestMapping(value = "/admin")
public class AdminController extends MyController {
	

	@RequestMapping(value = "/index")
	public String frame(Model model, HttpServletRequest request)throws Exception {
		return "/admin/index";
	}
	
	@RequestMapping(value = "/main")
	public String main(Model model, HttpServletRequest request)throws Exception {
		return "/admin/main";
	}
	
	@RequestMapping(value = "/tj1")
	public String tj1(Model model, HttpServletRequest request)throws Exception {
		String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d')  desc";
		List<Map> list = db.queryForList(sql);
		model.addAttribute("list", list);
		System.out.println(list);
		return "/admin/tj/tj1";
	}
	
	
	@RequestMapping(value = "/password")
	public String password(Model model, HttpServletRequest request)throws Exception {
		return "/admin/password";
	}
	
	
	@RequestMapping(value = "/changePassword")
	public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
		Map admin = getAdmin(request);
		if(oldPassword.equals(admin.get("password").toString())){
			String sql="update t_admin set password=? where id=?";
			db.update(sql, new Object[]{newPassword,admin.get("id")});
			return renderData(true,"1",null);
		}else{
			return renderData(false,"1",null);
		}
	}
}

修改密码业务逻辑:


package com.sxl.controller.admin;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sxl.controller.MyController;

@Controller("userController")
@RequestMapping(value = "/user")
public class UserController extends MyController {
	

	@RequestMapping(value = "/index")
	public String frame(Model model, HttpServletRequest request)throws Exception {
		return "/user/index";
	}
	
	@RequestMapping(value = "/main")
	public String main(Model model, HttpServletRequest request)throws Exception {
		return "/user/main";
	}
	
	
	@RequestMapping(value = "/password")
	public String password(Model model, HttpServletRequest request)throws Exception {
		return "/user/password";
	}
	
	
	@RequestMapping(value = "/changePassword")
	public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
		Map user = getUser(request);
		if(oldPassword.equals(user.get("password").toString())){
			String sql="update t_user set password=? where id=?";
			db.update(sql, new Object[]{newPassword,user.get("id")});
			return renderData(true,"1",null);
		}else{
			return renderData(false,"1",null);
		}
	}
	@RequestMapping(value = "/mine")
	public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap("select * from t_user where id=?",new Object[]{user.get("id")});model.addAttribute("map", map);		return "/user/mine";
	}
	
	

	@RequestMapping(value = "/mineSave")
	public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id
		,String username,String password,String name,String gh,String mobile) throws Exception{
		int result = 0;
			String sql="update t_user set name=?,gh=?,mobile=? where id=?";
			result = db.update(sql, new Object[]{name,gh,mobile,id});
		if(result==1){
			return renderData(true,"操作成功",null);
		}else{
			return renderData(false,"操作失败",null);
		}
	}
	}

通用管理模块:

package com.sxl.controller;


import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;


public class BaseController {
	public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1天

	@Autowired
	private SystemProperties systemProperties;

	/**
	 * 获得配置文件内容
	 */
	public String getConfig(String key) {
		return systemProperties.getProperties(key);
	}

	/**
	 * 返回服务器地址 like http://192.168.1.1:8441/UUBean/
	 */
	public String getHostUrl(HttpServletRequest request) {
		String hostName = request.getServerName();
		Integer hostPort = request.getServerPort();
		String path = request.getContextPath();

		if (hostPort == 80) {
			return "http://" + hostName + path + "/";
		} else {
			return "http://" + hostName + ":" + hostPort + path + "/";
		}
	}

	/***
	 * 获取当前的website路径 String
	 */
	public static String getWebSite(HttpServletRequest request) {
		String returnUrl = request.getScheme() + "://"
				+ request.getServerName();

		if (request.getServerPort() != 80) {
			returnUrl += ":" + request.getServerPort();
		}

		returnUrl += request.getContextPath();

		return returnUrl;
	}



	/**
	 * 初始化HTTP头.
	 * 
	 * @return HttpHeaders
	 */
	public HttpHeaders initHttpHeaders() {
		HttpHeaders headers = new HttpHeaders();
		MediaType mediaType = new MediaType("text", "html",
				Charset.forName("utf-8"));
		headers.setContentType(mediaType);
		return headers;
	}

	/**
	 * 返回 信息数据
	 * 
	 * @param status
	 * @param msg
	 * @return
	 */
	public ResponseEntity<String> renderMsg(Boolean status, String msg) {
		if (StringUtils.isEmpty(msg)) {
			msg = "";
		}
		String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}";
		ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
				initHttpHeaders(), HttpStatus.OK);
		return responseEntity;
	}

	/**
	 * 返回obj数据
	 * 
	 * @param status
	 * @param msg
	 * @param obj
	 * @return
	 */
	public ResponseEntity<String> renderData(Boolean status, String msg,
			Object obj) {
		if (StringUtils.isEmpty(msg)) {
			msg = "";
		}
		StringBuffer sb = new StringBuffer();
		sb.append("{");
		sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\",");
		sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
		sb.append("}");

		ResponseEntity<String> responseEntity = new ResponseEntity<String>(
				sb.toString(), initHttpHeaders(), HttpStatus.OK);
		return responseEntity;
	}


	/***
	 * 获取IP(如果是多级代理,则得到的是一串IP值)
	 */
	public static String getIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}

		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}

		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}

		if (ip != null && ip.length() > 0) {
			String[] ips = ip.split(",");
			for (int i = 0; i < ips.length; i++) {
				if (!"unknown".equalsIgnoreCase(ips[i])) {
					ip = ips[i];
					break;
				}
			}
		}

		return ip;
	}

	/**
	 * 国际化获得语言内容
	 * 
	 * @param key
	 *            语言key
	 * @param args
	 * @param argsSplit
	 * @param defaultMessage
	 * @param locale
	 * @return
	 */
	public static String getLanguage(String key, String args, String argsSplit,
			String defaultMessage, String locale) {
		String language = "zh";
		String contry = "cn";
		String returnValue = defaultMessage;

		if (!StringUtil.isEmpty(locale)) {
			try {
				String[] localeArray = locale.split("_");
				language = localeArray[0];
				contry = localeArray[1];
			} catch (Exception e) {
			}
		}

		try {
			ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
					new Locale(language, contry));
			returnValue = resource.getString(key);
			if (!StringUtil.isEmpty(args)) {
				String[] argsArray = args.split(argsSplit);
				for (int i = 0; i < argsArray.length; i++) {
					returnValue = returnValue.replace("{" + i + "}",
							argsArray[i]);
				}
			}
		} catch (Exception e) {
		}

		return returnValue;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Car Guide

文章目录 科目一第一章 机动车驾驶证申领和使用规定第一节 驾驶证的许可&#xff1f;种类和有效期第二节 驾驶证的申领第三节 驾驶证的使用第四节 驾驶考试第五节 违法记分制度 第二章 交通信号第一节 交通信号灯第二节 交通标志第三节 交通标线第四节 交警手势 第三章 道路交通…

Ansible之playbooks剧本

目录 一、playbooks1、playbooks简述2、playbooks剧本格式3、playbooks组成部分4、playbooks启动 二、playbook编写 apache 的yum安装部署剧本三、playbook编写 nginx 的yum安装并且能修改其监听端口的剧本四、 playbook的定义、引用变量1、基础变量的定义与引用2、引用fact信息…

Stable Diffusion webui 基础参数学习

哈喽&#xff0c;各位小伙伴们大家好&#xff0c;最近一直再研究人工智能类的生产力&#xff0c;不得不说随着时代科技的进步让人工智能也得到了突破性的发展。而小编前段时间玩画画也是玩的不可自拔&#xff0c;你能想想得到&#xff0c;一个完全不会画画的有一天也能创作出绘…

【计算机网络】第一章概论-电子科技大学2023期末考试

相关术语 URI&#xff1a;Uniform Resource Identifier 统一资源标识符&#xff0c;指的是一个资源 URL&#xff1a;Uniform Resource Location 统一资源定位符&#xff0c;URI的子集&#xff0c;用地址定为的方式指定一个资源 URN&#xff1a;Uniform Resource Name 统一资…

MySQL事务相关笔记

杂项 InnoDB最大特点&#xff1a;支持事务和行锁&#xff1b; MyISAM不支持事务 介绍 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元&#xff0c;只有当事务中的所有操作都正常执行完了&#xff0c;整个事务才会被提交给数据库。事务有如下特性…

【使用指导】wifi蓝牙二合一模块LCS2028与服务器的数据收发功能测试指导

在物联网智能家居、智能照明、智能楼宇、智慧工厂、智能制造等领域的数据透传、智能控制应用中&#xff0c;支持UART串口通信的低功耗WiFi蓝牙二合一模块应用极为广泛。模块性能测试环节中会测试模块与服务器的数据收发功能&#xff0c;确保功能性能够满足项目应用需求。本篇就…

深入理解 SpringBoot 日志框架:从入门到高级应用——(四)Logback 输出日志到 QQ邮箱

文章目录 获取 QQ 邮箱授权码添加依赖编写 SMTPAppender运行结果 要将 Logback 输出日志到 QQ 邮箱&#xff0c;需要执行以下步骤&#xff1a; 在 QQ 邮箱中获取授权码。在你的 SpringBoot 项目中添加 Logback 依赖和 SMTP 协议实现库&#xff0c;例如 Email 依赖。在 Logback…

NOTA-Me-Tetrazine,NOTA-甲基四嗪,大环化合物具有良好的配位和鳌合能力

文章关键词&#xff1a;甲基四嗪修饰大环配体&#xff0c;双功能螯合剂&#xff0c;大环化合物 ●中文名&#xff1a;NOTA-甲基四嗪 ●英文名&#xff1a;NOTA-Me-Tetrazine ●外观以及性质&#xff1a; 西安凯新生物科技有限公司供应的​NOTA-Me-Tetrazine中四嗪修饰大环配体&…

LaTeX插入参考文献

接着上一篇&#xff0c;用EndNote组织参考文献&#xff0c;然后再导入到LeTex中感觉不太好用&#xff0c;然后就学习了一下BibTeX来管理参考文献&#xff0c;发现还可以&#xff0c;这里记录一下&#xff0c;方便以后查阅。 LaTeX插入参考文献 thebibliographyBibTeX参考资料 t…

总结901

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.回环复习之前背过的文章。 2.背单词&#xf…

想了解3,4,6-Tri-O-acetyl-D-galactal,4098-06-0,D-三乙酰半乳糖烯?点击这里查看详细信息!

文章关键词&#xff1a;糖化学试剂&#xff0c;三乙酰半乳糖烯 3,4,6-Tri-O-acetyl-D-galactal |3,4,6-O-三乙酰基-D-半乳糖烯&#xff0c;D-三乙酰半乳糖烯|CAS&#xff1a;4098-06-0 | 纯度&#xff1a;95%一、结构式&#xff1a; 二、试剂参数信息&#xff1a; CAS&#x…

Redis从入门到精通进阶篇之持久化RDB和AOF机制详解

文章目录 RDB持久化AOF持久化RDB与AOF的混合持久化 Redis 6的持久化机制主要有两种&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。本文将详细介绍这两种持久化方式的工作原理和配置要点。 RDB持久化 RDB持久化是将当…

中国电子学会2023年05月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)

2023年5月 Scratch一级真题 题数&#xff1a;37 分数&#xff1a;100 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 看图找规律&#xff0c;请问下图红框中是&#xff1f;&#xff08;D&#xff09;&#xff08;2分&#xff09; A. B. C. …

C++线程库(1)

C线程库&#xff08;1&#xff09; 线程进程基础概念多线程线程调用函数的底层值作为参数引用作为参数右值引用作为参数 join和destach区别joinable函数 jthread&#xff08;C20&#xff09;同步异步&#xff08;简述&#xff09;互斥&#xff08;简述&#xff09;阻塞非阻塞递…

SpringAOP+自定义注解简单使用

一、SpringAOP简述 SpringAOP可以帮助我们在不修改源代码的前提下实现功能增强&#xff0c;其底层实现原理基于Java动态代理或者CGLIB。 之前我们使用 execution表达式指定被AOP增强的方法&#xff1a;(execution关键字用于描述哪些方法需要切面逻辑) 但是这样使用非常不灵活&a…

网络层:路由选择协议

1.网络层&#xff1a;路由选择协议 笔记来源&#xff1a; 湖科大教书匠&#xff1a;路由选择协议概述 湖科大教书匠&#xff1a;路由信息协议RIP的基本工作原理 湖科大教书匠&#xff1a;开放最短路径优先OSPF的基本工作原理 湖科大教书匠&#xff1a;边界网关协议&#xff08…

力扣题库刷题笔记7--N

1、题目如下&#xff1a; 2、个人Python代码实现&#xff1a; 看到此题的第一反应就是&#xff0c;生成一个类似二维数组的多个字符串&#xff0c;然后用个标志位控制N字符中字符的方向&#xff0c;例如flag True&#xff0c;在每次循环时候以flag flag * -1来控制。 由于示例…

嵌套虚拟机-Win10下的-wmware中的Ubuntu1804-使用KVM-安装win和ubuntu虚拟机

一、物理机操作 参考博文-CSDN-林麦安 -关于“ VMware Workstation 16 此平台不支持虚拟化的Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT,是否继续&#xff1f;”的有关问题的总结解答 在windows物理机搜索&#xff1a;内核隔离 把开关置为关 但是我的物理机这个选项已经是…

学习系统编程No.24【深入学习信号】

引言&#xff1a; 北京时间&#xff1a;2023/6/13/19:07&#xff0c;伴随着期末考的来临&#xff0c;最近停课啦&#xff01;无论是线上课&#xff0c;还是学校的课&#xff0c;开心&#xff0c;那这不是咱持续更文的好时候嘛&#xff0c;但是今天在学习相关C知识时&#xff0…

华为防火墙之安全策略

1.安全策略初体验 安全策略在防火墙转发报文的过程中扮演着重要角色&#xff0c;只有安全策略允许通过&#xff0c;报文才能在安全区域之间流动&#xff0c;否则报文将被丢弃。 先来看一个简单的网络环境&#xff0c;如下图&#xff1a; 如果想在防火墙上允许PC访问Web服务器…