简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
目前JavaEE中的主流框架(SpringMVC等)都是基于Servlet的req,rep实现的前后端交互功能
localhost:8080
localhost:当地地址
8080:tomcat部署的端口
http://localhost:8080/Servlet02_war_exploded/requestapi
这是访问路径,然后tomcat服务器将访问的内容传回浏览器进行显示。
访问的是当地的tomcat所以是localhost:8080.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
version="4.0">
<!-- servlet标签给tomcat配置servlet程序-->
<servlet>
<!-- 给sevlet程序起别名-->
<servlet-name>HelloServlet</servlet-name>
<!-- 全名与别名绑定-->
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<!-- /hello表示路径为:http://ip:port/工程路径/hello-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
<!--原理首先给实现servlet接口的java程序起别名,然后根据别名绑定对应的路径-->
<!--运行时一旦对应的路径文件被访问就立即执行别名对应的servlet程序的servlet函数-->
路径解析
对于Tomcat进行配置到C盘然后再在localhost文件夹中配置资源文件路径等信息。
tomcat服务器指向的是可执行文件,不是源文件路径。
而可执行文件是idea自动编译的out文件夹,所以路径和源文件不一样。
localhost文件夹内配置了资源xml文件。
实际运行中http://localhost:8080/指的就是C盘中对应项目的localhost文件夹内的资源xml文件,因此xml文件中Context的path属性值可以改变只要其映射的docBase资源路径不变即可。
于是完整的路径为
http://localhost:8080/xml配置文件path属性值(其实和xml文件名一样)映射为docBase属性值/基于docBase路径的资源访问
XML文件名还有path指定的别名是一致的,自然也是可以修改的,毕竟主要是起映射作用,用的是docBase值。
访问流程:
先访问C盘对应项目的localhost文件夹,根据xml文件path属性映射的docBase值到对应的out文件的具体路径,再访问运行对应的out文件夹中的可执行文件
项目运行时候的网址
因为源文件(.java)和运行文件(.class)不一样,运行时运行,class所以路径和源文件不一样。
localhost文件夹里有Tomcat配置xml然后使用配置好的别名进行访问对应的class文件(out文件夹)。
这也是为什么引用图片的时候要使用…/或者./因为真正的路径并不是idea里面src的路径。
图片会再次编译复制在是对应out文件夹路径里面。
而且多用xml文件标签里面的class属性指定对应的可运行类,因为class文件夹在out里面,编译前是不知道的,需要class属性进行配置和指定(可见spring框架xml文件的编写)。
到时候运行的时候对应的路径都会重新按照out文件夹里面的配置运行。
http://localhost:8080/ServletJavaWeb/
可以通过Edit Configuration起一个别名类似映射关系,代替工程名,但是.class文件的名字没有改变。
响应码
Servlet请求转发
转发的时候要将本页面的request一起转过去,因为新设置的属性并没有真实写入web.xml中,当servlet2需要使用的时候就得通过request参数从内存中提取。
request.setAttribute("key","pass");
RequestDispatcher requestDispatcher= request.getRequestDispatcher("/servlet2");
requestDispatcher.forward(request,request);
Servlet文件路径配置的真相
注意这是规定好的配置方式,class默认指向WEB-INF文件夹下的classes文件,不能人为对map进行操作
否则服务器配置出错。