【暑假答辩】Spring+SpringMVC+MyBatis 答辩展示招新网站

news/2024/5/19 2:06:34/文章来源:https://blog.csdn.net/qq_45690441/article/details/109138729

【暑假答辩】Spring+SpringMVC+MyBatis 答辩展示招新网站

    • 功能需求
    • 页面
    • 后台部分细节
      • 一、 调用云API(短信服务的JAVA程序+相关类)
      • 二、 AJAX+表单验证
        • (一)JS实现,AJAX主要是于后台Kaptcha插件生成的验证码交互
        • (二)AJAX实现实时成绩修改功能(直接双击成绩栏即可修改成绩)
      • 三、验证码配置项及相关代码(基于谷歌Kaptcha插件实现)
      • 四、前端部分细节 Echarts实现图表
    • 总结

功能需求

  • 前端界面简洁美观
  • 采集报名信息的表单验证
  • 能够查询出笔试的成绩及录取结果
  • 能录入招新笔试成绩
  • 能够分组导出excel信息表
  • 后台报名信息的增删改查
  • 图表显示两个组的报名情况(人数,专业,男女比例)
  • 调用云短信API统一发送通知短信

页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后台部分细节

一、 调用云API(短信服务的JAVA程序+相关类)

public class MsgServiceImpl implements MsgService {@Autowiredprivate MsgMapper msgMapper;public void setMsgMapper(MsgMapper msgMapper) {this.msgMapper = msgMapper;}public Msg find(){return msgMapper.findAllMsg();}public void upDateMsg(Msg msg){msgMapper.upDateMsg(msg);}public static void main(String[] args) {String host = "云API地址";String path = "/sms/send";String method = "POST";String appcode = "阿里云code";Map<String, String> headers = new HashMap<String, String>();//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105headers.put("Authorization", "APPCODE " + appcode);Map<String, String> querys = new HashMap<String, String>();querys.put("receive", "接电话手机号");querys.put("tag", "根据实际模板空白处的短信内容");querys.put("templateId", "模板号");Map<String, String> bodys = new HashMap<String, String>();try {HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);System.out.println(response.toString());} catch (Exception e) {e.printStackTrace();}}
}
    public static HttpResponse doGet(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpGet request = new HttpGet(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,Map<String, String> bodys)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (bodys != null) {List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();for (String key : bodys.keySet()) {nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));}UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(formEntity);}return httpClient.execute(request);}public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);} public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}public static HttpResponse doDelete(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpDelete request = new HttpDelete(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {StringBuilder sbUrl = new StringBuilder();sbUrl.append(host);if (!StringUtils.isBlank(path)) {sbUrl.append(path);}if (null != querys) {StringBuilder sbQuery = new StringBuilder();for (Map.Entry<String, String> query : querys.entrySet()) {if (0 < sbQuery.length()) {sbQuery.append("&");}if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {sbQuery.append(query.getValue());}if (!StringUtils.isBlank(query.getKey())) {sbQuery.append(query.getKey());if (!StringUtils.isBlank(query.getValue())) {sbQuery.append("=");sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));}}}if (0 < sbQuery.length()) {sbUrl.append("?").append(sbQuery);}}return sbUrl.toString();}private static HttpClient wrapClient(String host) {HttpClient httpClient = new DefaultHttpClient();if (host.startsWith("https://")) {sslClient(httpClient);}return httpClient;}private static void sslClient(HttpClient httpClient) {try {SSLContext ctx = SSLContext.getInstance("TLS");X509TrustManager tm = new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] xcs, String str) {}public void checkServerTrusted(X509Certificate[] xcs, String str) {}};ctx.init(null, new TrustManager[] { tm }, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx);ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);ClientConnectionManager ccm = httpClient.getConnectionManager();SchemeRegistry registry = ccm.getSchemeRegistry();registry.register(new Scheme("https", 443, ssf));} catch (KeyManagementException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}}
}

ps:这段是直接从调用API的公司copy下来的(示例demo)
经过测试可以发送测试短信,但没有合适的账户发送通知短信

二、 AJAX+表单验证

(一)JS实现,AJAX主要是于后台Kaptcha插件生成的验证码交互

var c=c1=c2=c3=c4=c5=c6=c7=c8=false;
function check1(){var name=document.getElementById("name");var wa=document.getElementById("confi1");var na=/^[\u4e00-\u9fa5]{2,8}$/;if(name.value==""){wa.innerText="姓名不能为空";c1=false;}else if(!na.test(name.value)){wa.innerText="这不是一个有效的姓名";c1=false;}else{wa.innerText="";c1=true;}
}function check6(){alert("请检查信息");var name=document.getElementById("username");var wa=document.getElementById("confi6");var na=/^[a-zA-Z0-9_-]{4,16}$/;if(name.value==""){wa.innerText="用户名不能为空";c6=false;}else if(!na.test(name.value)){wa.innerText="4到16位(字母,数字,下划线,减号)";c6=false;}else{var xhr = new XMLHttpRequest()xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var data= xhr.responseText;if(data=="1"){wa.innerText="用户名可用";c6=true;}else{wa.innerText="用户名不可用";c6=false;}}}//4.发送请求/*var xmlhttp;if (window.XMLHttpRequest){//  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码xmlhttp=new XMLHttpRequest();}else{// IE6, IE5 浏览器执行代码xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){wa.innerText=xmlhttp.responseText;}}xmlhttp.open("GET","${pageContext.request.contextPath}/check",true);xmlhttp.send();wa.innerText="";c6=true;*/var url="register/check?username=";url=url+name.value;xhr.open('POST',url,true);// 使用表单的方式 POST 数据xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.send("username="+name.value);}alert("请检查信息");}function check2(){var num=document.getElementById("num");var wa=document.getElementById("confi2");var na=/^20([1-2]{1})+(([8-9]{1})|0)+([0-9]{4})+((0[1-9])|([1-9][0-9]))$/;/*01-99 中间四个数字不知道有什么要求没。*/if(num.value==""){wa.innerText="学号不能为空";c2=false;}else if(!na.test(num.value)){wa.innerText="这不是一个有效的学号";c2=false;}else{wa.innerText="";c2=true;}}function check3(){var num=document.getElementById("nu");var wa=document.getElementById("confi3");var na=/^[1-9][0-9]{4,9}$/;if(num.value==""){wa.innerText="QQ不能为空";c3=false;}else if(!na.test(num.value)){wa.innerText="这不是一个有效的QQ";c3=false;}else{wa.innerText="";c3=true;}}function check4(){var num=document.getElementById("phone");var wa=document.getElementById("confi4");var na=/^1([358][0-9]|4[579]|66|9[89])[0-9]{8}$/;if(num.value==""){wa.innerText="号码不能为空";c4=false;}else if(!na.test(num.value)){wa.innerText="这不是一个有效的号码";c4=false;}else{wa.innerText="";c4=true;}}function check5(){var name=document.getElementById("nam");var wa=document.getElementById("confi9");var na=/^[\u4e00-\u9fa5]{2,11}$/;if(name.value==""){wa.innerText="专业不能为空";c5=false;}else if(!na.test(name.value)){wa.innerText="这不是一个有效的专业";c5=false;}else{wa.innerText="";c5=true;}}function check7(){var name=document.getElementById("pass");var name1=document.getElementById("password");var wa=document.getElementById("confi7");if(name.value==""){wa.innerText="请再次填写密码";c7=false;}else if(name.value!=name1.value){wa.innerText="两次密码不一致";c7=false;}else{wa.innerText="";c7=true;}}function check8(){var name=document.getElementById("password");var wa=document.getElementById("confi8");var na=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;var name1=document.getElementById("pass");if(name1.value!=""){check7();}if(name.value==""){wa.innerText="请设置密码";c8=false;}else if(!na.test(name.value)){wa.innerText="密码至少包含 数字和英文,长度6-20";c8=false;}else{wa.innerText="";c8=true;}}function bt(){check6();if(c1&&c2&&c3&&c4&&c5&&c6&&c7&&c8){alert("报名成功");return true;}else{alert("请检查信息");return false;}
}
function checkImg() {var img=document.getElementById("imgObj");img.src=Ctime(img.src);
}
function Ctime(url) {var t=document.getElementById("timestamp");var timestamp = (new Date()).valueOf();url="captcha/getCaptchaImage.do?="+timestamp;t.value=timestamp;return url;
}
function checkCode() {var key=document.getElementById("code");var test=document.getElementById("timestamp");var wa=document.getElementById("waring");var xhr = new XMLHttpRequest();xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var data= xhr.responseText;if(data=="1"){wa.innerText="验证成功";c=true;}else{wa.innerText="验证失败,请重新输入验证码";checkImg();c=false;}}}var url="captcha/checkCaptcha.do?timestamp="+test.value+"&code="+key.value;xhr.open('POST',url,true);// 使用表单的方式 POST 数据xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.send("timestamp="+test.value+"&code="+key.value);}

(二)AJAX实现实时成绩修改功能(直接双击成绩栏即可修改成绩)

function ChangeTest(key) {var test=document.getElementById(key);var wa=document.getElementById(key+"!");var xhr = new XMLHttpRequest();xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var data= xhr.responseText;if(data=="1"){wa.innerText="修改成功";c6=true;}else{wa.innerText="修改失败";c6=false;}}}var url="ChangeTest?id=";url=url+key+"&test=";url=url+test.value;xhr.open('POST',url,true);// 使用表单的方式 POST 数据xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.send("id="+key+"&test="+test.value);}

三、验证码配置项及相关代码(基于谷歌Kaptcha插件实现)

Spring-service.xml

  <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"><property name="config"><bean class="com.google.code.kaptcha.util.Config"><constructor-arg><props><prop key="kaptcha.border">no</prop><prop key="kaptcha.border.color">105,179,90</prop><prop key="kaptcha.textproducer.font.color">red</prop><prop key="kaptcha.image.width">100</prop><prop key="kaptcha.textproducer.font.size">30</prop><prop key="kaptcha.image.height">40</prop><prop key="kaptcha.session.key">code</prop><prop key="kaptcha.textproducer.char.length">4</prop><prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop></props></constructor-arg></bean></property></bean>
<servlet><servlet-name>Kaptcha</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class><!-- 是否有边框 --><init-param><param-name>kaptcha.border</param-name><param-value>no</param-value></init-param><!-- 字体颜色 --><init-param><param-name>kaptcha.textproducer.font.color</param-name><param-value>red</param-value></init-param><!-- 图片宽度 --><init-param><param-name>kaptcha.image.width</param-name><param-value>135</param-value></init-param><!-- 使用哪些字符生成验证码 --><init-param><param-name>kaptcha.textproducer.char.string</param-name><param-value>ACDEFHKPRSTWX345679</param-value></init-param><!-- 图片高度 --><init-param><param-name>kaptcha.image.height</param-name><param-value>50</param-value></init-param><!-- 字体大小 --><init-param><param-name>kaptcha.textproducer.font.size</param-name><param-value>43</param-value></init-param><!-- 干扰线的颜色 --><init-param><param-name>kaptcha.noise.color</param-name><param-value>black</param-value></init-param><!-- 字符个数 --><init-param><param-name>kaptcha.textproducer.char.length</param-name><param-value>4</param-value></init-param><!-- 字体 --><init-param><param-name>kaptcha.textproducer.font.names</param-name><param-value>Arial</param-value></init-param></servlet><servlet-mapping><servlet-name>Kaptcha</servlet-name><url-pattern>/Kaptcha</url-pattern></servlet-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

@Controller
@RequestMapping("/")
public class CaptchaImageCreateController {private Producer captchaProducer = null;@Autowiredpublic void setCaptchaProducer(Producer captchaProducer) {this.captchaProducer = captchaProducer;}@RequestMapping("/captcha-image")public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {response.setDateHeader("Expires", 0);// Set standard HTTP/1.1 no-cache headers.response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");// Set IE extended HTTP/1.1 no-cache headers (use addHeader).response.addHeader("Cache-Control", "post-check=0, pre-check=0");// Set standard HTTP/1.0 no-cache header.response.setHeader("Pragma", "no-cache");// return a jpegresponse.setContentType("image/jpeg");// create the text for the imageString capText = captchaProducer.createText();// store the text in the sessionrequest.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);// create the image with the textBufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();// write the data outImageIO.write(bi, "jpg", out);try {out.flush();} finally {out.close();}return null;}}

timestamp是指时间戳,避免因为图片缓存而引起后台验证码与前端图片不符

@Controller
@RequestMapping(value = "/captcha")
public class CaptchaController {private static final Log log = LogFactory.getLog(CaptchaController.class);@Autowiredprivate Producer captchaProducer;@RequestMapping(value = "/getCaptcha.do", method = RequestMethod.GET)public String getCaptcha(Model model) {model.addAttribute("timestamp", System.currentTimeMillis());return "captcha";}@RequestMapping(value = "/getCaptchaImage.do", method = RequestMethod.GET)public ModelAndView getCaptchaImage(Model model,HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "timestamp", required = false) String timestamp) throws IOException {if (StringUtils.isEmpty(timestamp)) {model.addAttribute("timestamp", System.currentTimeMillis());} else {model.addAttribute("timestamp", timestamp);}System.out.println("!!");response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");response.setContentType("image/jpeg");String capText = captchaProducer.createText();request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);System.out.println(capText);BufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();ImageIO.write(bi, "jpg", out);try {out.flush();} finally {out.close();}return null;}@RequestMapping(value = "/checkCaptcha.do")@ResponseBodypublic void checkCaptcha(@RequestParam(value = "timestamp", required = false) String timestamp, @RequestParam(value = "code", required = false) String code,HttpServletRequest request ,HttpServletResponse response) throws IOException {boolean returnStr = false;String original =(String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);code=request.getParameter("code");System.out.println("!"+timestamp);System.out.println(code+"@");System.out.println(original+"!");String data="0";if (code.equals(original)) {data="1";}elsedata="0";System.out.println(data);response.getWriter().write(data);}
}

四、前端部分细节 Echarts实现图表

<script type="text/javascript ">var myChart = echarts.init(document.getElementById('pid-div'));option = {title: {text: '智能组各专业报名人数统计表',left: 'center',textStyle: {fontSize: 25}},tooltip: {trigger: 'item',formatter: '{a} <br/>{b} : {c} ({d}%)',textStyle: {fontSize: 15}},legend: {textStyle: {fontSize: 15},type: 'scroll',orient: 'vertical',right: 75,top: 250,bottom: 20,data: this.legend,},series: [{label: {textStyle: {fontSize: 15}},name: '专业',type: 'pie',radius: '55%',center: ['40%', '50%'],data: [{name: "数字媒体技术",value: "10"}, {name: "计算机科学与技术",value: "50"}, {name: "物联网工程",value: "10"}, {name: "电子信息科学与技术",value: "40"}, {name: "通信工程",value: "30"}, {name: "电子信息工程",value: "10"}, {name: "其他",value: "40"}],emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};myChart.setOption(option);myChart.showLoading();myChart.hideLoading(); // 隐藏加载动画$.ajax({type:"POST",url:'${pageContext.request.contextPath}/manage/queryForListIntelMajor',contentType:"application/json;charset=utf-8",success:function (result,status) {var content=JSON.parse(JSON.stringify(result));if(content.name==200){myChart.setOption({series: [{data: [{name: "数字媒体技术",value: content.number[0]},{name: "物联网工程",value: content.number[1]},{name: "计算机科学与技术",value: content.number[2]},{name: "电子信息科学与技术",value: content.number[3]},{name: "通信工程",value: content.number[4]},{name: "电子信息工程",value: content.number[5]},{name: "其他",value: content.number[6]},],}]})}}})
</script>

总结

1.前端页面还有比较大的改动空间,报错不够美观,后续还会更新
2.暂未部署到服务器上(业务不熟练)
3.学习到了搭建网站的流程,了解了工厂模式的实现方法
4.学习到了搭建网站N多插件的使用方法

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用dot.tk和Sina SAE服务免费搭建自己的网站

原文&#xff1a;http://blog.csdn.net/tmaic/article/details/7724624 学习完了前端开发课程(HTML,CSS,JavaScript)或者自己开发了一个互联网项目&#xff0c;总是想把自己的作品放到互联网上让自己的亲朋好友去膜拜下。那么这个时候就需要将作品发布到互联网中&#xff0c;大…

web网站高并发解决办法

声明&#xff1a;这是我看过的最好的关于高并发文章的讲解&#xff0c;本人这里也是引用他人的文章。 先附送这位尊敬的作者的好文章连接&#xff1a;https://www.cnblogs.com/elivn/p/9144353.html 以下是我的抄录&#xff1a; 1. 什么是高并发? 高并发&#xff08;High C…

爬取网站的数据,对返回为json格式的利用json模块进行处理以及json的常用方法

Json数据: JavaScript Object Notation, 一种轻量型数据交换格式&#xff0c; 便于阅读和交换数据.数据的返回是一个json格式 from urllib.request import urlopenurl "http://ip-api.com/json/110.84.0.129" urlObj urlopen(url)# 服务端返回的页面信息, 此处为字…

某招聘网站“数据分析”相关岗位招聘信息爬取并分析

确定目标 简单分析数据分析相关岗位的薪酬状况及技能要求&#xff1b;尝试数据分析从数据获取到数据分析报告撰写的整个数据分析流程&#xff0c;学习爬虫、数据清洗、数据分析相关技巧。 数据获取 获取的岗位数据来源于某招聘网站&#xff0c;采取爬虫的方式获取,岗位搜索…

【网站流量分析】某网站网站流量分析报告(CNZZ统计)

某网站流量分析报告 1思维导图2流量分析2.1趋势分析2.2对比分析2.3当前在线 3来源分析3.1来源分类3.2搜索引擎3.3搜索词3.4受访界面 4访客分析4.1区域分布4.2运营商4.3终端4.4新老访客4.5忠诚度4.6活跃度4.7用户结构 5结论与建议5.1结论5.2建议 1思维导图 2流量分析 2.1趋势分…

大流量网站的底层系统架构

动态应用&#xff0c;是相对于网站静态内容而言&#xff0c; 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用…

某网站电商运营数据分析案例

PHPStat是目前国内最专业的电子商务数据分析运营平台&#xff0c;专注为电子商务企业提供网站访客转化行为、订单分析、商品分析、页面转化分析、营销转化分析的整体优化解决方案。目前PHPStat已经成功为苏宁易购、湖南卫视快乐购、天天网、某网站、鸿星尔克、高鸿商城、以纯旗…

MySQL在大型网站的应用架构演变

MySQL在大型网站的应用架构演变 【编者按】作为最流行的开源数据库&#xff0c;MySQL被广泛应用在Web应用程序以及其它中小型项目上。然而不可忽视的是&#xff0c;在许多大型IT公司中&#xff0c;MySQL在高度优化和定制化后&#xff0c;已逐渐偏离了原有的开源版本&#xff0c…

大型网站技术架构探讨

&#xfeff;&#xfeff; 目录&#xff1a; 1、大型网站架构的目标与挑战 2、网站架构演变及其技术脉络 3、架构设计理论与原则 何为“大型”网站&#xff1f; 没有统一的判断标准&#xff0c;流量大小是一个重要指标&#xff08;日均流量至少IP>1,000,000才算大型网站&…

如何构建高扩展性网站?

&#xfeff;&#xfeff; 阅读目录 主要内容 化简方程 分布工作 横向扩展设计 使用正确的工具 不要做重复的工作 积极利用缓存 从错误中吸取教训 数据库原则 容错设计与故障控制 避免或分发状态 异步通信和消息总线 其他原则 参考 主要内容 本书从多个方面围绕高…

精选31个网站界面设计实践教程

设计一个网站从来都不是一件容易的事。如果你去询问一位在该行业有丰富经验的网页设计师&#xff0c;他会告诉你以前根本没有太多关于Web设计/开发的资源、文章和各种沟通交流平台&#xff0c;更不用说高质量免费教程了。 如果您打算建立自己的个人网站或者重新设计您的博客的主…

10个提高网站可用性的实用技巧

不论是企业网站、个人博客&#xff0c;或者购物网站、游戏网站&#xff0c;我们都希望能吸引访问者并且给他们留下愉快的访问体验。 可用性是用户体验的一种度量&#xff0c;它可以用访问者完成网站功能的方便程度来描述——无论是通过自身知识还是通过学习新方式来完成这种功能…

基于ASP.NET的网站发布、打包和安装

安装配置环境&#xff1a; 操作系统&#xff1a;Win7旗舰版 Visual Studio版本&#xff1a;VS2010 一、在发布、打包和安装网站之前&#xff0c;首先需要安装配置IIS。Win7默认已安装IIS。 1、打开IIS管理器功能。 打开控制面板-->程序->打开或关闭Windows功能 2、打…

ASP.NET网站发布中的错误类型

错误类型1&#xff1a; 解决方法&#xff1a;删除配置文件web.config里面的 <authentication mode"Windows" />行。 错误类型2&#xff1a; 分析&#xff1a;.Net Framework的版本不对应&#xff0c;要求Framework版本为4.0。 解决方法&#xff1a; 1、安装4.…

fastjson反序列化方法JSON.parseObject(String str,ClassT clazz)

fastjson这一工具包帮助我们进行java对象和json格式的字符串之间的相互转换。对象到字符串的过程&#xff0c;我们称之为序列化&#xff1b;反之&#xff0c;我们称为反序列化。 现在我们就来谈谈fastjson提供的反序列化方法&#xff0c;本篇只讨论按照指定的字节码返回相应对…

视频网站套上CDN是什么效果?

1、什么是CDN加速&#xff1f; 内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是在现有 Internet 中增加的一层新的网络架构&#xff0c;由遍布全国的高性能加速节点构成。这些高性能的服务节点都会按照一定的缓存策略存储您的业务内容&#xff0c…

CMU-CSAPP-深入理解计算机系统-P1-courseoverview

首先让我们看一个实例 原因是数据是如何在内存中布局。C不会进行边界检查&#xff0c;容易崩溃 这两种程序功能是一样的 但是他们的时间完全不一样

1001、单机安装基于LNMP结构的WordPress网站、web与数据库服务分离

project 第1部分 文章目录 project 第1部分project1 整体架构一、单机安装基于LNMP&#xff08;Linux Nginx Mysql PHP&#xff09;结构的WordPress网站1、 基本环境准备2、配置nginx3、配置数据库服务器4、部署wordpress 二、web与数据库服务分离准备数据库服务器自由扩展&…

阿里云——手把手教你搭建个人网站

言归正传&#xff0c;阿里算是做云服务最早的一批了&#xff0c;当时的其他几家有名气的现在基本都死了&#xff0c;只有阿里这支部队熬过来了&#xff0c;就我了解的几家云商做个简单的介绍&#xff1a; 青云&#xff1a;有情怀有理想&#xff0c;不过短板也很明显&#xff0c…

Servlet+JSP+MySQL社交网站

在网站架构上&#xff0c;采用MVC设计模式&#xff0c;实现将网站的页面显示与业务逻辑分离&#xff0c;使其各司其职&#xff1b;在数据库操作上&#xff0c;利用DAO模式&#xff08;Data Access Object数据存取对象&#xff09;技术&#xff0c;将程序中的类对象映射成为数据…