第一个 JAVA WEB 应用
注意:本文的基本条件是基于Tomcat的常规 java web开发,web 开发的模式非常对,种类也非常多,切勿对号入座。
接上一篇文章,本章讲解下搭建第一个Java Web应用。当然,如果只是导入运行完事,那么没必要看这篇文档,因为我向稍微细致讲解下,以方便读者更加清楚的理解下原理。
事实上我写这篇文章是有一定个人想法的,有那么一段时间,我接触过一些刚接触java web的小伙伴(新手也行,菜鸟也罢), 很大部分人有一个共性,就是一上来就要搞大框架,什么SSH框架,什么SSM框架,这一点我其实很反对,当然我并不反对用框架,只是觉得没有比较刚一上来就要去接触什么大框架,很多人就是在这些框架中把自己搞混了,以至于很快从入门到放弃, 所以,这篇文章我要讲的是很原始的java web,没有任何框架,就是希望你读了之后能对jiava web有更加直观的认识,并且多说一句,一旦你能够形成这个直观且清醒的认识,你会发现,那些所谓的框架,其实都是基于此而开发的,无非就是简化开发周期,加快效率罢了,甚至到最后,你更想自己手撸一套自己的框架。
看过别人的代码的小伙伴肯定对 web.xml 这个文件有映像, 开发java web, 第一点,也是至关重要的一点,就是要正确理解web.xml 文件,下面是一个web.xml的文件示例,为了突出重点,很多其他边边角角的配置我都没加,这样才能更加突出核心。
WebDemo
TestServlet
com.webdemo.servlet.TestServlet
TestServlet
/TestServlet
先脑补一个场景,一次http请求具体的流程应该是什么:
浏览器发出http请求 -> 服务器接收请求 -> 服务器找到可以处理该类的方法 -> 处理请求 -> 返回结果给浏览器
可能不全面,但是基本上就这个流程,那么在这个流程中,我们用到的 Tomcat 就充当了服务器这个角色,那么流程的第三阶段“服务器找到可以处理该类的方法”显得非常重要,服务器凭什么去找到这个方法,凭的就是web.xml 的配置,注意看在 web.xml 中有一对标签和标签。
TestServlet
com.webdemo.servlet.TestServlet
TestServlet
/TestServlet
注意在 和 标签中都定义了一个 , 并且他们的值都一样(这里均为 TestServlet), 像这样的拥有相同值的servlet 和 servlet-mapping 构成一对请求处理对应关系,怎么构成的呢。
首先, 在 标签中,有一个 标签,该标签中的值 /TestServlet 代表的意义就是uri path, 也就是我们实际通过浏览器访问的路径。
例如,在浏览器中输入: http://127.0.0.1:8080/MyWebapp/TestServlet, 那么 tomcat 解析出来的 uri 就是/TestServlet .
然后通过这个值找到对应的中的servlet-name的值, 也就是TestServlet:
TestServlet
/TestServlet
接着根据这个值找到对应的,也就是:
TestServlet
com.webdemo.servlet.TestServlet
然后在这个标签中找到中的值, 也就是 com.webdemo.servlet.TestServlet, 很明显,这是一个java类,然后Tomcat会去找到这个类来处理我们发出的请求。
接下来就是进入这个类,看具体怎么去处理,先看代码:
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.println("hello");
writer.close();
}
}
这个类需要继承 HttpServlet 在里面, 该类里面有一堆函数,类似于 doGet, doPost这些, 对应与不同的请求类型,例如如果是get方法的请求,那么会自动调用doGet方法。那么只需要在这个基础上继续写你的逻辑就行了。
是不死很简单,只要整个流程及逻辑关系理清楚了,其实一点也不复杂,那么回过头来,开始的时候,提了一句那些很牛逼的的框架,像SpringMVC, 其实也是基于这个来完成的,那么现在我们就来看看SpringMVC这个框架怎么用,使用SpringMVC时的第一个配置如下:
springmvc
org.springframework.web.servlet.DispatcherServlet
1
contextConfigLocation
classpath*:springmvc-servlet.xml
springmvc
/
注意看,其实也是一对和 组合,这个配置的意思是,所有的请求都转发到org.springframework.web.servlet.DispatcherServlet这个配置去处理,实际上,这个所谓的org.springframework.web.servlet.DispatcherServlet类,其实实质上和我们上面写的servlet类是一样了,只不过它更加复杂,更加牛逼。
所以,只要你精力足够,自己写一套框架实际上也不难吧,SpringMVC不也是基于这些基础的东西做的嘛。