<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>建站 on Xiangtao's log</title><link>https://www.xiaoxiangtao.cn/zh/tags/%E5%BB%BA%E7%AB%99/</link><description>Recent content in 建站 on Xiangtao's log</description><generator>Hugo</generator><language>zh-Hans</language><managingEditor>15989119660@163.com (Xiangtao XIAO)</managingEditor><webMaster>15989119660@163.com (Xiangtao XIAO)</webMaster><lastBuildDate>Wed, 28 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.xiaoxiangtao.cn/zh/tags/%E5%BB%BA%E7%AB%99/feed.xml" rel="self" type="application/rss+xml"/><item><title>初步体验：用扣子生成一个雅思口语练习网页</title><link>https://www.xiaoxiangtao.cn/zh/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><author>15989119660@163.com (Xiangtao XIAO)</author><guid isPermaLink="false">https://www.xiaoxiangtao.cn/zh/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/</guid><description>&lt;p&gt;3.15更新：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.xiaoxiangtao.cn/zh/"&gt;//3pvtkwzwrm.coze.site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;coze生产环境的参数是部署时系统自动赋值的，不需要自己填API key之类的参数。重新做了一个在生产环境就跑通了，具体方法是让AI基于前一个应用生成一个详细的提示词包含功能点、技术架构等内容，感觉提示词专业的话对于编码还是有帮助的，但是依然会出现细节上的bug，需要进行两三次修复。功能出了问题好排查，配置或者网络等细节出了问题不是程序员的话真的不太好排查，也许是我对一些技术细节还不够了解。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/2026031512591560-designaxt-1024x876.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;最近正好考虑雅思，新东方的雅思小程序推出了一个AI练真题的功能，参考这个试了下能否用扣子直接生成一个类似的功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;功能介绍：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据选择的题型随机生成题目，点击开始录音可以根据题型限制录音时长。录音结束后进行语音识别，并通过AI对识别结果进行分析，给出评分、改进建议和AI扩写的答案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;首页：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/2026012814413133-designaxt-1024x680.png"&gt;&lt;/p&gt;
&lt;p&gt;这里题目下方的灰色提示是AI自动补全的功能，prompt并未做要求，同时录音时间的文字提示也是AI补全的，页面也是响应式，交互总体比较友好。我也没有对UI风格做要求，感觉AI味比较浓（非贬义），第一遍生成的字体较小做了一次调整。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;评分页：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/202601281501356-designaxt-1024x827.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/2026012815015559-designaxt-895x1024.png"&gt;&lt;/p&gt;
&lt;p&gt;在扣子上直接部署后可能是api的原因，生成环境语音识别功能没有跑通，但是在测试环境实现了完整的功能。&lt;/p&gt;
&lt;p&gt;整个过程大概用了两个小时，修复bug的过程比较顺畅，会进行自测基本功能问题提了都可以修复。但是涉及到接口调用，环境部署等导致的问题时，修复bug的技术要求就直线上升了，需要你能够发现比较具体的问题并准确描述，否则的话只是基于前端的报错，AI可能无法定位到准确问题，对无开发背景的人来说还是有难度。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/2026012815044317-designaxt-1024x183.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/preliminary-experience-generate-an-ielts-speaking-practice-webpage-using-buttons/2026012815041617-designaxt-1024x991.png"&gt;&lt;/p&gt;</description></item><item><title>wordpress配置问题记录</title><link>https://www.xiaoxiangtao.cn/zh/posts/wordpress-configuration-problem-record/</link><pubDate>Thu, 15 Oct 2020 00:00:00 +0000</pubDate><author>15989119660@163.com (Xiangtao XIAO)</author><guid isPermaLink="false">https://www.xiaoxiangtao.cn/zh/posts/wordpress-configuration-problem-record/</guid><description>&lt;h2 id="linux基本语法"&gt;Linux基本语法&lt;/h2&gt;
&lt;p&gt;复制 cp 要复制的文件路径 目标路径 cp -r 递归复制整个目录&lt;/p&gt;
&lt;p&gt;删除 rm -f 强制删除 -r 递归删除目录&lt;/p&gt;
&lt;p&gt;改名 mv 原文件 新文件名&lt;/p&gt;
&lt;p&gt;更改文件权限 chmod 777（完全写入权限） 要更改的目录或文件&lt;/p&gt;
&lt;p&gt;vim编辑器显示行号：输入指令：set number&lt;/p&gt;
&lt;p&gt;跳转到制定行：输入指令：n（要跳转的行号）&lt;/p&gt;
&lt;h2 id="wp-super-cache问题解决"&gt;WP-Super-Cache问题解决&lt;/h2&gt;
&lt;p&gt;将插件wp-super-cache中的wp-cache-config.php与advanced-cache.php复制到wp-content目录下。&lt;/p&gt;
&lt;p&gt;临时更改wp-content权限为777&lt;/p&gt;
&lt;p&gt;在wp-config.php中增加以下内容：1.在require_once(ABSPATH.’wp-settings.php’);前增加define(&amp;lsquo;WP_CACHE&amp;rsquo;, true); 2.增加define(&amp;lsquo;WPCACHEHOME&amp;rsquo;, &amp;lsquo;插件wp-super-cache绝对路径&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;修改完成后应该可以进入设置界面，在专家模式下更新设置如果出现要求更新Mod_write规则则按要求进行更新。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;对于采用bitnami的wordpress堆栈环境，由于其对文件访问权限的安全设置较严，安装时同样会弹出以上情况的警告。无需理会，连接到服务器执行以下指令：（事实上应当优先采用这种更改权限的做法，未生效再尝试上方操作）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod g+w /YOURADRESS/apps/wordpress/htdocs/wp-config.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后禁用插件并重新激活即可。完事以后要将文件权限复原，执行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod g-w /YOURADRESS/apps/wordpress/htdocs/wp-config.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更多内容，在bitnami.com官方文档的trouble shooting部分有详细介绍。&lt;/p&gt;</description></item><item><title>NameSilo Web hosting 云主机建站服务购买与使用体验</title><link>https://www.xiaoxiangtao.cn/zh/posts/namesilo-web-hosting-virtual-machine-station-building/</link><pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate><author>15989119660@163.com (Xiangtao XIAO)</author><guid isPermaLink="false">https://www.xiaoxiangtao.cn/zh/posts/namesilo-web-hosting-virtual-machine-station-building/</guid><description>&lt;p&gt;namesilo的域名在众多服务商里价格是比较实惠的，.com域名只要$8.99，近年新推出了web hosting服务，价格也比较实惠，最便宜的一个网站20G存储空间的套餐每月只要$2.39元（年套餐）。最近有一个做网站的需求，腾讯的学生优惠已经用过了，又不想备案，正好找到这个便宜的尝试一下。&lt;/p&gt;
&lt;h2 id="购买"&gt;购买&lt;/h2&gt;
&lt;p&gt;namesilo的hosting购买服务在namesilo新版网站，进入 &lt;a href="https://www.xiaoxiangtao.cn/zh/"&gt;namesilo.com&lt;/a&gt; 首页就能看见&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87.png"&gt;&lt;/p&gt;
&lt;p&gt;总共有3个套餐，可以按年或者按月购买，按年购买会更便宜。购买过程非常简单，选择对应套餐点击Get Started。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-1-1024x554.png"&gt;&lt;/p&gt;
&lt;p&gt;然后会让你选择域名，这一步也提供3种选择：&lt;/p&gt;
&lt;p&gt;1.如果你没有域名的话，可以直接搜索选择一个可注册的，然后和云主机套餐打包在namesilo购买；&lt;/p&gt;
&lt;p&gt;2.如果你在其他注册商处（比如腾讯云等）已经购买了域名，输入你购买的域名进行绑定即可，注意要输入你希望是主网站的域名比如www.test.com，namesilo会自动增加域名解析；&lt;/p&gt;
&lt;p&gt;3.你也可以选择将其他注册商处购买的域名转移至namesilo（不过注意如果你是新购买的域名通常有一个期限限制域名转出）。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-2-1024x451.png"&gt;&lt;/p&gt;
&lt;p&gt;我选择了绑定我在腾讯云购买的域名，选择好域名后点击continue即跳转到确认订单页面（注意：确认订单页面在旧版网站，新旧网站功能混在一起确实比较容易让人迷惑），不用犹豫点击确认订单，然后在付款页面选择Alipay，输入你的支付宝账号然后扫二维码付款即可。&lt;/p&gt;
&lt;h2 id="域名解析"&gt;域名解析&lt;/h2&gt;
&lt;p&gt;！！！购买完成以后，在新版网站是找不到你购买的host的，这点很让人迷惑，在新版网站，你可以选择点击自己的账户信息来跳转到旧版网站，然后在侧边栏选择hosting manager，即可进入主机管理页面，在这里你会看到自己购买的主机，名称就是你之前绑定的域名。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-3.png"&gt;&lt;/p&gt;
&lt;p&gt;点击链接图标，就进入了你的主机的cpanel管理面板。第一次登陆要设置账号密码邮箱配置等，cpanel支持中文（在偏好-更改语言处选择语言），可视化界面简单易懂，网上已经有很多介绍。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-4.png"&gt;&lt;/p&gt;
&lt;p&gt;购买完成后就可以前往控制面板进行相关设置了，namesilo根据你在购买时绑定的域名已经自动为该域名添加了域名解析，包括test.com,www.test.com,ftp.test.com以及mail解析等，如果购买套餐时你选择在namesilo购买一个新域名，那么一切已经就绪，在cpanel面板选择安装wordpress即可开始建站。如果像我一样绑定了其他注册商处的域名，虽然namesilo已经添加了相关解析，但这些解析是基于namesilo自家DNS服务器才会生效的，这里有两种选择：&lt;/p&gt;
&lt;p&gt;1.到购买域名的域名注册商处将域名的DNS解析服务器地址改为namesilo的DNS服务器地址使解析生效：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-5.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NS1.DNSOWL.COM&lt;/li&gt;
&lt;li&gt;NS2.DNSOWL.COM&lt;/li&gt;
&lt;li&gt;NS3.DNSOWL.COM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2.如果不希望更换DNS服务商，在cpanel面板的域名Zone找到自动添加的所有域名解析，然后将他们全部复制添加到自己的域名注册商处的域名解析中，同样可以让解析生效。&lt;/p&gt;
&lt;p&gt;做完这些，在cpanel面板安装好wordpress，在浏览器输入你的域名就可以看到wordpress主页了！&lt;/p&gt;
&lt;h2 id="ssl证书实现https"&gt;SSL证书实现HTTPS&lt;/h2&gt;
&lt;p&gt;购买的主机已经添加了自签名的SSL证书，但是自签名证书在用浏览器访问时会报不安全，一个第三方签名还是有必要的，namesilo自家在已购主机管理页面就有SSL证书购买服务，不过要花钱，有很多免费提供签名的第三方机构，我直接申请了腾讯云提供的TrustAsia 1年期免费证书（在云产品-SSL证书处申请即可）。&lt;/p&gt;
&lt;p&gt;申请下来后下载证书得到.key及.crt证书文件（host使用的是apache服务器，要选对版本），找到cpanel面板的：安全-SSL/TLS选项，删除已有自签名证书文件，上传自己的证书文件，然后选择[管理SSL主机]，选择证书对应的域名，点击按域自动填充，上传的证书会被自动选中填充，点击安装证书即可。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-6.png"&gt;&lt;/p&gt;
&lt;p&gt;在cpanel面板的：域-域选项找到自己的域名，选择启用Force HTTPS Redirect，至此，网站即可安全的用HTTPS进行访问了。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-7-1024x94.png"&gt;&lt;/p&gt;
&lt;h2 id="cloudflare-cdn加速"&gt;CloudFlare CDN加速&lt;/h2&gt;
&lt;p&gt;在cpanel安装好wordpress后，就是进入wordpress后台搭建网站，但是实测在中国境内网页的访问速度很慢，并且容易丢包。为了提高访问速度，需要将网页进行静态缓存以及CDN加速。&lt;/p&gt;
&lt;p&gt;类似七牛云等国内免费CDN服务要求你的主域名是备案了的，没有备案要选择海外CDN， &lt;a href="https://www.xiaoxiangtao.cn/zh/"&gt;CloudFlare&lt;/a&gt; 提供个人免费版CDN加速服务，推荐这个 &lt;a href="//zhuanlan.zhihu.com/p/29891330"&gt;教程&lt;/a&gt;，注意登录cloudflare的外国官网，中国网站注册是企业版的，注册完就有客服打电话给你谈业务了&amp;hellip;CloudFlare的CDN需要将DNS服务器地址转成他们家的，生效时间大概十分钟不到。&lt;/p&gt;
&lt;p&gt;在wordpress安装一个静态缓存插件，比如wp fast cache，在CDN选项选择cloudflare，需要输入API码，然后在cloudflare的Overview的侧边栏点击get your API token，选择global API，点击view，复制API代码到wordpress中即可，一路点击确认，cdn配置就完成了。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/namesilo-web-hosting-virtual-machine-station-building/%E5%9B%BE%E7%89%87-8.png"&gt;&lt;/p&gt;
&lt;p&gt;配置CDN及静态缓存后，网站的访问速度得到很明显的改善，访问变的更稳定，虽然相较国内的网站速度稍慢，但是对于像个人博客之类的小网站完全可以接受了。&lt;/p&gt;
&lt;h2 id="邮箱"&gt;邮箱&lt;/h2&gt;
&lt;p&gt;namesilo的host已经配置好了邮箱服务，发送邮件没问题，但是我用163发的邮件它却收不到，在wordpress设置中更换邮件地址，发现验证邮件也发不到我的邮箱上。因此使用了第三方的SMTP服务，下载了wp SMTP mail插件，SMTP服务用的是腾讯云的企业邮。&lt;/p&gt;
&lt;p&gt;将原本的地址解析中的邮件地址解析删掉，添加腾讯企业邮的地址进去，就可以使用腾讯企业邮箱的服务了，方法很简单，注册一个腾讯企业邮箱账号（免费的），然后按指导设置完成即可。增加一个业务邮箱账号，比如mail@designaxt.com，然后得到对应的邮箱密匙，在wp SMTP mail选择其他SMTP，输入密匙，腾讯企业邮的服务器地址及端口号，保存更改就可以用腾讯的服务发邮件了，其他家应该类似。&lt;/p&gt;</description></item><item><title>UEditor部署到个人站点</title><link>https://www.xiaoxiangtao.cn/zh/posts/ueditorbushudaogerenzhandian/</link><pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate><author>15989119660@163.com (Xiangtao XIAO)</author><guid isPermaLink="false">https://www.xiaoxiangtao.cn/zh/posts/ueditorbushudaogerenzhandian/</guid><description>&lt;h2 id="一下载ueditor"&gt;一、下载UEditor&lt;/h2&gt;
&lt;p&gt;&lt;a href="//ueditor.baidu.com/website/download.html"&gt;//ueditor.baidu.com/website/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在以上链接下载，选择自己需要的语言版本，我用的是jsp，就下载jsp版本。将下载的压缩包解压，可以直接将解压的文件导入到Eclipse中自己的项目中，导入到文件夹WebContent中即可。&lt;/p&gt;
&lt;h2 id="二配置"&gt;二、配置&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://www.xiaoxiangtao.cn/posts/ueditorbushudaogerenzhandian/1563207389404033187.png"&gt;&lt;/p&gt;
&lt;p&gt;将jsp/lib中的jar包全部复制到WEB-INF/lib下&lt;/p&gt;
&lt;p&gt;修改输入字符数统计、上限，自定义工具栏可以参考官方说明文档，配置项可在ueditor.config.js中修改。&lt;/p&gt;
&lt;p&gt;修改图片上传路径等在官方说明文档中有详细的介绍。&lt;/p&gt;
&lt;p&gt;注：这里仅仅是在一个项目中使用UEditor，还用别的使用方法，也可以直接部署到tomcat中。&lt;/p&gt;
&lt;h2 id="三在页面中插入ueditor编辑器"&gt;三、在页面中插入Ueditor编辑器&lt;/h2&gt;
&lt;p&gt;首先要引用文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;%= request.getContextPath() %&amp;gt;/thirdparts/utf8-jsp/themes/default/css/ueditor.change.css&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;%= request.getContextPath() %&amp;gt;/thirdparts/utf8-jsp/ueditor.config.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;%= request.getContextPath() %&amp;gt;/thirdparts/utf8-jsp/ueditor.all.min.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;%= request.getContextPath() %&amp;gt;/thirdparts/utf8-jsp/lang/zh-cn/zh-cn.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接着在需要插入编辑器的位置插入以下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;content&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;content&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;width:100%;height:500px&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;UE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getEditor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="nx"&gt;toolbars&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;fullscreen&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;source&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;|&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;undo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;redo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;|&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bold&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;italic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;underline&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;fontborder&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;strikethrough&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;superscript&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;subscript&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;removeformat&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;formatmatch&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;autotypeset&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;blockquote&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pasteplain&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;|&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;forecolor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;backcolor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;insertorderedlist&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;insertunorderedlist&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;selectall&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cleardoc&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;toolbars控制工具栏显示哪些工具&lt;/p&gt;
&lt;p&gt;textarea是显示编辑器的容器，其id与UE.getEditor(&amp;lsquo;id&amp;rsquo;,{})要一致。&lt;/p&gt;
&lt;p&gt;不一定要是textarea，div等都可以，可以自己试一试，我没有深入研究，凑合着用了。&lt;/p&gt;</description></item><item><title>理解MVC模式</title><link>https://www.xiaoxiangtao.cn/zh/posts/lijiemvcmoshi/</link><pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate><author>15989119660@163.com (Xiangtao XIAO)</author><guid isPermaLink="false">https://www.xiaoxiangtao.cn/zh/posts/lijiemvcmoshi/</guid><description>&lt;p&gt;M：Model&lt;/p&gt;
&lt;p&gt;V：View&lt;/p&gt;
&lt;p&gt;C：Controller&lt;/p&gt;
&lt;p&gt;    在JSP开发中，JSP仅负责控制页面的显示内容，Javabean仅负责存储数据，在Javabean中，数据以设计好的格式存储着，这也是为什么他叫模型，JSP可以方便的从Javabean中取得数据进行显示，Servlet则负责从数据库中读取数据，向数据库存储数据，对数据进行逻辑处理，之后将数据存储在javabean中以供显示。&lt;/p&gt;
&lt;p&gt;    MVC与三层架构：界面、业务逻辑、数据库存取是不一样的。MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。&lt;/p&gt;
&lt;p&gt;    看到有另一种说法： &lt;a href="%5C%22//blog.csdn.net/zuiyingong6567/article/details/80150834%5C%22"&gt;//blog.csdn.net/zuiyingong6567/article/details/80150834&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    同样是MVC，对于各层的理解有一些不同。尤其是对于数据库的连接，在PPT上看到的是C存取数据库，而网上一些资料显示是M存取数据库，而要求C尽量简单，仅仅负责在V与M间协调，大部分业务逻辑的处理，数据存取都放在Model中进行。&lt;/p&gt;</description></item></channel></rss>