servlet 学习笔记

一、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得到图片

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值