{"id":18,"date":"2013-03-16T13:45:03","date_gmt":"2013-03-16T13:45:03","guid":{"rendered":"http:\/\/www.yeetrack.com\/post\/2013-03-16\/maven%20java%20web%20%E7%94%9F%E6%88%90%E5%9B%BE%E7%89%87%E9%AA%8C%E8%AF%81%E7%A0%81"},"modified":"2013-09-27T22:36:50","modified_gmt":"2013-09-27T14:36:50","slug":"mavenjavaweb%e7%94%9f%e6%88%90%e5%9b%be%e7%89%87%e9%aa%8c%e8%af%81%e7%a0%81","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=18","title":{"rendered":"maven java web \u751f\u6210\u56fe\u7247\u9a8c\u8bc1\u7801"},"content":{"rendered":"<p>eclipse \u5b89\u88c5m2eclipse\u63d2\u4ef6\uff0c\u5b89\u88c5\u5b8c\u6bd5\u540e\uff0c\u65b0\u5efa\u4e00\u4e2awebapp maven\u9879\u76ee\uff0c\u9879\u76ee\u76ee\u5f55\u5982\u4e0b\uff1a<br \/> <img decoding=\"async\" src=\"http:\/\/m3.img.libdd.com\/farm5\/2013\/0316\/13\/1BC31930BB6D10BDD0D0B95C227516D1FE9F262C06000_265_382.JPEG\" \/><br \/> \u65b0\u5efaIdentityServlet\u7c7b\uff1a<\/p>\n<p><!--more--><\/p>\n<pre><code>package com.yeetrack.servlet;\n\nimport java.awt.Color;\nimport java.awt.Font;\nimport java.awt.Graphics2D;\nimport java.awt.image.BufferedImage;\nimport java.io.IOException;\nimport java.util.Random;\n\nimport javax.servlet.ServletException;\nimport javax.servlet.ServletOutputStream;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\nimport com.sun.image.codec.jpeg.JPEGCodec;\nimport com.sun.image.codec.jpeg.JPEGImageEncoder;\npublic class IdentityServlet extends HttpServlet\n{\n\n    private static final long serialVersionUID = 4745835569705949574L;\n\n    private static final char[] CHARS = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; \/\/\u8bbe\u7f6e\u9a8c\u8bc1\u7801\u5b57\u7b26\n    private static Random random = new Random();\n    \/**\n    * \u83b7\u53d6\u56db\u4f4d\u968f\u673a\u9a8c\u8bc1\u7801\n    * @return\n    *\/\n    private static String getRandomString()\n    {\n        StringBuffer buffer = new StringBuffer();\n        for(int i=1;i&lt;=4;i++)\n            buffer.append(CHARS[random.nextInt(CHARS.length)]);\n        return buffer.toString();\n    }\n    \/\/\u968f\u673a\u83b7\u53d6\u989c\u8272\n    private static Color getRandomColor()\n    {\n        return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));\n    }\n    private static Color getReverseColor(Color c)\n    {\n        return new Color(255-c.getRed(), 255-c.getGreen(), 255-c.getBlue());\n    }\n\n    @Override\n    protected void doGet(HttpServletRequest req, HttpServletResponse resp)\n        throws ServletException, IOException\n    {\n        \/\/ TODO Auto-generated method stub\n        resp.setCharacterEncoding(&quot;utf-8&quot;);\n        resp.setContentType(&quot;image\/jpeg&quot;);\n        String randomString = getRandomString();\n        req.getSession(true).setAttribute(&quot;random&quot;, randomString);\n\n        int width = 100;\n        int height = 30;\n\n        Color color = getRandomColor();\n        Color reverse = getReverseColor(color);\n\n        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\n        Graphics2D g = bi.createGraphics();\n        g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));\n        g.setColor(color);\n        g.fillRect(0, 0, width, height);\n        g.setColor(reverse);\n        g.drawString(randomString, 18, 20);\n        for(int i=0,n=random.nextInt(100);i&lt;n;i++)\n            g.drawRect(random.nextInt(width), random.nextInt(height),1,1);\n\n        ServletOutputStream out = resp.getOutputStream();\n        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);\n        encoder.encode(bi);\n        out.flush();\n    }\n\n    @Override\n    protected void doPost(HttpServletRequest req, HttpServletResponse resp)\n        throws ServletException, IOException\n    {\n        \/\/ TODO Auto-generated method stub\n        super.doPost(req, resp);\n    }\n}\n<\/code><\/pre>\n<p>maven\u7684pom.xml\u5982\u4e0b\uff1a<\/p>\n<pre><code>&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\nxsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd&quot;&gt;\n&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n&lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n&lt;artifactId&gt;mavenWeb&lt;\/artifactId&gt;\n&lt;packaging&gt;war&lt;\/packaging&gt;\n&lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n&lt;name&gt;mavenWeb Maven Webapp&lt;\/name&gt;\n&lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\n&lt;dependencies&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;junit&lt;\/groupId&gt;\n  &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n  &lt;version&gt;3.8.1&lt;\/version&gt;\n  &lt;scope&gt;test&lt;\/scope&gt;\n&lt;\/dependency&gt;\n\n&lt;dependency&gt;\n&lt;groupId&gt;org.apache.maven&lt;\/groupId&gt;\n&lt;artifactId&gt;maven-plugin-api&lt;\/artifactId&gt;\n&lt;version&gt;3.0.5&lt;\/version&gt;\n\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.geronimo.specs&lt;\/groupId&gt;\n    &lt;artifactId&gt;geronimo-servlet_2.5_spec&lt;\/artifactId&gt;\n    &lt;version&gt;1.2&lt;\/version&gt;\n&lt;\/dependency&gt;\n\n\n&lt;\/dependencies&gt;\n&lt;build&gt;\n&lt;finalName&gt;mavenWeb&lt;\/finalName&gt;\n&lt;plugins&gt;\n&lt;plugin&gt;\n    &lt;groupId&gt;org.mortbay.jetty&lt;\/groupId&gt;\n    &lt;artifactId&gt;maven-jetty-plugin&lt;\/artifactId&gt;\n    &lt;version&gt;6.1.10&lt;\/version&gt;\n    &lt;configuration&gt;\n      &lt;stopPort&gt;9966&lt;\/stopPort&gt;\n      &lt;stopKey&gt;foo&lt;\/stopKey&gt;  \n    &lt;\/configuration&gt;\n&lt;\/plugin&gt;\n&lt;\/plugins&gt;\n&lt;\/build&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<p>\u9879\u76eeweb.xml\u914d\u7f6e\u5982\u4e0b\uff1a<br \/> 23.dtd&quot; &gt;<\/p>\n<pre><code>&lt;web-app&gt;\n&lt;display-name&gt;Archetype Created Web Application&lt;\/display-name&gt;\n&lt;servlet&gt;\n    &lt;servlet-name&gt;identityServlet&lt;\/servlet-name&gt;\n    &lt;servlet-class&gt;com.yeetrack.servlet.IdentityServlet&lt;\/servlet-class&gt;\n&lt;\/servlet&gt;\n&lt;servlet-mapping&gt;\n    &lt;servlet-name&gt;identityServlet&lt;\/servlet-name&gt;\n    &lt;url-pattern&gt;\/servlet\/idetityget&lt;\/url-pattern&gt;\n&lt;\/servlet-mapping&gt;\n&lt;\/web-app&gt;\n<\/code><\/pre>\n<p>maven install\uff0c\u518d\u8c03\u7528tomcat\u6216\u8005jetty\u3002\u6d4f\u89c8\u5668\u4e2d\u76f4\u63a5\u8bbf\u95ee\u5b9a\u4e49\u7684servlet\u5373\u53ef\uff0c\u5982<a href=\"http:\/\/localhost:8080\/mavenWeb\/servlet\/idetityget\">http:\/\/localhost:8080\/mavenWeb\/servlet\/idetityget<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>eclipse \u5b89\u88c5m2eclipse\u63d2\u4ef6\uff0c\u5b89\u88c5\u5b8c\u6bd5\u540e\uff0c\u65b0\u5efa\u4e00\u4e2awebapp maven\u9879\u76ee\uff0c\u9879\u76ee\u76ee\u5f55\u5982\u4e0b\uff1a \u65b0\u5efaIdentityServlet\u7c7b\uff1a<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[33],"tags":[8,7,5],"class_list":["post-18","post","type-post","status-publish","format-standard","hentry","category-coding","tag-java","tag-7","tag-5"],"views":3646,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18"}],"version-history":[{"count":1,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":192,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/18\/revisions\/192"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}