我是靠谱客的博主 漂亮星星,最近开发中收集的这篇文章主要介绍JAVA注解实现@WebServlet(一)JAVA注解实现@WebServlet前言一、创建注解RequestMapping二、创建一个继承HttpServlet的类三、创建过滤器总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JAVA注解实现@WebServlet

提示:需要些反射和文件操作


文章目录

  • JAVA注解实现@WebServlet
  • 前言
  • 一、创建注解RequestMapping
  • 二、创建一个继承HttpServlet的类
  • 三、创建过滤器
  • 总结


前言

在学SpringMVC时,发现@RequestMapping很好用就很想在我们普通的java项目中也能用到,就模写一个。先展示项目目录结构如下:
在这里插入图片描述


一、创建注解RequestMapping

代码如下(示例):

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestMapping {
	public String value();
}
  • @Target:用来限制注解的使用范围;ElementType.TYPE是可以在类上使用;ElementType.METHOD是可以在方法上使用
  • @Retention:是声明该注解是否被虚拟机读取,默认是不被读取的;RetentionPolicy.RUNTIME就可以让虚拟机读取
  • @Documented:注解表明这个注解应该被 javadoc工具记录。默认情况下,javadoc是不包括注解的。

二、创建一个继承HttpServlet的类

代码如下(示例):

@RequestMapping("/ok")
public class TestController extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter writer = resp.getWriter();
		writer.write("Hello World");
		writer.close();
	}
	
	@RequestMapping("/test")
	public void test(HttpServletRequest request, HttpServletResponse response) {
		PrintWriter writer;
		try {
			writer = response.getWriter();
			writer.write("test");
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

一个@RequestMapping在类上,另一个在方法上

三、创建过滤器

代码如下(示例):

@WebFilter("/*")
public class InitFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// tomcat的部署目录
		String realPath = request.getServletContext().getRealPath("\WEB-INF\classes");
		// servlet的目录
		File file = new File(realPath + "\com\controller");
		// 获取servlet目录下的所有类
		String[] list = file.list();
		// 强制转换
		HttpServletRequest hRequest = (HttpServletRequest) request;
		// 获取请求地址
		String uri = hRequest.getRequestURI();
		// 获取项目的uri
		String path = hRequest.getContextPath();
		// 打印查看
		System.out.println(uri);
		for (String string : list) {
			// 截取类名称
			String name = string.substring(0, string.lastIndexOf("."));
			try {
				// 通过反射获取Class对象
				Class c = Class.forName("com.controller." + name);
				// 判断该类上是否有RequestMapping注解
				String value = "";
				if (c.isAnnotationPresent(RequestMapping.class)) {
					// 获取注解,进行强制转换成RequestMapping对象
					RequestMapping annotation = (RequestMapping)c.getAnnotation(RequestMapping.class);
					// 获取RequestMapping对象的值
					value += annotation.value();
					System.out.println(path + value);
				}
				// 获取所有的方法
				// 没有就调用父类的service方法
				Method[] methods = c.getDeclaredMethods();
				// 创建servlet对象
				Servlet servlet = request.getServletContext().createServlet(c);
				// 循环遍历判断是否RequestMapping这个注解
				for (Method method : methods) {
					if(method.isAnnotationPresent(RequestMapping.class)) {
						RequestMapping meRequestMapping = (RequestMapping)method.getAnnotation(RequestMapping.class);
						String meValue = meRequestMapping.value();
						// 如果有就调用相印的方法
						if (uri.equals(path + value + meValue)) {
							method.invoke(servlet, request, response);
						}
					}
				}
				servlet.service(request, response);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

到这基本上就好了,最后我们进行测试
在这里插入图片描述
在这里插入图片描述


总结

在研究这个时,看了源码一脸懵,就去百度,就是搜不到类似的,所以自己写一个,提供大家研究,以便指出我的不足。

最后

以上就是漂亮星星为你收集整理的JAVA注解实现@WebServlet(一)JAVA注解实现@WebServlet前言一、创建注解RequestMapping二、创建一个继承HttpServlet的类三、创建过滤器总结的全部内容,希望文章能够帮你解决JAVA注解实现@WebServlet(一)JAVA注解实现@WebServlet前言一、创建注解RequestMapping二、创建一个继承HttpServlet的类三、创建过滤器总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部