servlet数量太多,搞个轻量级springmvc

6 篇文章 0 订阅
4 篇文章 0 订阅

这两天用jsp+servlet+MySQL开发了一个企业网站,后台和前台都有,功能已经实现了,现在总结发现,servlet是真的多,我这个系统有7个表,后台实现一遍增删改查,就得有28个servlet,而且还有前台的部分,servlet的数量真的太多了,想想看springmvc,其实是可以写一个轻量级的springmvc的。

在Servlet中实现类似Spring的@Controller注解功能,主要是通过自定义注解和一个中央处理器(如Servlet过滤器或一个集中的Servlet)来解析这些注解并将请求映射到相应的方法。下面是一个简单的示例:

  1. 自定义注解 - ControllerRequestMapping
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMapping {
    String value();
}
  1. 自定义控制器类
@Controller
public class MyController {

    @RequestMapping(value = "/hello")
    public void hello(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().write("Hello, World!");
    }
}
  1. 创建一个过滤器来处理请求映射
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class DispatcherFilter implements Filter {

    private Map<String, Method> handlerMapping = new HashMap<>();

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 扫描所有带有@Controller注解的类,并将它们注册到handlerMapping中
        // 这里需要使用反射或类路径扫描库(如ClassGraph)
        // 以下代码仅为示例,实际应用中需要根据项目结构进行调整
        Class<MyController> clazz = MyController.class;
        for (Method method : clazz.getDeclaredMethods()) {
            if (method.isAnnotationPresent(RequestMapping.class)) {
                RequestMapping annotation = method.getAnnotation(RequestMapping.class);
                handlerMapping.put(annotation.value(), method);
            }
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String uri = request.getRequestURI();
        Method method = handlerMapping.get(uri);
        if (method != null) {
            try {
                method.invoke(method.getDeclaringClass().newInstance(), request, response);
            } catch (Exception e) {
                throw new ServletException(e);
            }
        } else {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
    }

    @Override
    public void destroy() {
    }
}
  1. 在web.xml中配置过滤器
<filter>
    <filter-name>dispatcher</filter-name>
    <filter-class>com.example.DispatcherFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>dispatcher</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

请注意,上述代码仅作为示例,实际应用中可能需要处理更多细节,如异常处理、类型安全、参数绑定等。此外,使用反射和类路径扫描可能会带来性能影响,因此在生产环境中应考虑优化。

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring MVC是一种基于Java的开发框架,用于构建Web应用程序。它通过MVC(Model-View-Controller)模式来组织代码,将应用程序的不同部分分离开来,以提高可维护性和可扩展性。 在Spring MVC中,DispatcherServlet是前端控制器,负责接收所有的HTTP请求并将其分派给相应的处理程序。DispatcherServlet根据配置文件中的映射规则将请求转发给相应的控制器,然后由控制器处理请求并生成响应。最后,DispatcherServlet将响应发送回客户端。 通过使用Spring MVC,开发人员可以更加灵活地处理请求和生成响应。它提供了丰富的功能,如表单验证、数据绑定、国际化等。此外,Spring MVC还与其他Spring框架(如Spring Boot和Spring Security)集成,以提供更全面的解决方案。 总之,Spring MVC是一个强大的Java Web开发框架,可帮助开发人员更高效地构建可扩展和易于维护的Web应用程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一文带你搞懂Spring MVC和servlet(面试必备)](https://blog.csdn.net/qq_36908783/article/details/105816074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值