You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text1/web/WEB-INF/student/studentAddPhoto.jsp

172 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 以上两行是JSP页面的指令
第一行用于设置该JSP页面的内容类型为text/html即HTML格式页面指定字符编码为UTF-8同时表明该页面使用Java语言来处理页面相关逻辑。
第二行引入了JSTLJavaServer Pages Standard Tag Library核心标签库定义前缀为“c”后续可通过这个前缀使用JSTL提供的各类标签比如用于循环遍历、条件判断等操作的标签方便在JSP页面中处理动态数据 -->
<html>
<head>
<title>个人信息</title>
<!-- 设置当前HTML页面的标题为“个人信息”该标题会显示在浏览器的标题栏让用户知晓此页面主要与个人信息相关 -->
<link rel="stylesheet" href="./css/layui.css">
<!-- 引入layui框架的样式表文件通过相对路径从当前页面所在目录下的css文件夹中查找应用layui框架提供的样式用于页面布局、组件美化等操作使页面呈现layui框架定义的外观风格 -->
<link rel="stylesheet" href="./css/style.css">
<!-- 引入自定义的样式表文件style.css同样采用相对路径引用用于添加符合特定需求的个性化页面样式对页面显示效果做进一步定制 -->
<link rel="stylesheet" href="./css/file.css">
<!-- 引入名为file.css的样式表文件同样通过相对路径可能专门用于此页面中与文件相关元素的样式设置比如文件选择、上传等部分的样式 -->
<script src="./layui.js"></script>
<!-- 引入layui框架的JavaScript脚本文件从当前页面所在目录获取该文件假设layui.js与当前页面处于同一级目录layui脚本为页面提供众多交互功能以及各种组件支持例如实现菜单交互、页面元素动态展示等功能 -->
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<!-- 从CDN内容分发网络引入jQuery库的最小化版本jQuery是常用的JavaScript库能简化页面中对DOM元素的操作、事件处理以及实现各种动画效果等方便开发人员编写JavaScript代码来实现页面交互逻辑 -->
</head>
<body class="layui-layout-body" style="background-color: #F2F2F2">
<!-- 为页面主体body设置类名“layui-layout-body”同时将背景颜色设定为浅灰色#F2F2F2这里的类名通常与layui框架的布局样式相关联按照其框架规范来构建页面整体外观 -->
<jsp:include page="/filterLogin.jsp"></jsp:include>
<!-- 通过JSP的include指令包含名为filterLogin.jsp的页面内容通常这个页面用于处理用户登录相关的验证逻辑或者展示登录相关的界面元素比如登录表单等以此保证只有登录后的用户可访问后续页面内容 -->
<jsp:include page="/WEB-INF/student/sHeader.jsp"></jsp:include>
<!-- 包含位于WEB-INF/student目录下的sHeader.jsp页面一般用于构建页面的头部区域可能包含网站logo、导航栏等常见的头部元素起到统一页面头部布局的作用 -->
<jsp:include page="/WEB-INF/student/studentNav.jsp"></jsp:include>
<!-- 再次使用JSP的include指令包含WEB-INF/student目录下的studentNav.jsp页面通常用来展示学生端特有的导航菜单内容便于用户在不同功能模块间进行切换操作 -->
<div class="layui-layout layui-layout-admin">
<!-- 创建一个div元素并赋予其两个类名“layui-layout”和“layui-layout-admin”这一般是layui框架中用于定义页面整体布局结构的特定类名遵循layui框架的布局规范来划分页面不同区域比如头部、主体、侧边栏等具体根据框架设定 -->
<div class="layui-body">
<!-- 在上述布局div内部再创建一个div元素类名为“layui-body”在layui框架里该区域通常用于承载页面的主要内容例如展示各类业务数据、操作按钮等 -->
<!-- 内容主体区域 -->
<div style="padding: 15px;">
<!-- 新建一个div元素并通过内联样式设置其四周内边距为15px主要用于对内部元素进行排版让页面内容看起来更规整避免显得过于紧凑或松散 -->
<span class="layui-breadcrumb">
<a href="">学生端</a>
<a><cite>修改头像</cite></a>
</span>
<!-- 创建一个layui框架提供的面包屑导航组件通过一系列超链接a标签展示当前页面在整个系统中的层级路径这里展示了从“学生端”进入到当前的“修改头像”页面但超链接的href属性为空可能后续需完善具体跳转地址以实现页面导航功能 -->
<p style="text-align: center;">
<!-- 创建一个段落p元素并通过内联样式设置文本居中对齐用于包裹下面的元素使其整体在页面中居中显示 -->
<img id="sphoto" src="${pageContext.request.contextPath}/showPhotoServlet" style="border: solid #009688;padding: 10px;margin: 20px;text-align: center;width: 100px;">
<!-- 创建一个图片img元素设置了id为“sphoto”方便后续通过JavaScript操作该元素图片的src属性指向名为“showPhotoServlet”的Servlet通过EL表达式动态获取上下文路径拼接而成可能用于获取并显示当前用户的头像图片同时通过内联样式设置图片的边框样式solid #009688表示实线边框颜色为特定的绿色、内边距为10px、外边距为20px、文本对齐方式为居中以及宽度为100px使其在页面中有合适的显示效果 -->
</p>
<p style="text-align: center;">
<span id="filename"></span>
<span id="filesize"></span>
<!-- 创建一个段落元素,文本居中对齐,内部包含两个空的<span>元素分别设置了id为“filename”和“filesize”后续会通过JavaScript代码往这两个元素中填充选择文件的名称和大小信息 -->
</p>
<form name="formf" method="post" enctype="multipart/form-data" style="text-align: center;">
<!-- 创建一个表单form元素设置其名称为“formf”提交方法为POST设置enctype属性为“multipart/form-data”这是用于实现文件上传功能的必要设置表明表单数据包含文件类型的数据通过内联样式设置文本居中对齐此表单用于用户选择要上传的头像文件并进行提交操作 -->
<a href="javascript:;" class="file">选择文件
<input id="selectfiles" accept="image/jpeg,image/gif" type="file" name="myfile">
<!-- 创建一个超链接a标签设置href属性为“javascript:;”使其点击时不进行实际的页面跳转应用了“file”类名可能对应特定样式内部包含一个文件选择输入框input类型为file设置了id为“selectfiles”方便后续操作通过accept属性限制可选择的文件类型为JPEG图像和GIF图像设置名称为“myfile”用于在表单提交时传递文件数据 -->
</a>
<a href="javascript:;" class="file" type="submit">开始上传
<input type="submit" id="postfiles" value="upload">
<!-- 创建另一个超链接同样href属性设置为“javascript:;”应用“file”类名且设置类型为“submit”虽然这里在超链接上设置提交类型不太规范实际起提交作用的是内部的input按钮内部包含一个提交按钮input类型为submit设置了id为“postfiles”按钮文本为“upload”点击这个按钮会触发表单的提交操作将选择的文件发送到服务器端 -->
</a>
</form>
<p style="text-align: center;">
<span id="msg">${update_msg}</span>
<!-- 创建一个段落元素,文本居中对齐,内部包含一个<span>元素设置了id为“msg”通过EL表达式显示名为“update_msg”的变量的值可能用于在页面上显示一些与头像更新操作相关的提示信息比如上传成功或失败的消息等 -->
</p>
<jsp:include page="/footer.jsp"></jsp:include>
<!-- 包含名为footer.jsp的页面一般用于展示页面底部的一些通用信息比如版权声明、网站相关链接、联系方式等内容 -->
</div>
</div>
</div>
<script>
//JavaScript代码区域
layui.use('element', function(){
var element = layui.element;
element.init();
// 使用layui框架的element模块调用其init方法进行初始化操作。在layui框架中element模块提供了很多页面元素交互相关的功能例如实现页面布局的动态切换、菜单的展开收起等交互效果通过调用init方法可激活这些功能确保页面上基于element模块构建的各种UI组件能正常工作
});
</script>
<script>
//Demo
layui.use('form', function(){
// 使用layui框架的form模块后续可以在这个回调函数内部编写与表单相关的交互逻辑代码不过目前这里没有具体内容可能是预留的用于进一步开发表单验证、提交等相关功能的地方
});
</script>
<script>
$('#selectfiles').change(function(e){
// 为id为“selectfiles”的元素即文件选择输入框绑定“change”事件当用户选择了新的文件时会触发此函数执行相应操作
// console.log($(this).val());//val()获取到的是完整的文件路径值C:\fakepath\js-dom.png
// 这行代码是用于在控制台打印出选择文件的完整路径值目前被注释掉了在实际调试时可查看用户选择的文件路径情况但由于浏览器的安全限制通常获取到的路径是类似“C:\fakepath\...”这样的假路径,实际应用中不能依赖这个路径做后续操作
//前端替换图片
var fileObj = document.getElementById("selectfiles").files[0];
// 通过DOM方法获取到用户选择的文件对象files属性返回一个文件列表这里取第一个文件因为一次只能选择一个文件假设此处只处理单个文件上传情况
var filepath = window.URL.createObjectURL(fileObj);
// 使用浏览器的URL对象的createObjectURL方法根据文件对象创建一个临时的URL用于在页面上展示该文件比如图片文件可以直接显示
$('#sphoto').attr('src',filepath);
// 使用jQuery选择器选中id为“sphoto”的图片元素并通过attr方法将其src属性设置为上面创建的临时URL实现用户选择文件后在页面上即时预览图片的效果
$('#news').text("");
// 这里试图清空id为“news”的元素的文本内容但代码中未看到该元素的定义可能是遗留的多余代码或者后续计划添加的元素相关操作
var fileMsg = e.currentTarget.files;
// 获取当前触发事件的目标元素即文件选择框的文件列表和上面获取文件对象的方式类似但这里是通过事件对象的currentTarget属性来获取结果是一样的都是获取用户选择的文件信息
var fileName = fileMsg[0].name;
// 从文件列表中获取第一个文件(也就是用户选择的文件)的文件名,用于后续显示文件名信息
var fileSize = fileMsg[0].size;
// 获取文件的大小(单位为字节),同样用于后续展示文件大小相关信息
var fileType = fileMsg[0].type;
// 获取文件的类型例如image/jpeg等不过在代码中暂时未看到对文件类型做进一步处理可能仅用于判断是否符合要求前面在文件选择框设置了可接受的文件类型
$('#filename').text(fileName);
// 使用jQuery选择器选中id为“filename”的<span>元素并通过text方法将其文本内容设置为获取到的文件名实现文件名在页面上的显示
$('#filesize').text('('+getfilesize(fileSize)+')');
// 选中id为“filesize”的<span>元素将其文本内容设置为调用getfilesize函数处理文件大小后的结果会根据文件大小转换为合适的单位并显示如KB、MB等括号用于让显示格式更清晰
$('#msg').text('');
// 清空id为“msg”的<span>元素的文本内容,可能是为了清除之前显示的提示信息,准备显示新的相关提示
function getfilesize(size) {
if (!size)
return "";
// 如果传入的文件大小参数为0或者未定义即!size为真则直接返回空字符串表示不显示文件大小信息
var num = 1024.00; //byte
// 定义一个常量表示字节与其他单位换算时的基数这里以1024字节为1KB进行单位换算
if (size < num)
return size + "B";
// 如果文件大小小于1024字节直接返回文件大小数值加上单位“B”表示字节例如文件大小为500字节就显示“500B”
if (size < Math.pow(num, 2))
return (size / num).toFixed(2) + "K"; //kb
// 如果文件大小小于1024 * 1024字节即1MB将文件大小除以1024并保留两位小数然后加上单位“K”表示KB例如文件大小为2048字节就显示“2.00K”
if (size < Math.pow(num, 3))
return (size / Math.pow(num, 2)).toFixed(2) + "M"; //M
// 如果文件大小小于1024 * 1024 * 1024字节即1GB将文件大小除以1024的平方即换算为MB并保留两位小数加上单位“M”表示MB例如文件大小为2097152字节就显示“2.00M”
if (size < Math.pow(num, 4))
return (size / Math.pow(num, 3)).toFixed(2) + "G"; //G
// 如果文件大小小于1024 * 1024 * 1024 * 1024字节即1TB将文件大小除以1024的立方即换算为GB并保留两位小数加上单位“G”表示GB
return (size / Math.pow(num, 4)).toFixed(2) + "T"; //T
// 如果文件大小大于等于1TB将文件大小除以1024的四次方即换算为TB并保留两位小数加上单位“T”表示TB
}
});
$('#postfiles').click(function(){
// 为id为“postfiles”的元素即提交按钮绑定“click”事件当点击该按钮时执行以下操作
var fileInput = $('#selectfiles').get(0).files[0];
// 通过jQuery选择器获取id为“selectfiles”的文件选择框元素再通过DOM方法获取其第一个文件对象和前面获取文件对象的方式类似目的是获取用户选择的文件信息
if (fileInput == null) {
alert("请先选择文件!");
return;
// 如果获取到的文件对象为空即用户没有选择文件就点击了提交按钮则弹出一个提示框提醒用户先选择文件并通过return语句终止后续代码的执行避免表单提交无效的数据
} else {
document.formf.action="${pageContext.request.contextPath}/uploadImageServlet";
// 如果用户已经选择了文件就设置名为“formf”的表单的action属性将表单提交的目标地址设置为名为“uploadImageServlet”的Servlet通过EL表达式动态获取上下文路径拼接而成以便将用户选择的文件发送到服务器端进行头像上传处理
}
});
</script>
</body>
</html>