servlet 学习笔记

来源:互联网 发布:淘宝预售资质申请入口 编辑:程序博客网 时间:2024/06/05 16:56
一、servrlet的生命周期:
1.装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。

2.Server创建一个Servlet的实例

3.Server调用Servlet的init()方法

4.一个客户端的请求到达Server

5.Server创建一个请求对象

6.Server创建一个响应对象

7.Server激活Servlet的service()方法,传递请求和响应对象作为参数

8.service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

9.service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。

10.对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

二:servlet请求和属性

在使用超链接的请求servlet时,如果重写了service方法,会直接调用servlet方法,如果想调用doGet或doPost方法,则不需重写service方法,也可以通过form表单去请求。

在service方法中可以获得相关属性:详见API。

三:servlet配置

主要是web.xml里面配置

 <servlet>  <servlet-name>TestServlet</servlet-name>  <servlet-class>com.servlet.TestServlet</servlet-class>  </servlet>    <servlet-mapping>  <servlet-name>TestServlet</servlet-name>  <!--   <url-pattern>/servlet/TestServlet</url-pattern>   -->   <url-pattern>*.do</url-pattern>    <!--     <url-pattern>/servlet/*</url-pattern>     -->  </servlet-mapping>

配置的格式都是请求到配置的servlet。

 

利用servlet输出登陆的验证码操作:

1、servlet类 doGet方法:

RandomGraphics g = new RandomGraphics();
g.setCharLength(6);ServletOutputStream sos = resp.getOutputStream(); g.buildImage(sos);req.getSession().setAttribute("code", g.getCheckCode());sos.flush();


2、RandomGraphics类:

public String buildImage(OutputStream out) {BufferedImage image = new BufferedImage(this.width, this.height, this.imageType);Graphics g = image.getGraphics();Graphics2D g2d = (Graphics2D) g;g.setColor(this.getColor(200, 250)); g.fillRect(0, 0, this.width, this.height); g.setFont(new Font("Times New Roman", Font.BOLD, 17)); //g.setColor(this.getColor(180, 200));g.setColor(new Color(0,0,0));/**绘制100条干扰线*/for (int i = 0; i < 100; i++ ) {int x1 = random.nextInt(this.width); int y1 = random.nextInt(this.height); int x2 = random.nextInt(this.width - 3);int y2 = random.nextInt(this.height - 3); BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);Line2D line = new Line2D.Double(x1, y1, x2, y2); g2d.setStroke(bs); g2d.draw(line); g.setColor(getColor(180, 222));}StringBuffer codeStr = new StringBuffer();for (int i = 0; i < this.charLength; i++) {String c = String.valueOf(random.nextInt(10)); codeStr.append(c); Color color = new Color(20+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110)); g.setColor(color); /*随机文字,旋转文字到指定角度*/g.drawString(String.valueOf(c), 15 * i+2, 20);}this.checkCode = codeStr.toString(); g.dispose();//ByteArrayInputStream inputStream = null;//ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try {//ImageOutputStream imgOutput = ImageIO.createImageOutputStream(outputStream); //ImageIO.write(image, "JPEG", imgOutput); ImageIO.write(image, "JPEG", out);//imgOutput.close(); //inputStream = new ByteArrayInputStream(outputStream.toByteArray()); //outputStream.close();} catch (IOException e) {e.printStackTrace();}//return inputStream;return this.checkCode;}/*** 利用随机数,随机生成一个Color颜色的对象* @param fc* @param bc* @return颜色对象*/private Color getColor(int fc, int bc) {if (fc > 255) {fc = 255;}if (bc > 255) {bc = 255;}int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}

3、配置servlet

<servlet><servlet-name>CheckCodeServlet</servlet-name><servlet-class>com.hw.Graphics.CheckCodeServlet</servlet-class></servlet><servlet-mapping><servlet-name>CheckCodeServlet</servlet-name><url-pattern>/checkcode</url-pattern></servlet-mapping>

4、在JSP页面上面直接请求就可以了:

验证码:<input type="text" name="code" /> <img alt="验证码" src="checkcode"><br>
这样的web.xml加载的打开页面就会去请求servlet得到图片

 

 

 

原创粉丝点击