servlet模拟SpringMVC

1. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="3.1">
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>amie.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <!-- servlet拦截下所有请求,交给DispatchServlet处理 -->
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2. DispatcherServlet.java

public class DispatcherServlet extends HttpServlet {

    private static final long serialVersionUID = 116714888769576151L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            // 获取请求URI
            String requestURI = request.getRequestURI();
            // 请求分发,根据不同请求URL,调用不同的业务处理器
            // 注意事项:一个处理器handler类,只有一个方法
            // 这个分发逻辑需要好好设计一下
            Object handler = null;
            // 首先根据请求URL,查找到对应的处理器
            if ("/queryUser".equals(requestURI)) {
                handler = new QueryUserHandler();
            } else if ("/addUser".equals(requestURI)) {
                handler = new AddUserHandler();
            }
            if (handler == null) {
                // 设置响应体的媒体类型
                response.setContentType("text/plain;charset=utf-8");
                // 响应
                response.getWriter().print("请求找不到");
                return;
            }
            // 其次再去调用对应处理器的方法
            if (handler instanceof QueryUserHandler) {
                ((QueryUserHandler) handler).handleRequest(request, response);
            }else if (handler instanceof AddUserHandler) {
                ((AddUserHandler) handler).handleRequest(request, response);
            }

            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

3. HttpServletHandler.java(接口)

public interface HttpServletHandler {
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

4. AddUserHandler.java(处理器handler)

/***
 * 处理器:专门处理不同业务请求的
 */
public class AddUserHandler implements HttpServletHandler{

    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // 设置响应体的媒体类型
        response.setContentType("text/plain;charset=utf-8");
        // 响应
        response.getWriter().print("添加成功");
    }
}

原文地址:https://www.cnblogs.com/amiezhang/p/9750697.html

时间: 2024-11-02 23:16:48

servlet模拟SpringMVC的相关文章

Servlet、SpringMVC、Struts2对请求-响应模式实现

从整个B/S程序的运行结构来看,J2EE的表示层解决方案实际上是对"请求-响应"模式的一种实现.既然谓之"请求-响应"也就势必存在着两大沟通角色: 请求对象和响应对象.Servlet.SpringMVC.Struts2对请求-响应的实现是分别基于参数-参数模式.参数返回值.和POJO模式的,由于这两大角色的承载载体和编程语言实现基础都不同,因此三种模式的可谓风格迥异. 参数-参数模式 参数-返回值模式 POJO模式 请求方 方法参数 方法参数 属性变量 响应方 方法

Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法

第一种处理方法(非拦截器): 目前这种方法不建议,因为JSP规范不建议写JAVA代码.这种可以方便第二种处理方法的理解,第二种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在需要防止重复的jsp中加入下面的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="java

Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法

第一种处理方法(非拦截器): 眼下这样的方法不建议,由于JSP规范不建议写JAVA代码.这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在须要防止反复的jsp中添?以下的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="

文件上传(Servlet/Struts2/SpringMVC)

文件上传 Servlet实现 要实现文件上传的功能,必须在form的表单中的添加 enctype="multipart/form-data" 表示以二进制流的方式将文件传给控制器. 需要导入的jar包有:commons-fileupload-1.2.1.jar.commons-io-1.4.jar 文件上传的步骤: (1)创建DiskFileItemFactory的对象. (2)创建ServletFileUpload的对象,需传入DiskFileItemFactory的对象.可以获得封

java web学习总结(二十二) -------------------简单模拟SpringMVC

在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: 1 /** 2 * 使用Controller注解标注LoginUI类 3 */ 4 @Controller 5 public class LoginUI { 6 7 //使用RequestMapping注解指明forward1方法的访问路径 8 @RequestMapping("LoginUI/Lo

Servlet和SpringMVC补课

1.web.xml加载顺序 http://mianhuaman.iteye.com/blog/1105522 关键点:ServletContext -> context-param -> listener -> filter -> servlet 2.beans xmlns http://www.w3school.com.cn/xml/xml_namespaces.asp 用于避免元素命名冲突.在Spring中应用极其广泛. 3.SpringMVC http://blog.jobb

Servlet与SpringMVC内部实现

Jsp表达式<%= %>指令page/include动作<jsp:useBean>/param/include/plugin/setProperty......等对象application 对象是 javax.servlet.ServletContext 类的实例对象config 对象是 javax.servlet.ServletConfig 类的实例对象pageContext 对象是 javax.servlet:jsp.pageContext 类的一个实例对象request/re

模拟springmvc 内部登陆,跳过spring filter

说明,因为我们的一个项目B使用spring mvc配置的登陆框架,所以对登陆控制全部交给了spring,导致我们如果想通过另一个项目A登陆到项目B就不太容易,具体是项目A登陆了,我们通过一个连接直接跳转到项目B, 前提,项目A用户名密码和项目B的用户名密码必须是一样的 难点:1.项目A用密文登陆,即前端JS对密码加密后传递给后天,但是项目B是明文直接传递给spring框架 思路:我开始通过debug往spring的代码里面寻求突破点,但是找了好长时间,发现跳转太多,不好找.后来,仔细想想,spr

filter、servlet引用springmvc注解

概述:最近做的两个项目都用到了,所以想着把它整理起来方便以后用,不多说了,现在就将代码附上 我的活动平台filter: public class SysFilter implements javax.servlet.Filter { private IUserService userService; private IBasDao basDao; @Override//在其初始化的时候获取 public void init(FilterConfig filterConfig) throws Se