文档章节

@WebServlet的使用方法

呆出水平
 呆出水平
发布于 2017/07/23 13:51
字数 760
阅读 29
收藏 0

在servlet3.0以后,我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了。

下面是@WebServlet的属性列表。

 

属性名 类型 描述
name String 指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
value String[] 该属性等价于 urlPatterns 属性。两个属性不能同时使用。
urlPatterns String[] 指定一组 Servlet 的 URL 匹配模式。等价于<url-pattern>标签。
loadOnStartup int 指定 Servlet 的加载顺序,等价于 <load-on-startup>标签。
initParams WebInitParam[] 指定一组 Servlet 初始化参数,等价于<init-param>标签。
asyncSupported boolean 声明 Servlet 是否支持异步操作模式,等价于<async-supported> 标签。
description String 该 Servlet 的描述信息,等价于 <description>标签。
displayName String 该 Servlet 的显示名,通常配合工具使用,等价于 <display-name>标签。


从上表可见,web.xml可以配置的servlet属性,在@WebServlet中都可以配置。
下面是一个用@WebServlet标签,的servlet的样例:

package com.bsz.hanyue.weixin.servlet;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
/** 
 * Servlet implementation class WeChatIndexServlet 
 */  
@WebServlet(description = "a enter for wechat", urlPatterns = { "/aaa"},loadOnStartup=1)  
public class WeChatIndexServlet extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
         
    /** 
     * @see HttpServlet#HttpServlet() 
     */  
    public WeChatIndexServlet() {  
        super();  
        // TODO Auto-generated constructor stub  
    }  
  
    /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        response.setContentType("text/html;charset=UTF-8");  
        PrintWriter out = response.getWriter();  
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");  
        out.println("<HTML>");  
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");  
        out.println("  <BODY>");  
        out.print("    This is ");  
        out.print(this.getClass());  
        out.println(", using the GET method");  
        out.println("  </BODY>");  
        out.println("</HTML>");  
        out.flush();  
        out.close();  
    }  
  
    /** 
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // TODO Auto-generated method stub  
    }  
}  

可以看到,servlet可以直接通过@WebServlet标签配置URL映射。

再看一个图片验证码的例子:

package web;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;

import javax.imageio.*;

import org.apache.shiro.SecurityUtils;

@WebServlet(urlPatterns={"/html/authImg"})
public class AuthImg extends HttpServlet
{
	private final Font mFont =
		new Font("Arial Black", Font.PLAIN, 16);
	private final int IMG_WIDTH = 100;
	private final int IMG_HEIGTH = 18;
	private Color getRandColor(int fc,int bc)
	{
		Random random = new Random();
		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);
	}
	public void service(HttpServletRequest request,
		HttpServletResponse response)
		throws ServletException, IOException
	{
		response.setHeader("Pragma","No-cache");
		response.setHeader("Cache-Control","no-cache");
		response.setDateHeader("Expires", 0);
		response.setContentType("image/jpeg");
		BufferedImage image = new BufferedImage
			(IMG_WIDTH , IMG_HEIGTH , BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		Random random = new Random();
		g.setColor(getRandColor(200 , 250));
		g.fillRect(1, 1, IMG_WIDTH - 1, IMG_HEIGTH - 1);
		g.setColor(new Color(102 , 102 , 102));
		g.drawRect(0, 0, IMG_WIDTH - 1, IMG_HEIGTH - 1);
		g.setColor(getRandColor(160,200));
		for (int i = 0 ; i < 30 ; i++)
		{
			int x = random.nextInt(IMG_WIDTH - 1);
			int y = random.nextInt(IMG_HEIGTH - 1);
			int xl = random.nextInt(6) + 1;
			int yl = random.nextInt(12) + 1;
			g.drawLine(x , y , x + xl , y + yl);
		}
		g.setColor(getRandColor(160,200));
		for (int i = 0 ; i < 30 ; i++)
		{
			int x = random.nextInt(IMG_WIDTH - 1);
			int y = random.nextInt(IMG_HEIGTH - 1);
			int xl = random.nextInt(12) + 1;
			int yl = random.nextInt(6) + 1;
			g.drawLine(x , y , x - xl , y - yl);
		}
		g.setFont(mFont);
		String sRand = "";
		for (int i = 0 ; i < 4 ; i++)
		{
			String tmp = getRandomChar();
			sRand += tmp;
			g.setColor(new Color(20 + random.nextInt(110)
				,20 + random.nextInt(110)
				,20 + random.nextInt(110)));
			g.drawString(tmp , 15 * i + 10,15);
		}
//		HttpSession session = request.getSession(true);
//		session.setAttribute("rand" , sRand);
//		System.out.println("写入session"+sRand);
		SecurityUtils.getSubject().getSession().setAttribute("rand" , sRand);
		g.dispose();
		ImageIO.write(image, "JPEG", response.getOutputStream());
	}
	private String getRandomChar()
	{
		int rand = (int)Math.round(Math.random() * 2);
		long itmp = 0;
		char ctmp = '\u0000';
		switch (rand)
		{
			case 1:
				itmp = Math.round(Math.random() * 25 + 65);
				ctmp = (char)itmp;
				return String.valueOf(ctmp);
			case 2:
				itmp = Math.round(Math.random() * 25 + 97);
				ctmp = (char)itmp;
				return String.valueOf(ctmp);
			default :
				itmp = Math.round(Math.random() * 9);
				return  itmp + "";
		}
	}
}

 

本文转载自:http://blog.csdn.net/maozi_bsz/article/details/46431189

共有 人打赏支持
上一篇: 缺包记录
下一篇: Shiro浅析
呆出水平
粉丝 18
博文 207
码字总数 67583
作品 0
虹口
私信 提问
魂牵梦绕迷之@webservlet 问题?

魂牵梦绕迷之@webservlet 今天学车的时候无聊中想到一个问题,那就是@webservlet。大家都知道Servlet3.0有个新特性就是支持@webservlet注解,再也不用在web.xml注册了。 根据我个人的理解若在...

哎呦-又忘了
2017/03/11
86
2
Spring Boot 扩展配置

如果Spring Boot提供的默认配置不满足需求,可以通过一个配置类@Configuration加上@EnableWebMvc注解来完全控制想要的MVC配置。 如果仅仅想在其基础上进行扩展,则只要定义一个配置类@Config...

Kevin-air
2016/07/08
792
0
Servlet3.0中Servlet的使用

目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: 支持注解配置。 支持异步调用。 直接有对文件上传的支持。 在这篇文章中我将主要讲这三方面的...

王爵nice
2014/08/04
0
0
jfinal中的jetty为什么不支持注解模式?

我在jfinal中用application的模式启动jetty, 但是不支持相关的WebServlet的注解配置, why?

notonly
2014/11/16
349
1
servlet3.0中怎样在Filter里通过WebServlet的name获取这个servlet

servlet3.0中怎样在Filter里通过WebServlet的name获取这个servlet

kl2422
2015/07/21
217
3

没有更多内容

加载失败,请刷新页面

加载更多

源码分析 Mybatis 的 foreach 为什么会出现性能问题

背景 最近在做一个类似于综合报表之类的东西,需要查询所有的记录(数据库记录有限制),大概有1W条记录,该报表需要三个表的数据,也就是根据这 1W 个 ID 去执行查询三次数据库,其中,有一...

TSMYK
16分钟前
0
0
IC-CAD Methodology企业实战之openlava

在云计算解决安全问题并成为IC界主流运算平台之前,私有的服务器集群系统仍然是各大IC公司的计算资源平台首选。 现在主流的服务器集群管理系统包括lsf,openlava,SkyForm,三者都属于lsf一系...

李艳青1987
31分钟前
2
0
http response stream 字节流 接收与解码

在接收图片、音频、视频的时候,需要用到二进制流。 浏览器会发给客户端 字节Byte流,一串串的发过来_int8格式 -128~127(十进制),也就是8bit(位)。 客户端接收的时候,对接收到的字节收集,...

大灰狼wow
31分钟前
2
0
配置Tomcat监听80端口...

12月13日任务 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 1.配置Tomcat监听80端口 示例一:自定义监听端口 vim /usr/local/tomcat/conf/server.xml 编辑...

hhpuppy
31分钟前
3
0
在ubuntu中配置java环境

先在官网下载一个jdk 进入root权限,避免之后出现创建文件失败或者修改文本失败的问题 sudo i 创建一个文件夹来放置jdk解压后的文件 mkdir 文件夹mv jdk1.9(你下载的jdk文件) 你创建 的文...

无极之岚
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部