1 设置定时刷新的头
//设置定时刷新的头 response.setHeader("refresh", "5;url=http://www.baidu.com");
2重定向的实现
1 servlet1代码
package header; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet1 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //没有响应 告知客户端去重定向到servlet2 //1、设置状态码302 //response.setStatus(302); //2、设置响应头Location //response.setHeader("Location", "/WEB14/servlet2"); //封装成一个重定向的方法sendRedirect(url) response.sendRedirect("/WEB14/servlet2"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
2 servlet2代码
package header; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello haohao..."); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3 手动设置状态码
//手动设置http响应行中的状态码 response.setStatus(404);
4 设置响应头
package header; import java.io.IOException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HeaderServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Date date = new Date(); //设置响应头 response.addHeader("name", "zhangsan"); //response.addIntHeader("age", 28); //response.addDateHeader("birthday", date.getTime()); response.addHeader("name", "lisi"); response.setHeader("age", "28"); response.setHeader("age", "50"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
5 适用js完成页面定时跳转
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> window.onload = function(){ var time = 5; var secondEle = document.getElementById("second"); var timer = setInterval(function(){ secondEle.innerHTML = time; time--; if(time==0){ clearInterval(timer); location.href="http://www.baidu.com"; } },1000); } </script> </head> <body> 恭喜你,注册成功,<span style="color:red" id="second">5</span>秒钟后跳转,如不跳转点击<a href="http://www.baidu.com">这里</a>! </body> </html>
6 使用respone的writer(乱码问题的解决)
package p4.response; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 解决respone乱码问题 * 1. 告知response查询的码表 * response.setCharacterEncoding("UTF-8"); * 2. 通过一个头 Content-Type 告知客户端使用何种码表 * response.setHeader("Content-Type", "UTF-8"); * 注:浏览器默认使用的本地默认语言的编码,一般为gbk; * 实际只写response.setHeader("Content-Type", "UTF-8"); * 这一句代码也可以解决乱码问题。一看使用的是utf-8解码,response * 就会查询utf-8的编码表了。 * * 3 还可以直接使用封装好的方法进行解码 * response.setContentType("text/html;charset=UTF-8"); * 这个方法实际上也就是封装了上面两句话而已。 */ //1. 告知response查询的码表 //response.setCharacterEncoding("UTF-8"); //2. 通过一个头 Content-Type 告知客户端使用何种码表 //response.setHeader("Content-Type", "text/html;charset=UTF-8"); // 3 直接使用封装好的方法进行解决乱码问题 response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.write("你好"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
7 使用 response 的 OutputStream
ServletOutputStream
getOutputStream()
Returns a ServletOutputStream
suitable for writing binary
data in the response.
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream
,该文件通过文件系统中的路径名 name
指定。
代码如下:
package p4.response; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ByteServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1 使用response获得字节输出流 ServletOutputStream out = response.getOutputStream(); // 2 获得服务器上的图片的绝对路径 String realPath = this.getServletContext().getRealPath("a.jpg");//"a.jpg"相对于web资源 // 3 用一个输入流和文件相关联 InputStream in = new FileInputStream(realPath); // 4 读取文件并输出 int len=0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))!=-1){ out.write(buffer, 0, len); } // 5 关闭资源 in.close(); out.close(); //respone 获得的流可以不用手动关闭, 会自动关闭。 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
8 完成文件的下载功能
问题 1:什么情况会文件下载?
答:浏览器不能解析的文件默认下载。
问题 2:什么情况下需要再服务端编写文件下载的代码?
答:理论上,浏览器可以解析的代码需要编写文件下载代码。
实际开发中,只要是需要下载的文件都编写文件下载代码。可能浏览器现在不能
解析,要是升级之后就可以解析了。
1 html代码实现
首先应该将相应的资源放入到web资源下
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>演示文件下载</title> </head> <body> <h1>使用 a 标签直接指向服务器上的资源</h1> <a href="/WEB14/download/a.flv">a.flv</a><br> <a href="/WEB14/download/a.jpg">a.jpg</a><br> <a href="/WEB14/download/a.mp3">a.mp3</a><br> <a href="/WEB14/download/a.mp4">a.mp4</a><br> <a href="/WEB14/download/a.txt">a.txt</a><br> <a href="/WEB14/download/a.zip">a.zip</a><br> <h1>使用服务器端编码的方式实现文件下载</h1> <a href="/WEB14/downloadServlet?filename=a.flv">a.flv</a><br> <a href="/WEB14/downloadServlet?filename=a.jpg">a.jpg</a><br> <a href="/WEB14/downloadServlet?filename=a.mp3">a.mp3</a><br> <a href="/WEB14/downloadServlet?filename=a.mp4">a.mp4</a><br> <a href="/WEB14/downloadServlet?filename=a.txt">a.txt</a><br> <a href="/WEB14/downloadServlet?filename=a.zip">a.zip</a><br> <a href="/WEB14/downLoadServlet2?filename=美女.jpg">美女.jpg</a><br> </body> </html>
2 Servlet代码实现
package p4.response; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 获得要下载的文件的名称 String filename = request.getParameter("filename");//a.flv // 2 告知客户端要下载的这个文件的类型-----客户端通过文件的 MIME 类型去区分类型 response.setContentType(this.getServletContext().getMimeType(filename)); // 3 告诉客户端该文件不是直接解析 而是以附件形式打开(下载) response.setHeader("Content-Disposition", "attachment;filename="+filename); //这个 filename 是固定的语法格式 // 4 获取文件的绝对路径 String path = this.getServletContext().getRealPath("download/"+filename); // 5 获得该文件的输入流 InputStream in = new FileInputStream(path); // 6 获得输出流---通过 response 获得的输出流 用于向客户端写内容 ServletOutputStream out = response.getOutputStream(); // 7 文件拷贝的模板代码 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } // 8 关闭资源 in.close(); //out.close();//respone 获得的流可以不用手动关闭, 会自动关闭。 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
9 解决下载文件【中文的文件名】乱码问题
但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情
况,原因是不同的浏览器默认对下载文件的编码方式不同,ie 是 UTF-8 编码方
式,而火狐 浏览器是 Base64 编码方式。所里这里需要解决浏览器兼容性问题,
解决浏览器兼容性问题的首要任务是要辨别访问者是 ie 还是火狐(其他),通过
Http 请求体中的一 个属性可以辨别。
解决乱码方法如下 :
//其中 agent 就是请求头 User-Agent 的值
if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); }
1 html部分代码
<body> <h1>使用服务器端编码的方式实现文件下载</h1> <a href="/WEBTest13/download?filename=美女.jpg">美女.jpg</a><br> <!--download这个是Servlet的<url-pattern>配置的名字--> </body>
2 Servlet代码
public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*文件名称是中文的下载*/ //1获取要下载的文件的名称 //ç¾å¥³.jpg这里就已经乱码了 String filename = request.getParameter("filename"); //System.out.println(filename); //2 解决request获取中文乱码 //下面的方式可以解决resquest的get方法和post方式获取参数中文乱码问题。 filename = new String(filename.getBytes("iso8859-1"), "UTF-8"); //System.out.println(filename);//美女.jpg //3 告知客户端文件的类型 --- 客户端根据MIME判断下载的文件类型 response.setContentType(this.getServletContext().getMimeType(filename)); //4 告知客户端文件是以附件的形式打开下载 response.setHeader("Content-Disposition", "attachment;filename="+filename); // 5 获取文件的绝对路径 String path = this.getServletContext().getRealPath("download/"+filename); // 6 获取response输出流 ServletOutputStream out = response.getOutputStream(); // 7 用一个流和文件相关联 InputStream in = new FileInputStream(path); // 8 读取文件并下载 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))!=-1){ out.write(buffer, 0, len); } // 9关闭资源 in.close(); //out.close(); //response打开的流可以不用关闭。 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3 解决上述问题
出现上述问题的原因是:
filename="+filename 客户端默认对名字进行解码
//4 告知客户端文件是以附件的形式打开下载
response.setHeader("Content-Disposition", "attachment;filename="+filename);
package p4.response; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*文件名称是中文的下载*/ //1获取要下载的文件的名称 //ç¾å¥³.jpg这里就已经乱码了 String filename = request.getParameter("filename"); //System.out.println(filename); //2 解决request获取中文乱码 //下面的方式可以解决resquest的get方法和post方式获取参数中文乱码问题。 filename = new String(filename.getBytes("iso8859-1"), "UTF-8"); //System.out.println(filename);//美女.jpg //===================================================== //解决下载文件 文件名为中文的时候 的乱码问题。 //filename="+filename 客户端默认对名字进行解码 String agent = request.getHeader("User-Agent"); String filenameEncoder =""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); } //============================================================== //3 告知客户端文件的类型 --- 客户端根据MIME判断下载的文件类型 response.setContentType(this.getServletContext().getMimeType(filename)); //4//告诉客户端该文件不是直接解析 而是以附件形式打开(下载)----filename="+filename 客户端默认对名字进行解码 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); // 5 获取文件的绝对路径 String path = this.getServletContext().getRealPath("download/"+filename); // 6 获取response输出流 ServletOutputStream out = response.getOutputStream(); // 7 用一个流和文件相关联 InputStream in = new FileInputStream(path); // 8 读取文件并下载 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))!=-1){ out.write(buffer, 0, len); } // 9关闭资源 in.close(); //out.close(); //response打开的流可以不用关闭。 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
10 注意的细节点
public class ErrorServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.getOutputStream(); //response.getWriter(); //response.sendRedirect(location); } p rotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
11 实现验证码功能
1 动态生成验证码模板代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package checking; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.io.BufferedReader; 9 import java.io.FileReader; 10 import java.io.IOException; 11 import java.util.ArrayList; 12 import java.util.List; 13 import java.util.Random; 14 15 import javax.imageio.ImageIO; 16 import javax.servlet.ServletException; 17 import javax.servlet.http.HttpServlet; 18 import javax.servlet.http.HttpServletRequest; 19 import javax.servlet.http.HttpServletResponse; 20 21 /** 22 * 验证码生成程序 23 */ 24 public class CheckImgServlet extends HttpServlet { 25 26 // 集合中保存所有成语 27 private List<String> words = new ArrayList<String>(); 28 29 @Override 30 public void init() throws ServletException { 31 // 初始化阶段,读取new_words.txt 32 // web工程中读取文件,必须使用绝对磁盘路径 33 String path = getServletContext().getRealPath("/WEB-INF/new_words.txt"); 34 try { 35 BufferedReader reader = new BufferedReader(new FileReader(path)); 36 String line; 37 while ((line = reader.readLine()) != null) { 38 words.add(line); 39 } 40 reader.close(); 41 } catch (IOException e) { 42 e.printStackTrace(); 43 } 44 } 45 46 public void doGet(HttpServletRequest request, HttpServletResponse response) 47 throws ServletException, IOException { 48 // 禁止缓存 49 // response.setHeader("Cache-Control", "no-cache"); 50 // response.setHeader("Pragma", "no-cache"); 51 // response.setDateHeader("Expires", -1); 52 53 int width = 120; 54 int height = 30; 55 56 // 步骤一 绘制一张内存中图片 57 BufferedImage bufferedImage = new BufferedImage(width, height, 58 BufferedImage.TYPE_INT_RGB); 59 60 // 步骤二 图片绘制背景颜色 ---通过绘图对象 61 Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔 62 // 绘制任何图形之前 都必须指定一个颜色 63 graphics.setColor(getRandColor(200, 250)); 64 graphics.fillRect(0, 0, width, height); 65 66 // 步骤三 绘制边框 67 graphics.setColor(Color.WHITE); 68 graphics.drawRect(0, 0, width - 1, height - 1); 69 70 // 步骤四 四个随机数字 71 Graphics2D graphics2d = (Graphics2D) graphics; 72 // 设置输出字体 73 graphics2d.setFont(new Font("宋体", Font.BOLD, 18)); 74 75 Random random = new Random();// 生成随机数 76 int index = random.nextInt(words.size()); 77 String word = words.get(index);// 获得成语 78 79 // 定义x坐标 80 int x = 10; 81 for (int i = 0; i < word.length(); i++) { 82 // 随机颜色 83 graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random 84 .nextInt(110), 20 + random.nextInt(110))); 85 // 旋转 -30 --- 30度 86 int jiaodu = random.nextInt(60) - 30; 87 // 换算弧度 88 double theta = jiaodu * Math.PI / 180; 89 90 // 获得字母数字 91 char c = word.charAt(i); 92 93 // 将c 输出到图片 94 graphics2d.rotate(theta, x, 20); 95 graphics2d.drawString(String.valueOf(c), x, 20); 96 graphics2d.rotate(-theta, x, 20); 97 x += 30; 98 } 99 // 将验证码内容保存session 100 request.getSession().setAttribute("checkcode_session", word); 101 102 // 步骤五 绘制干扰线 103 graphics.setColor(getRandColor(160, 200)); 104 int x1; 105 int x2; 106 int y1; 107 int y2; 108 for (int i = 0; i < 30; i++) { 109 x1 = random.nextInt(width); 110 x2 = random.nextInt(12); 111 y1 = random.nextInt(height); 112 y2 = random.nextInt(12); 113 graphics.drawLine(x1, y1, x1 + x2, x2 + y2); 114 } 115 116 // 将上面图片输出到浏览器 ImageIO 117 graphics.dispose();// 释放资源 118 119 //将图片写到response.getOutputStream()中 120 ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); 121 122 } 123 124 public void doPost(HttpServletRequest request, HttpServletResponse response) 125 throws ServletException, IOException { 126 doGet(request, response); 127 } 128 129 /** 130 * 取其某一范围的color 131 * 132 * @param fc 133 * int 范围参数1 134 * @param bc 135 * int 范围参数2 136 * @return Color 137 */ 138 private Color getRandColor(int fc, int bc) { 139 // 取其随机颜色 140 Random random = new Random(); 141 if (fc > 255) { 142 fc = 255; 143 } 144 if (bc > 255) { 145 bc = 255; 146 } 147 int r = fc + random.nextInt(bc - fc); 148 int g = fc + random.nextInt(bc - fc); 149 int b = fc + random.nextInt(bc - fc); 150 return new Color(r, g, b); 151 } 152 153 }
2 html部分代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> window.onload = function(){ } function changeImg(obj){ obj.src="/WEB14/checkImg?time="+new Date().getTime(); } </script> </head> <body> <form action="/WEB13/login" method="post"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> 验证码:<input type="text" name="username"><img onclick="changeImg(this)" src="/WEB14/checkImg"><br/> <input type="submit" value="登录"><br/> </form> </body> </html>
3 web.xml配置如下
<servlet> <description></description> <display-name>CheckImgServlet</display-name> <servlet-name>CheckImgServlet</servlet-name> <servlet-class>p4.CheckImgServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CheckImgServlet</servlet-name> <url-pattern>/checkImg</url-pattern> </servlet-mapping>
4 new_words.txt的内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
一唱一和
一呼百应
一干二净
一举两得
一落千丈
一模一样
一暴十寒
一日千里
一五一十
一心一意
两面三刀
三长两短
三番五次
三三两两
三头六臂
三心二意
三言两语
四分五裂
四面八方
四通八达
四平八稳
五光十色
五湖四海
五花八门
五颜六色
六神无主
七颠八倒
七零八落
七拼八凑
七上八下
七手八脚
七嘴八舌
八面玲珑
九死一生
十全十美
百发百中
百孔千疮
百战百胜
百依百顺
千变万化
千差万别
千军万马
千山万水
千丝万缕
千辛万苦
千言万语
千真万确
千锤百炼
千方百计
千奇百怪
千姿百态
千钧一发
千虑一得
千虑一失
千篇一律
万水千山
万无一失
万众一心
万紫千红
万死一生
推心置腹
肝胆相照
情同手足
志同道合
风雨同舟
荣辱与共
同甘共苦
关怀备注
心心相印
海誓山盟
拔刀相助
亲密无间
万紫千红
春暖花开
鸟语花香
姹紫嫣红
花红柳绿
百花争艳
锦上添花
火树银花
昨日黄花
春花秋月
过时黄花
花团锦簇
花枝招展
崇山峻岭
山明水秀
山穷水尽
大好山河
刀山火海
地动山摇
高山深涧
悬崖峭壁
峰峦雄伟
漫山遍野
江山如画
锦绣山河
五彩缤纷
五颜六色
一碧千里
万紫千红
花红柳绿
翠色欲流
姹紫嫣红
五光十色
青红皂白
绿水青山
不可多得
凤毛麟角
九牛一毛
绝无仅有
空前绝后
寥寥无几
寥若晨星
宁缺毋滥
前所未有
屈指可数
三三两两
铁树开花
微乎其微
一麟半爪
一丝一毫
百里挑一
沧海一粟
千古绝唱
摩肩接踵
车水马龙
川流不息
纷至沓来
花花世界
举袖为云
挥汗如雨
络绎不绝
门庭若市
万人空巷
水泄不通
人声鼎沸
人欢马叫
人山人海
震耳欲聋
座无虚席
包罗万象
琳琅满目
美不胜收
目不暇接
无奇不有
无穷无尽
无所不包
五花八门
眼花缭乱
洋洋大观
一应俱全
应有尽有
应接不暇
比比皆是
不可计数
层出不穷
绰绰有余
多多益善
多如牛毛
俯拾皆市
举不胜举
漫山遍野
星罗棋布
丰富多彩
九霄云外
腾云驾雾
壮志凌云
风云变幻
风起云涌
行云流水
风卷残云
浮云蔽日
孤云野鹤
烘云托月
过眼云烟
烟消云散
大雨倾盆
血雨腥风
风雨交加
风调雨顺
枪林弹雨
风雨同舟
风雨无阻
和风细雨
狂风暴雨
满城风雨
滂沱大雨
春风化雨
风雨飘摇
斜风细雨
未雨绸缪
水流湍急
水平如镜
高山流水
千山万水
水滴石穿
水乳交融
滴水不漏
杯水车薪
洪水猛兽
流水无情
直言不讳
无所顾忌
拐弯抹角
真心诚意
故弄玄虚
侃侃而谈
滔滔不绝
虚情假意
推心置腹
旁敲侧击
喋喋不休
慢条斯理
含糊其词
唠唠叨叨
振振有辞
肆无忌惮
大言不惭
娓娓动听
绘声绘色
对答如流
自圆其说
闲言碎语
闭月羞花
沉鱼落雁
出水芙蓉
明眸皓齿
美如冠玉
倾国倾城
国色天香
鹤发童颜
眉清目秀
和蔼可亲
心慈面善
张牙舞爪
愁眉苦脸
冰清玉洁
雍容华贵
文质彬彬
威风凛凛
老态龙钟
虎背熊腰
如花似玉
容光焕发
落落大方
骨瘦如柴
大腹便便
面黄肌瘦
其貌不扬
蓬头垢面
弱不禁风
口若悬河
对答如流
滔滔不绝
谈笑风生
高谈阔论
豪言壮语
夸夸其谈
花言巧语
忐忑不安
心惊肉跳
心神不定
心猿意马
心慌意乱
七上八下
心急如焚
班门弄斧
孤芳自赏
居功自傲
目中无人
妄自尊大
忘乎所以
惟我独尊
自高自大
自鸣得意
自我陶醉
自命不凡
目空一切
不骄不躁
功成不居
戒骄戒躁
洗耳恭听
虚怀若谷
慎言谨行
学无止境
学而不厌
真才实学
学而不倦
发奋图强
废寝忘食
争分夺秒
孜孜不倦
笨鸟先飞
闻鸡起舞
自强不息
只争朝夕
不甘示弱
全力以赴
力争上游
披荆斩棘
奋不顾身
舍己为人
坚强不屈
赤胆忠心
不屈不挠
忠贞不渝
誓死不二
威武不屈
舍死忘生
肝胆相照
克己奉公
一丝不苟
两袖清风
见礼忘义
永垂不朽
顶天立地
豁达大度
兢兢业业
卖国求荣
恬不知耻
贪生怕死
厚颜无耻
神采奕奕
眉飞色舞
昂首挺胸
惊慌失措
漫不经心
垂头丧气
没精打采
愁眉苦脸
大惊失色
炯炯有神
怒发冲冠
一目十行
一日千里
一字千金
百发百中
一日三秋
不毛之地
不计其数
胆大包天
寸步难行
一步登天
千钧一发
观者如云
挥金如土
铁证如山
爱财如命
稳如泰山
门庭若市
骨瘦如柴
冷若冰霜
如雷贯耳
守口如瓶
浩如烟海
高手如林
阳春三月
春光明媚
春回大地
春暖花开
春意盎然
春意正浓
风和日丽
春花烂漫
鸟语花香
百鸟鸣春
百花齐放
莺歌燕舞
赤日炎炎
烈日炎炎
骄阳似火
挥汗如雨
大汗淋漓
鸟语蝉鸣
万木葱茏
枝繁叶茂
莲叶满池
秋高气爽
天高云淡
秋风送爽
秋菊怒放
秋菊傲骨
秋色迷人
秋色宜人
金桂飘香
果实累累
北雁南飞
满山红叶
五谷丰登
芦花飘扬
天寒地冻
北风呼啸
滴水成冰
寒冬腊月
瑞雪纷飞
冰天雪地
冰封雪盖
漫天飞雪
白雪皑皑
冰封大地
冰天雪地
东方欲晓
旭日东升
万物初醒
空气清醒
雄鸡报晓
晨雾弥漫
晨光绚丽
烈日当头
丽日临空
艳阳高照
万里无云
碧空如洗
日落西山
夕阳西斜
残阳如血
炊烟四起
百鸟归林
华灯初上
夜幕低垂
日薄西山
夜深人静
月明星稀
夜色柔美
夜色迷人
深更半夜
漫漫长夜
风光秀丽
人山人海
车水马龙
宁静和谐
草木苍翠
竹篱瓦舍
山幽路辟
小桥流水
直指青云
古色古香
青砖素瓦
耸入碧云
机器轰鸣
铁流直泻
热气腾腾
钢花飞溅
粉饰一新
门可罗雀
冷冷清清
错落有致
富丽堂皇
设施齐全
气势雄伟
金碧辉煌
风景如画
闻名遐迩
井然有序
杂乱无章
布局巧妙
错落有致
宽阔平坦
崎岖不平
拥挤不堪
畅通无阻
花红柳绿
花色迷人
花香醉人
花枝招展
百花齐放
百花盛开
百花争艳
绚丽多彩
五彩缤纷
姹紫嫣红
绿草如茵
一碧千里
杂草丛生
生机勃勃
苍翠挺拔
郁郁葱葱
枯木逢春
秀丽多姿
青翠欲滴
林海雪原
耸入云天
瓜果蔬菜
清香鲜嫩
青翠欲滴
果园飘香
果实累累
果实饱满
鲜嫩水灵
象征和平
乳燕初飞
婉转悦耳
莺歌燕舞
翩然归来
枝头嬉戏
灰不溜秋
叽叽喳喳
鹦鹉学舌
婉转悦耳
笨嘴学舌
利嘴如铁
钢爪如钉
神气活现
昂首挺胸
肥大丰满
自由自在
引吭高歌
腾空而起
狂奔飞驰
膘肥体壮
昂首嘶鸣
瘦骨嶙峋
行动迟缓
俯首帖耳
膘肥体壮
川流不息
呼啸而过
穿梭往来
缓缓驶离
一叶扁舟
扬帆远航
乘风破浪
雾海夜航
追波逐浪
划破云层
直冲云霄
穿云而过
银鹰展翅
学习用品
美观实用
小巧玲珑
造型优美
设计独特
栩栩如生
活泼可爱
惹人喜爱
爱不释手
雨后彩虹
彩桥横空
若隐若现
光芒万丈
大雪纷飞
大雪封山
鹅毛大雪
漫天飞雪
瑞雪纷飞
林海雪原
风雪交加
雪上加霜
寒霜袭人
霜林尽染
垂露欲滴
朝露晶莹
日出露干
电光石火
雷电大作
惊天动地
春雷滚滚
电劈石击
雷电交加
阴雨连绵
牛毛细雨
秋雨连绵
随风飘洒
倾盆大雨
狂风暴雨
大雨滂沱
瓢泼大雨
大雨淋漓
暴雨如注
秋风送爽
金风送爽
北风呼啸
微风习习
寒风刺骨
风和日丽
大雾迷途
云雾茫茫
雾似轻纱
风吹雾散
云消雾散
彩云满天
天高云淡
乌云翻滚
彤云密布
彩霞缤纷
晚霞如火
朝霞灿烂
丹霞似锦
满天星斗
众星捧月
群星灿烂
万点繁星
月出东墙
月出东山
玉兔东升
月光皎洁
月色迷人
月牙初升
旭日东升
日上三竿
一轮红日
日高三尺
艳阳高照
烈日当头
骄阳似火
日影西斜
苦口婆心
口若悬河
心平气和
不慌不忙
语重心长
热情洋溢
恭恭敬敬
洗耳恭听
亲密无间
形影不离
情同手足
团结友爱
朝夕相处
人山人海
人声喧哗
人声嘈杂
人如潮涌
摩肩接踵
倾盆大雨
狂风暴雨
大雨滂沱
瓢泼大雨
读书学习
神情专注
学而不厌
学无止境
专心致志
日积月累
似懂非懂
普天同庆
彩旗飞舞
欢天喜地
张灯结彩
彻夜狂欢
兴高采烈
手舞足蹈
笨手笨脚
挤眉弄眼