Servlet的一些技巧&模板代码
2011-09-18 01:16
337 查看
Servlet的一些技巧&模板代码
Request相关
获得一些基本参数
view sourceprint?
获得提交内容体
view sourceprint?
乱码之问题
view sourceprint?
使用org.apache.commons.beanutils对bean的快速填充
view sourceprint?
Response相关
设置浏览器缓存
view sourceprint?
输出文本
view sourceprint?
输出文件
view sourceprint?
页面跳转
view sourceprint?
一个验证码图片输出的模板
view sourceprint?
Request相关
获得一些基本参数
view sourceprint?
01 | //获取提交地址 |
02 | request.getRequestURI(); |
03 | //获取提交内容 |
04 | request.getQueryString(); |
05 | //获取客户端地址(浏览器) |
06 | request.getRemoteAddr(); |
07 | //获取客户端端口(浏览器) |
08 | request.getRemotePort(); |
09 | //获取提交方法(GET,POST or .....) |
10 | request.getMethod(); |
view sourceprint?
01 | //获得某个提交内容参数 |
02 | //http://xxx/xx?username=flx |
03 | String username =request.getParameter( "username" ); |
04 | System.out.println(username); |
05 |
06 |
07 | //获得一些同名的提交内容参数 |
08 | //http://xxx/xx?username=flx&username=lhm |
09 | String values[] = request.getParameterValues( "username" ); |
10 | for ( int i= 0 ;values!= null && i<values.length;i++){ |
11 | System.out.println(values[i]); |
12 | } |
13 |
14 | //获得所有所有提交参数的集合(不适合具有同名过个参数的) |
15 | Enumeration e = request.getParameterNames(); |
16 | while (e.hasMoreElements()){ |
17 | String name = (String) e.nextElement(); |
18 | String value = request.getParameter(name); |
19 | System.out.println(name + "=" + value); |
20 | } |
21 |
22 | //获得所有参数集合,适合同名参数 |
23 | //http://xxx/xx?username=flx&password=123 |
24 | Map<String,String[]>map = request.getParameterMap(); |
25 | // map.keyset() Set set = map.entrySet() |
26 | for (Map.Entry<String, String[]>entry : map.entrySet()){ |
27 | String name = entry.getKey(); |
28 | values = entry.getValue(); |
29 | for (String value : values){ |
30 | System.out.println(name + "=" + value); |
31 | } |
32 | } |
view sourceprint?
1 | //获取的内容默认都是"iso8859-1"编码 |
2 | String username =request.getParameter( "username" ); |
3 | //首先以当前编码获取原始字节,然后再转成目标编码 |
4 | username = new String(username.getBytes( "iso8859-1" ), "UTF-8" ); |
5 |
6 | //也可以手动设置编码 |
7 | request.setCharacterEncoding( "UTF-8" ); |
8 | String username =request.getParameter( "username" ); |
view sourceprint?
01 | //取得提交的数据集合 |
02 | Map map = request.getParameterMap(); |
03 | //这是一个存储提交数据的bean |
04 | User user = new User(); |
05 |
06 | //org.apache.commons.beanutils |
07 | //beanutils的一个转换工具,这里注册一个日期类型的转换 |
08 | ConvertUtils.register( new Converter(){ //Converter接口 |
09 | //实现了这个方法,ConvertUtils就知道如何转换Date类型了 |
10 | public Object convert(Class type, Object value) { |
11 | //先判断是否为空 |
12 | if (value== null || value.equals( "" )){ |
13 | return null ; |
14 | } |
15 | //判断是否为字符串 |
16 | if (!(value instanceof String)){ |
17 | throw new ConversionException( "只支持string类型的转换!!" ); |
18 | } |
19 | String s = (String) value; |
20 | //将日期字符串格式化为日期类型 |
21 | SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" ); |
22 | try { |
23 | return sdf.parse(s); |
24 | } catch (ParseException e) { |
25 | throw new ConversionException(s + "不是一个合法的日期值" ); |
26 | } |
27 | } |
28 | }, Date. class ); |
29 |
30 | //开始将集合向bean里面填充map |
31 | BeanUtils.populate(user, map); |
设置浏览器缓存
view sourceprint?
01 | //response体内的参数,用来说明缓存的设置 |
02 | //response.setHeader("content-type", "image/jpeg"); |
03 | //Expires: -1 |
04 | //Cache-Control: no-cache |
05 | //Pragma: no-cache |
06 |
07 | //设置浏览器不缓存数据 |
08 | response.setDateHeader( "Expires" , - 1 ); |
09 | response.setHeader( "Cache-Control" , "no-cache" ); |
10 | response.setHeader( "Pragma" , "no-cache" ); |
view sourceprint?
1 | //设置编码格式的所有方法 |
2 | response.setCharacterEncoding( "UTF-8" ); |
3 | response.setHeader( "content-type" , "text/html;charset=UTF-8" ); |
4 | response.setContentType( "text/html;charset=UTF-8" ); |
5 | response.getWriter().write( "<meta http-equiv='content-type' content='text/html;charset=UTF-8'>" ); |
6 |
7 | //输出 |
8 | response.getWriter().write( "输出内容" ); |
view sourceprint?
01 | //获得真实路径 |
02 | String path = this .getServletContext().getRealPath( "/download/日本妞.jpg" ); |
03 | //从真实路径获得文件名 |
04 | String filename = path.substring(path.lastIndexOf( "\\" )+ 1 ); |
05 | //设置返回体,指明文件类型 |
06 | response.setHeader( "content-disposition" , "attachment;filename=" + URLEncoder.encode(filename, "UTF-8" )); |
07 | //设置输入流 |
08 | FileInputStream in = new FileInputStream(path); |
09 |
10 | //模板代码,从输入流读取并向输出流输出 |
11 | int len = 0 ; |
12 | byte buffer[] = new byte [ 1024 ]; |
13 | OutputStream out = response.getOutputStream(); |
14 | while ((len=in.read(buffer))> 0 ){ |
15 | out.write(buffer, 0 , len); |
16 | } |
17 | in.close(); |
view sourceprint?
01 | //1) redirect 方式 |
02 | response.sendRedirect( "/a.jsp" ); |
03 | //页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: |
04 | response.sendRedirect( "http://www.ycul.com" ); |
05 |
06 | //跳转后浏览器地址栏变化。 |
07 | //这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。 |
08 |
09 | //2) forward方式 |
10 | RequestDispatcher dispatcher = request.getRequestDispatcher( "/a.jsp" ); |
11 | dispatcher .forward(request, response); |
12 | //页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。 |
13 |
14 | //跳转后浏览器地址栏不会变化。 |
15 | //使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute |
view sourceprint?
001 | import
|
002 | import
|
003 | import
|
004 | import
|
005 | import
|
006 | import
|
007 | import
|
008 | import
|
009 |
010 | import
|
011 | import
|
012 | import
|
013 | import
|
014 | import
|
015 |
016 | //向浏览器输出随机图片 |
017 | public class ResponseDemo extends HttpServlet { |
018 |
019 | //设置图片的大小 |
020 | private static final int WIDTH = 130 ; |
021 | private static final int HEIGHT = 30 ; |
022 |
023 | public void doGet(HttpServletRequest request, HttpServletResponse response) |
024 | throws ServletException, IOException { |
025 |
026 | //首先创建一个图片对象 |
027 | BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); |
028 | //取得画板 |
029 | Graphics g = image.getGraphics(); |
030 |
031 | //设置背景 |
032 | setBackground(g); |
033 |
034 | //设置边框 |
035 | setBorder(g); |
036 |
037 | //画干扰线 |
038 | drawRandomLine(g); |
039 |
040 | //写随机数 |
041 | drawRandomNum((Graphics2D) g); |
042 |
043 | //设置缓存,避免刷新图片时,浏览器调用缓存图片 |
044 | //response体内的参数,用来说明缓存的设置 |
045 | //response.setHeader("content-type", "image/jpeg"); |
046 | //Expires: -1 |
047 | //Cache-Control: no-cache |
048 | //Pragma: no-cache |
049 |
050 | //设置浏览器不缓存数据 |
051 | response.setDateHeader( "Expires" , - 1 ); |
052 | response.setHeader( "Cache-Control" , "no-cache" ); |
053 | response.setHeader( "Pragma" , "no-cache" ); |
054 |
055 | //设置返回体,超媒体格式为图片格式 |
056 | response.setContentType( "image/jpeg" ); |
057 | //输出 |
058 | OutputStream out = response.getOutputStream(); |
059 | ImageIO.write(image, "jpg" , out); |
060 | } |
061 |
062 | //设置背景 |
063 | private void setBackground(Graphics g) { |
064 | //设置颜色(白色) |
065 | g.setColor(Color.WHITE); |
066 | //填充矩形 |
067 | g.fillRect( 0 , 0 , WIDTH, HEIGHT); |
068 | } |
069 | //设置边框 |
070 | private void setBorder(Graphics g) { |
071 | //设置颜色(蓝色) |
072 | g.setColor(Color.BLUE); |
073 | //矩形描边,边得宽度是向外扩展的 |
074 | g.drawRect( 1 , 1 , WIDTH- 2 , HEIGHT- 2 ); |
075 |
076 | } |
077 | //画干扰线 |
078 | private void drawRandomLine(Graphics g) { |
079 | //设直线条颜色(绿色) |
080 | g.setColor(Color.GREEN); |
081 | //循环5次,也就是画五个线条 |
082 | for ( int i= 0 ;i< 5 ;i++){ |
083 | //都是随机 |
084 | //设置线段的其实点 |
085 | int x1 = new
|
086 | int y1 = new
|
087 | //设置线段的结束点 |
088 | int x2 = new
|
089 | int y2 = new
|
090 | //画线 |
091 | g.drawLine(x1, y1, x2, y2); |
092 | } |
093 | } |
094 |
095 | //汉子验证码,汉字Unicode码得范围是[\u4e00-\u9fa5] |
096 | private void drawRandomNum(Graphics2D g) { |
097 | //设置字体颜色(红色) |
098 | g.setColor(Color.RED); |
099 | //设置字体样式 |
100 | g.setFont( new Font( "宋体" ,Font.BOLD, 20 )); |
101 |
102 |
103 |
104 | //常见的汉字,排除了生僻字 |
105 | String base = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6" ; |
106 |
107 |
108 |
109 |
110 | int x = 10 ; |
111 | for ( int i= 0 ;i< 4 ;i++){ |
112 | String ch = base.charAt( new Random().nextInt(base.length()))+ "" ; |
113 | //写入字之前,设置好旋转,按弧度单位旋转 |
114 | int degree = new Random().nextInt()% 30 ; //与30取模,就是限定了范围是-30~+30 |
115 | //旋转(弧度,x点,y点) |
116 | g.rotate(degree*Math.PI/ 180 , x, 20 ); |
117 | //画字符(字符,x点,y点) |
118 | g.drawString(ch, x, 20 ); |
119 | //画完之后,别忘了把画板的旋转角度恢复 |
120 | g.rotate(-degree*Math.PI/ 180 , x, 20 ); |
121 | //x坐标增加,不然后面的字会重叠 |
122 | x =x+ 30 ; |
123 | } |
124 | } |
125 |
126 | public void doPost(HttpServletRequest request, HttpServletResponse response) |
127 | throws ServletException, IOException { |
128 | doGet(request, response); |
129 | } |
130 |
131 | } |
相关文章推荐
- java–Servlet基础 Servlet的一些技巧&模板代码 Request相关
- MyEclipse10中修改servlet & jsp的模板代码
- MyEclipse10中修改servlet & jsp的模板代码
- 一些常用代码编辑器(Vi、gedit、EditPlus、SourceInsight)的使用技巧小结
- web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)模板
- Xcode 中代码编辑和删除的一些技巧
- 编写安全的代码的一些技巧 C++
- C语言系列(二):最近重拾C语言的想法,谈到C中易错点,难点;以及开源代码中C语言的一些常用技巧,以及如何利用define、typedef、const等写健壮的C程序
- CSS代码编写的一些性能优化技巧总结
- 仿JQuery输写高效JSLite代码的一些技巧
- 内存管理---编写安全的代码的一些技巧 C++
- 毕业找工作·送给大家一些漂亮的个人简历模板
- 2.Vim编辑器 - .vimrc基本配置项 & 一些有效的使用技巧
- [JS代码]做网页的一些技巧
- 修改Servlet&JSP模板
- Visual Studio技巧之打造拥有自己标识的代码模板
- 一些代码 II (ConfigParser、创建大文件的技巧、__getattr__和__getattribute__、docstring和装饰器、抽象方法)
- servlet修改代码默认模板
- 修改(My)Eclipse默认的Servlet和jsp代码模板