虽然学了这么久Java,但是还没咋接触web项目,拿着web项目都不知道从哪看起。今天,学习一下web项目的运行,在spring框架中,也不是特别的复杂。
首先,客户端的一个request请求,到服务器端的监听,生成request(和response对象),找到web.xml,根据里面的配置信息,经过监听,过滤器,web容器将请求传送到servlet, servlet处理完成之后返回,生成response对象,交给客户端。这就是一次简单的请求流程。
实例页面:
对web项目的执行过程的理解,内容包括1 http url 2 html、servlet、jsp 3 tomcat等。web项目的整个执行过程,从一个http请求如http://localhost:8080/test/login.action开始:
1 http url的形式主要有三种:
1.1http://localhost:8080/test/index.html,即静态页面
1.2http://localhost:8080/test/index(后可附带传入参数),其中/index会映射到一个servlet类,
整个需要在test项目的web.xml中进行配置:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://Java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>IndexSerlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
执行过程是:
1)浏览器中输入http://localhost:8080/test/index
2)tomcat获取http://localhost:8080/test/index
3)根据web.xml中的<servlet-mapping>定位到tomcat的webapp文件夹下test项目的IndexServlet.class文件
4)执行IndexServlet.class文件,返回html代码
5)tomcat负责与浏览器进行交互,将html代码在浏览中进行显示
1.3http://localhost:8080/test/index.jsp(后可附带传入参数)
这种方式访问的其实就是1.2中的servlet方式。
执行过程:
1)浏览器中输入http://localhost:8080/test/index.jsp
2)tomcat获取http://localhost:8080/test/index.jsp
3)调用tomcat的work目录下test项目中index.jsp对应的servlet.class文件例如index_jsp.class(由jsp到servlet类的过程是tomcat自动转换的)
4)执行index_jsp.class文件,返回html代码
5)tomcat负责与浏览器进行交互,将html代码在浏览中进行显示
进行显示
1.4http://localhost:8080/test/index.action(后可附带传入参数)
这种方式,一般是使用了struts等框架实现的。
执行过程:
1)浏览器中输入http://localhost:8080/test/index.action
2)tomcat获取http://localhost:8080/test/index.action
3)根据web.xml中的struts映射配置,定位到tomcat的webapp文件夹下test项目中对应的class文件,例如index.class文件
4)执行index.class文件,并且struts框架会对指定jsp页面进行渲染,在浏览器显示:
例如struts框架,通过在struts.xml配置文件中设置对哪个jsp页面进行解析,生成html代码:
<action name="login" class="buct.scanner.action.LoginAction">
<result name="success">/login.jsp</result>
<result name="input">/index.jsp</result>
</action>
5)tomcat负责与浏览器进行交互,将html代码在浏览中进行显示
整个渲染过程是由struts框架完成的(即通过程序的运行过程中,调用struts的jar包中的class,jar包中的class运行过程中根据需要会对struts.xml配置文件进行解析),而不是tomcat完成。
=========综合分析一下几种方式的演变过程========
发展顺序是:
1http://localhost:8080/test/index.html
2http://localhost:8080/test/index
3http://localhost:8080/test/index.jsp
4http://localhost:8080/test/index.action
下面说说为什么要如此演变,是为了解决之前方式的什么弊端或者问题?
1)http://localhost:8080/test/index.html即静态页面的方式,只能加载静态页面,如果我新建了一个用户,要进行saveAdd操作,这种方式是不能实现的。
2)所以有了http://localhost:8080/test/index即servlet的方式,这种方式可以通过servlet.class文件进行后台数据库操作,并拼接html代码在浏览器中进行显示。
3)既然有了http://localhost:8080/test/index即servlet这种方式,为什么sun公司还要发明jsp?因为servlet虽然可以实现数据库操作,但是要拼接html,这种方式很不直观很不形象,所以发明了jsp。在jsp中既可以书写java代码访问数据库,又可以直观的看到html代码,如这个例子这样http://zhidao.baidu.com/link?url=nraE1vPnTZ1IkkTYIyqO0iqahx71IfoDc0yNO89zhFryjDiotC9l-qOshTeHhAWgb9caNFAGuGOEzYpwU64YFq。
4)既然有了jsp这种方式,为什么还要http://localhost:8080/test/index.action这种使用struts等框架的方式?因为jsp虽然可以书写Java代码访问数据库,又可以直观的看到html,但是html代码和java代码混在一起,不利于程序的可读性,代码书写还是比较混乱。所以有个struts、springmvc、struts等方式,实现java代码和html代码的分离即区分前端和后端,java代码在后端书写,html代码在jsp中书写并配上参数传递机制。
其实http://localhost:8080/test/index.action方式及struts等框架方式,是对http://localhost:8080/test/index即servlet的方式的升级:①servlet方式返回的是html代码(这些是程序员自己做的),然后tomcat接受html代码,并与浏览器交互,在浏览器中显示②struts通过对某类中的指定jsp代码进行解析并返回html代码(这些是struts做的,程序员不需要做,程序员只需要在struts.xml中指定该类要显示的jsp,并书写jsp界面),然后tomcat接受html代码,并与浏览器交互。