JavaWeb----JSPJSTL

news2024/11/15 23:59:21

目录

  • JSP
    • 显隐注释
    • 在JSP中写java程序
    • JSP的指令标签
    • JSP中的四大域对象
    • 简易版用户登录
    • EL表达式
  • JSTL
    • 条件动作标签
      • if标签
    • choose\when\otherwise标签
    • 迭代标签
    • 格式化动作标签
  • 用户登录实例
    • 查看是否安装了mysql
    • 用户登录界面
    • 后台实现

JSP

JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。

显隐注释

	<%-- 你好 --%>
	<!-- 不好 -->
	

在JSP中写java程序

<% 
		//定义局部变量
		String str = "Hello";
	String str1 = "Hello11";
		System.out.println(str);
		out.print(str);
		out.print(num);
	%>
	
	<%!
		//声明全局变量
		int num = 10;
		
		
	%>
	
	<%-- 输出表达式、变量或字面量 --%>
	<%=str1 %>

JSP的指令标签

include静态包含
特点:

  • 最终只会生成一个源码文件,所以变量各个包含页面内的变量不能重名。

格式:

	<%@include file="header.jsp"%> 
	<h2>主体内容</h2>

动态包含
特点:

  • 相当于方法的调用,最后生成多个源码文件,所以可以定义同名变量
  • 当动态包含不需要传递参数时,include双标签之间不要有任何内容。

格式:

	<jsp:include page="header.jsp">
	<h2>主体内容</h2>
  • 传递参数
	<jsp:include page="header.jsp"></jsp:include>
	<h2>主体内容</h2>
	<%
		String str = "hello";
	%>

	<jsp:include page="header.jsp">
		<jsp:param value="admin" name="uname"/>
		<jsp:param value="<%=str%>" name="msg"/>
	</jsp:include>
	<h1>这是头部</h1>
	<%
		String uname = request.getParameter("uname");
		String msg = request.getParameter("uname");
		out.print(uname+ ", "+msg );
	%>

JSP中的四大域对象

其中一个页面设置域对象

<%
		pageContext.setAttribute("name1", "zhangsan");
		request.setAttribute("name2", "lisi");
		session.setAttribute("name3", "王五");
		application.setAttribute("name4", "zhaoliu");
	%>
	
	<%-- <jsp:forward page="header.jsp"></jsp:forward> --%>
	<a href="header.jsp">跳转</a>

如果使用<jsp:forward page=“header.jsp”></jsp:forward>这种形式是直接显示的效果
但如果是要点击页面跳转的化,要使用a标签,这样request对象就不起作用了,session对象是可以使用的。

实例: 用户登录界面

<%
		out.print("page范围:" + pageContext.getAttribute("name1")+"<br/>");
		out.print("request范围:" + request.getAttribute("name2")+"<br/>");
		out.print("session范围:" + session.getAttribute("name3")+"<br/>");
		out.print("application范围:" + application.getAttribute("name4")+"<br/>");
	
	%>

简易版用户登录

	<form action="loginbasicSer" method="post">
		姓名:<input type="text" name="uname"><br>
		密码:<input type="password" name="upwd"><br>
		<button>登录</button><span style="color: red; font-size: 12px"><%=request.getAttribute("meg") %></span>
		<!-- <button>登录</button><span style="color: red; font-size: 12px">${meg}</span> -->
	</form>
	</form>
package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/loginbasicSer")
public class lbasicSer extends HttpServlet{
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setHeader("content-type", "text/html;charset=utf-8");
		
		String uname = request.getParameter("uname");
		String upwd = request.getParameter("upwd");
		
		//uname.trim()确保输入的字符串不为空或不只是空白字符
		if ( uname == null || "".equals(uname.trim())) {
			request.setAttribute("meg", "用户姓名不能为空");
			request.getRequestDispatcher("loginbasic.jsp").forward(request, response);
			return;
		}
		
		//判断账号密码是否正确  uname=admin   upwd=admin
		if ( !"admin".equals(uname) || !"admin".equals(upwd)) {
			request.setAttribute("meg", "登录错误。");
			request.getRequestDispatcher("loginbasic.jsp").forward(request, response);
			return;
		}
		
//		登录成功
//		设置登录信息到session作用域
		request.getSession().setAttribute("uname", uname);
		response.sendRedirect("ind.jsp");
		
	}
}

EL表达式

默认重小到大,找到即可;当域对象找完了还未找到返回空字符串“”

	<%
		pageContext.setAttribute("name1", "zhangsan");
		request.setAttribute("name", "lisi");
		session.setAttribute("name", "王五");
		application.setAttribute("name", "zhaoliu");
	%>
	
	获取域对象: ${name}<br/>
	获取指定范围的域对象:${applicationScope.name}

  • 获取List
	<%
		List<String> list = new ArrayList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		request.setAttribute("list", list);
	%>
	<h4>获取List</h4>
	获取List的size: ${list.size()}<br/>
	获取List的指定下标的值:${list[1]}

	<%
		Map map = new HashMap();
		map.put("aaa", "111");
		map.put("bbb", "222");
		map.put("ccc", "333");
		map.put("ddd", "444");
		request.setAttribute("map", map);
	%>
	<h4>获取map</h4>
	获取map的size: ${map.size()}<br/>
	获取map的指定下标的值:${map['aaa']}
  • 获取JavaBean对象
    JavaBean中的属性字段必须要提供Get和set方法
JavaBean对象
	<%
		User user = new User();
		user.setUserId(1);
		user.setUname("钟子扬");
		user.setUpwd("123456");
		request.setAttribute("user", user);
	%>
	
	获取javaBean对象<br/>
	获取javaBean中的属性:${user.uname} --- ${user.getUserId()}
	
package entity;

public class User {
	private int userId;
	private String uname;
	private String upwd;
	
	public int getUserId() {
		return userId;
	}
	public String getUname() {
		return uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public User(int userId, String uname, String upwd) {
		super();
		this.userId = userId;
		this.uname = uname;
		this.upwd = upwd;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}
	public User() {
		super();
	}
	
}

  • empty 判断是否为空
    如果域对象不存在,空字串串或者null的 会返回true
<%
		request.setAttribute("str1", "aaa");
		request.setAttribute("str2", "");
		request.setAttribute("str3", null);
	%>
	
	<div>判断字符串是否存在</div>
	${empty str}<br /> 
	${empty str1}<br /> 
	${empty str2}<br /> 
	${empty str3}<br /> 

在这里插入图片描述

  • 判断数组是否存在
    null或者没有长度都会返回true
	<%
		List list1 = new ArrayList<>();
		List list2 = null;
		List list3 = new ArrayList<>();
		list3.add(1);
		request.setAttribute("list1", list1);
		request.setAttribute("list2", list2);
		request.setAttribute("list3", list3);
	%>
	<hr />
	<div>判断List是否存在</div>
	${empty list1}<br /> 
	${empty list2}<br /> 
	${empty list3}<br /> 

在这里插入图片描述

  • 判断JavaBean类型的对象是否存在
    只有为null时是空的,一经创建就不为空
	<%
		User user1 = new User();
		User user2 = null;
		User user3 = new User();
		user3.setUname("钟子扬");
		request.setAttribute("user1", user1);
		request.setAttribute("user2", user2);
		request.setAttribute("user3", user3);
	%>
	<hr />
	<div>判断user是否存在</div>
	${empty user1}<br /> 
	${empty user2}<br /> 
	${empty user3}<br /> 

在这里插入图片描述

注意: 判断域对象不为空

${!empty user1}
  • 等值判断
	<%
		request.setAttribute("a", 10);
		request.setAttribute("b", 2);
		request.setAttribute("c", "aa");
		request.setAttribute("d", "dd");
	
	%>
	${ a==b}
	${ c eq "bb"}
	${ d =="dd" }
	${ a+b }
	${b/a } 等价于 ${b div a } 
	${ a+b >10 || a-b <5 }

JSTL

Java Server Pages Standard Tag Library(JSTL):JSP标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题。例如迭代一个映射或者集合、条件测试、XML处理,甚至数据库和访问数据库操作等。

  • 核心标签库( c )
    包括循环、表达式赋值、基本输入输出等
  • 格式化标签库( fmt )
    格式化显示数据。对不同区域的日期格式化

需要先下载两个jar包(1.1.2版本的就行)

  • 链接: standard

  • 链接: jstl

然后将jar拷贝到lib文件夹下
在这里插入图片描述
在这里插入图片描述
在jsp页面输入

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

接下来操作的所有标签都是域对象标签,都是对域对象标签进行操作的。

条件动作标签

if标签

  • test:做条件判断,操作的是域对象
<%
    	request.setAttribute("num", 10);
    %>

    <c:if test="${num > 0}" var="flag" scope="request">
       <h3>数值大于0</h3>
    </c:if> 
    
    ${requestScope.flag}

choose\when\otherwise标签

  • 替代else的标签
    choose when替代case
    otherwise替代default
  • choose 和otherwise标签没有属性, when标签只有一个属性
  • when标签和otherwith标签可以嵌套其他标签
	<%
	request.setAttribute("score", 80);
	%>
	<c:choose>
		<c:when test="${score > 60 && score < 80}">
			<h4>你好牛</h4>
		</c:when>
		<c:when test="${score == 60 }">
			<h4>刚及格</h4>
		</c:when>
		
		<c:when test="${score < 60 }">
			<h4>小渣渣</h4>
		</c:when>
		
		<c:otherwise>
			<h2>厉害的嘞</h2>
		</c:otherwise>
	</c:choose>

迭代标签

  • 首先,我一定要说,我们需要将和核心标签库的地址改成
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

好,现在开始说jstl中的foreach

  • 第一种:简单的通过移动步长来输出数字
    需要有var begin end step
  • 第二种:简单的遍历一个string类型的list
    需要有items(存储的是域变量) 和 var(循环的临时变量)
  • 第三种:循环javaBean中的对象(后期配合数据库使用)
    • 例如本例,先创建一个User的类
    • 在jsp页面编写java代码,通过request设置域对象
    • 使用JSTL和EL表达式进行判断输出到页面
<%@page import="entity.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ 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>
	<c:forEach var="i" begin="1" end="10" step="2">
		${i} &nbsp;
	</c:forEach>
	
	<%
		List<String> list = new ArrayList<>();
		for ( int i = 1; i <= 10; i++) {
			list.add("A:"+i);
		}
		pageContext.setAttribute("li", list);
		
	%>
	
	
	<c:forEach items="${li}" var="item">
		${item} &nbsp;
	</c:forEach>
	
	<hr/>
	<%
		List<User> userList = new ArrayList<>();
		User user1 = new User(1, "张三", "123");
		User user2 = new User(2, "李四", "345");
		User user3 = new User(3, "王五", "567");
		userList.add(user1);
		userList.add(user2);
		userList.add(user3);
		
		request.setAttribute("uLi", userList);
	%>
	
	<c:if test="${!empty li }">
		<table align="center" width="800" border="1" style="border-collapse: collapse">
			<tr>
				<th>用户编号</th>
				<th>用户名称</th>
				<th>用户密码</th>
				<th>用户操作</th>
			</tr>
			<c:forEach items="${uLi}" var="user">
				<tr  align=center>
					<td>${user.userId}</td>
					<td>${user.uname}</td>
					<td>${user.upwd}</td>
					<td><button>操作</button></td>
				</tr>
			</c:forEach>
			
		</table>
	</c:if>

	
</body>
</html>

格式化动作标签

	<%
		request.setAttribute("mydate", new Date());
	%>

	<fmt:formatDate value="${mydate }" type="date"/><br>
	<fmt:formatDate value="${mydate }" type="time"/><br>
	<fmt:formatDate value="${mydate }" type="both"/><br>
	<fmt:formatDate value="${mydate }" type="both" dateStyle="FULL"/><br>
	<fmt:formatDate value="${mydate }" type="both" pattern="yyyy-MM-dd hh:mm:ss"/><br>

在这里插入图片描述

用户登录实例

查看是否安装了mysql

win+R 输入 services.msc 看服务 

在这里插入图片描述

用户登录界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<div style="text-align: center">
	<form action="/login" method="post" id="loginForm">
		姓名:<input type="text" name="uname" id="uname"><br>
		密码:<input type="password" name="upwd" id="upwd"><br>
		<button type="button" id="loginid">登录</button><button>注册</button><br>
		<span id="msg" style="font-size:12; color: red"></span>
	</form>
</div>

<script type="text/javascript" src="js/jquery-3.7.1.js"></script>
<script type="text/javascript">
	/*
	登录表单验证
	1.给登录按钮绑定点击事件(id)
	2.获取用户姓名和密码的值
	3.判断姓名是否为空
		如果为空,提示用户(span标签赋值),并且return 
	4.判断密码是否为空
		如果为空,提示用户,并且return 
	5.如果都不为空,则手动提交表单
	*/
	$("#loginid").click(function(){
		var uname = $("#uname").val();
		var upwd = $("#upwd").val();
		
		//判断姓名是否为空
		if( isEmpty(uname)){
			$("#msg").html("用户姓名不可为空。");
			return;
		}
		
		//判断密码是否为空
		if( isEmpty(upwd)){
			$("#msg").html("用户密码不可为空。");
			return;
		}
		
		//如果都不为空,则手动提交表单
		$("#loginForm").submit();
		
		
	});
	
	function isEmpty(str) {
		if ( str == null || str.trim() == ""){
			return true;
		}
		return false;
	}	
</script>
</html>

后台实现

  • 分层思想

    • controller层
      接收请求、响应结果
      调用service层,返回结果
    • service层
      业务逻辑判断
      例如判断参数是否为空,这个数据是否存在与逻辑相关的
    • mapper层(dao层)
      接口类
      mapper.xml mybatis与数据库的相关操作
      增删改查
    • util
      工具类
      参数的非空判断,字符串的各种判断
      通用方法,通用类
    • test
      测试类/方法
    • entity(po, model)
      javaBean实体
  • 登录功能思路

    1. 接收客户端的请求(接收参数:姓名、密码)
    2. 参数的非空判断
      如果参数为空
      通过消息模型对象返回结果(设置状态、设置提示信息、回显数据)
      将消息模型对象设置到request作用域中
      请求转发到登录页面
      return
    3. 通过用户姓名查询用户对象
    4. 判断用户对象是否为空
      如果为空,通过消息模型对象返回结果(设置状态、设置提示信息、回显数据)
      将消息模型对象设置到request作用域中
      请求转发到登录页面
      return
    5. 将数据库中查询到的用户名和密码与前台传递的密码做比较
      如果不相等,通过消息模型对象返回结果(设置状态、设置提示信息、回显数据)
      将消息模型对象设置到request作用域中
      请求转发到登录页面
      return
      如果相等,表示登录成功
      将用户信息设置到session作用域中
      重定向跳转到首页
  • 各个层的任务

    • controller层(接收请求,响应结果)
    1. 接收客户端的请求(接收参数:姓名、密码)
    2. 调用service层的方法,返回消息模型对象
    3. 判断消息模型的状态码
      如果状态码是失败,将消息模型对象设置到request作用域中,请求转发到login.jsp页面
      如果状态码是成功,将消息模型对象设置到session作用域中,重定向跳转到index.jsp页面
    • service层
    1. 参数的非空判断。如果参数为空,将状态码、提示信息、回显数据设置到消息模型对象中,返回消息模型对象
    2. 调用Dao层的查询方法,通过用户名查询用户对象
    3. 判断用户对象是否为空,将状态码、提示信息、回显数据设置到消息模型对象中,返回消息模型对象
    4. 判断数据库中查询到的用户名密码与前台传递过来的密码做比较,如果不相等,将状态码、提示信息、回显数据设置到消息模型对象中,返回消息模型对象
    5. 登录成功,将成功状态、提示信息、用户对象设置到消息模型对象,并return
    • mapper层(Dao层)
      定义对应的接口,说白了就是定义对应的查询方法

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

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

相关文章

【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)

拆分大文档 很常见的一种优化手段&#xff0c;在一些特定的业务场景中&#xff0c;会有一些很大的文档&#xff0c;这些文档有很多字段&#xff0c;而且有一些特定的字段还特别的大。可以考虑拆分这些文档 大文档对MongoDB的性能影响还是很大的&#xff0c;就我个人经验而言&…

常见算法和Lambda

常见算法和Lambda 文章目录 常见算法和Lambda常见算法查找算法基本查找&#xff08;顺序查找&#xff09;二分查找/折半查找插值查找斐波那契查找分块查找扩展的分块查找&#xff08;无规律的数据&#xff09; 常见排序算法冒泡排序选择排序插入排序快速排序递归快速排序 Array…

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令行操控远程镜像、配置远程GPU解释器)

目录 windows下载安装pycharmGPU租借网站AutoDlfeaturize好易智算 GPU租借GPU选择选择镜像充值 然后创建镜像创建成功 复制SSH登录信息 远程进入镜像 在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接 将代码同步到远程镜像上设置mappings将本地…

React 省市查询组件完整代码

目录 一、地区文件 二、Antd配合使用 三、实现效果 一、地区文件 下载地址&#xff1a;全国省市区数据_JSON格式_SQL格式 export const chinaArea {0: {1: 北京,2: 天津,3: 河北省,4: 山西省,5: 内蒙古自治区,6: 辽宁省,7: 吉林省,8: 黑龙江省,9: 上海,10: 江苏省,11: 浙…

计算机出现找不到msvcp140.dll无法继续执行代码怎么办?推荐7个有效解决方法

在日常使用电脑过程中会经常遇到各式各样的问题&#xff0c;比如msvcp140.dll丢失或找不到msvcp140.dll文件是最常见的问题之一&#xff0c;那么遇到这个问题要怎么解决呢&#xff1f;msvcp140.dll到底是什么&#xff1f;为什么会出现msvcp140.dll丢失问题&#xff1f;今天给大…

原生事件监听及组件内置事件处理

监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 JavaScript。用法&#xff1a;v-on:click“handler” 或 click“handler”。 事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;事件被触发时执行的…

《QT从基础到进阶·四十三》QPlugin插件多线程问题和只有插件dll没有头文件和lib文件时调用插件中的方法

1、插件和多线程问题&#xff1a; 创建插件对象不能放到多线程执行&#xff0c;不然报错&#xff1a;ASSERT failure in QWidget: "Widgets must be created in the GUlthread. //不能放在多线程执行 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName))…

单选多选提交问卷,代码示例

&#xff45;&#xff4c;&#xff45;&#xff4d;&#xff45;&#xff4e;&#xff54;中 需要对接口返回的数据进行分析。多选问题使用checkbox&#xff0c;单选题使用radio。 多选时可以绑定&#xff4d;&#xff49;&#xff4e;&#xff0f;&#xff4d;&#xff41;&am…

Transformer前置知识:Seq2Seq模型

Seq2Seq model Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一类用于将一个序列转换为另一个序列的深度学习模型&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;如机器翻译、文本摘要、对话生成等。Seq2Seq模型由编码器&#…

搭建互联网医院实战:从源码到在线问诊APP的全流程开发

今天&#xff0c;笔者将讲述在线问诊APP的全流程开发&#xff0c;帮助开发者理解和掌握搭建互联网医院的核心技术和步骤。 一、需求分析与设计 需求分析包括明确目标用户、功能需求、性能需求等。设计阶段则包括系统架构设计、数据库设计和前后端界面设计等。 1.目标用户&…

统计是一门艺术(非参数假设检验)

1.定义 当总体分布未知&#xff0c;那么就需要一种与分布具体数学形式无关的统计推断方法&#xff0c;称为非参数方法 只能利用样本中的一般信息包括位置和次序关系等 稳健性强 2.符号检验 考虑问题&#xff1a; 小样本情况&#xff1a; 以概率为1/2的二项分布是对称的 两…

ASP.NET Core----基础学习01----HelloWorld---创建Blank空项目

文章目录 1. 创建新项目--方式一&#xff1a; blank2. 程序各文件介绍&#xff08;Project name &#xff1a;ASP.Net_Blank&#xff09;&#xff08;1&#xff09;launchSettings.json 启动方式的配置文件&#xff08;2&#xff09;appsettings.json 基础配置file参数的读取&a…

昇思25天学习打卡营第08天 | 模型训练

昇思25天学习打卡营第08天 | 模型训练 文章目录 昇思25天学习打卡营第08天 | 模型训练超参数损失函数优化器优化过程 训练与评估总结打卡 模型训练一般遵循四个步骤&#xff1a; 构建数据集定义神经网络模型定义超参数、损失函数和优化器输入数据集进行训练和评估 构建数据集和…

Git 运用小知识

1.Git添加未完善代码的解决方法 1.1 Git只是提交未推送 把未完善的代码提交到本地仓库 只需点击撤销提交&#xff0c;提交的未完善代码会被撤回 代码显示未提交状态 1.2 Git提交并推送 把未完善的代码提交并推送到远程仓库 点击【未完善提交并推送】的结点选择还原提交&#x…

前端面试题20(防抖函数)

在前端开发中&#xff0c;防抖&#xff08;debounce&#xff09;函数是一种常见的优化技术&#xff0c;用于控制函数的执行频率&#xff0c;避免在短时间内重复调用同一函数。这在处理如用户输入、窗口尺寸变化或鼠标移动等高频事件时特别有用&#xff0c;可以显著提升应用程序…

最小权顶点覆盖问题-优先队列分支限界法-C++

问题描述: 给定一个赋权无向图 G(V,E)&#xff0c;每个顶点 v∈V 都有一个权值 w(v)。如果 U⊆V&#xff0c;U⊆V&#xff0c;且对任意(u,v)∈E 有 u∈U 或 v∈U&#xff0c;就称 U 为图 G 的一个顶点覆盖。G 的最小权顶点覆盖是指 G 中所含顶点权之和最小的顶点覆盖。对于给定…

AttackGen:一款基于LLM的网络安全事件响应测试工具

关于AttackGen AttackGen是一款功能强大的网络安全事件响应测试工具&#xff0c;该工具利用了大语言模型和MITRE ATT&CK框架的强大功能&#xff0c;并且能够根据研究人员选择的威胁行为组织以及自己组织的详细信息生成定制化的事件响应场景。 功能介绍 1、根据所选的威胁行…

springboot项目多模块工程==1搭建

1、新建父工程 采用springboot工程作为父工程搭建方便依赖选择&#xff0c;在这个基础上进行maven的pom父子模块结构调整。该工程选择mave进行依赖管理 2、springboot 版本及相关依赖选择 3、删除工程目录src,并修改pom 由于该父工程只作为依赖的统一管理&#xff0c;因此将…

Python实战训练(方程与拟合曲线)

1.方程 求e^x-派&#xff08;3.14&#xff09;的解 用二分法来求解&#xff0c;先简单算出解所在的区间&#xff0c;然后用迭代法求逼近解&#xff0c;一般不能得到精准的解&#xff0c;所以设置一个能满足自己进度的标准来判断解是否满足 这里打印出解x0是因为在递归过程中…