美文网首页
java web和springmvc中的请求分发方式

java web和springmvc中的请求分发方式

作者: 何甜甜在吗 | 来源:发表于2017-12-25 22:56 被阅读0次

    今天我投的简历被查看了十二份,然而一个hr都没有给我打电话,自己就是一只菜鸡,吃饭的时候,问贝贝的hr,果然没有通过面试,难过是肯定的,回来一点都不想写作业,还是继续撸把代码吧,只有撸代码时才能不让自己想很多。先理一下java web 中的servlet和springmvc中的DispatcherServlet

    一个简单的java web程序:
    Servlet类:HelloWorld.java

    public class HelloWorld extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            response.setCharacterEncoding("gb2312");
    
            PrintWriter out = response.getWriter();
            String name = request.getParameter("username");
    
            out.println("Your name: " + name);
    
        }
    }
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>HelloWorld</servlet-name>
            <servlet-class>com.cqupt.javaweb.HelloWorld</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>HelloWorld</servlet-name>
            <url-pattern>/HelloWorld</url-pattern>
        </servlet-mapping>
    </web-app>
    

    视图页面:index,jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
      <title>$Title$</title>
    </head>
    <body>
    <form action="/HelloWorld" method="post">
      Your Name: <input type="text" name="username"/>
      <input type="submit" value="submit"/>
    </form>
    </body>
    </html>
    

    servlet是java web的核心,作为一个servlet,首先需要继承HttpServlet类,在servlet中我们经常重写的方法就是doPost(HttpServletRequest request, HttpServletResponse response)和doGet(HttpServletRequest request, HttpServletResponse response),第一个方法处理HTTPget请求,第二个处理HTTPpost请求。
    那么什么是servlet呢,servlet是运行在web服务器上的程序,处理来自客户端的请求,类似与controller接受用户请求,并转发给相应的action处理。但是servlet分发用户请求的方式和springmvc分发用户请求的方式有点不同。servlet分发请求需要在web.xml中注册,不知道用注册这个词正不正确,找不到合适的词。

    <servlet>
            <servlet-name>HelloWorld</servlet-name>
            <servlet-class>com.cqupt.javaweb.HelloWorld</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>HelloWorld</servlet-name>
            <url-pattern>/HelloWorld</url-pattern>
        </servlet-mapping>
    

    <servlet-class>标签是servlet所在的类的权限名,<url-pattern>标签用来匹配客户端的标签,如果客户端的请求为/HelloWorld,并且为post请求,那么就会调用HelloWorld类中的doPost方法。这里就可能会意识到使用servlet的弊端了,如果程序非常大的话,那肯定会有很多不同的servlet,不同的servlet处理不同的逻辑,并且在servlet中需要注册很多servlet,那么程序将不够健壮,不好维护。
    当使用springmvc时,就不需要手动自动去维护了,spring为我们提供了一个DispatcherServlet类,使用方式如下:

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    

    <load-on-startup>并不是必须的,如果存在,则它将在应用程序启动时装载servlet并调用init方法,应该就是初始化web.xml时调用init方法,否则在该servlet的第一个请求时进行加载。
    DispatcherServlet初始化时会寻找一个在应用程序的web-inf目录下的配置文件,这个配置文件命名方式为servlet-name-servlet.xml,这里就应该为springmvc-servlet.xml,如果配置文件不满足这样的条件(包括位置和配置文件的名字),必须自己去指定它,这里就通过<init-param><param-name><param-value>标签去指定。另外spring通过注解,实现了一个控制器可以处理多个动作,并且请求映射通过使用注解不需要存储在配置文件中
    这里还需要注意一下<url-pattern>/</url-pattern>和<url-pattern>/</url-pattern>会使程序运行出现不一样的结果,以前写项目的时候遇到过。/拦截所有资源,/只拦截静态资源,.jsp将不会被拦截,如果想要静态资源不被拦截的话,最简单的一种方法就是在spring配置文件加入下面一行代码:

    <mvc:default-servlet-handler/>
    

    相关文章

      网友评论

          本文标题:java web和springmvc中的请求分发方式

          本文链接:https://www.haomeiwen.com/subject/oqqrgxtx.html