Servlet入门
-
Servlet线程特性:实例化一次,多线程运行
-
请求和响应接口 Servlet API中
- javax.servlet.ServletRequest[接口]<-javax.servlet.http.HttpServletRequest
- javax.servlet.ServletResponse[接口]<-javax.servlet.http.HttpServletResponse
-
利用Servlet对客户端不同方式请求做出动态响应
- 3种方式访问服务端
- 直接从地址栏输入URL访问
- 网页中点击链接访问
- 网页中通过表单提交访问
- ajax也算是一种访问方式,但注意不能请求跳转页面。
- 补充:后面的axios也算是一种访问方式。
- 3种方式访问服务端
-
Servlet获取普通请求的参数
- 向Servlet传递请求参数的方式
- URL:添加 ?name1=value1&name2=value2
- 表单提交:表单元素name为参数 value值为参数值
- 补充:表单提交包括隐藏域的提交
- ajax方式提交请求参数/axios方式提交请求参数
- Servlet中获取请求参数的方式:
- 请求接口中提供与获取请求参数相关的方法
- getParameter(name) 返回指定名字的请求参数的值,String型
- getParameterMap() 将所有请求参数的name和value值作为键值对返回,存储在Map对象中
- getParameterNames() 返回所有请求参数的名字,存在集合对象中
- getParameterValues(name) 返回指定名字的请求参数值,String[],适用一个名字对应多个值的情况
- 请求接口中提供与获取请求参数相关的方法
- 向Servlet传递请求参数的方式
-
Servlet初始化参数 见前章 只在当前Servlet中使用
-
补充:可通过servletconfig接口来获取到初始化参数的相关信息。
doPost()/doGet()中: getInitParameter("name");//获取指定name的初始化参数值
-
-
全局参数 context-param 所有Servlet中都能使用
位置:web.xml的根节点中 <context-param> <param-name>props</param-name> <param-value>hello</param-value> </context-param> 访问方式: doPost()/doGet()方法中: //先获取到ServletContext上下文对象 ServletContext context = this.getServletContext(); //调用该上下文对象的该方法 context.getInitParameter("props");//hello
-
Servlet加载启动选项 见前章
-
Servlet配置中通配符用法
两种方式 位置:servlet-mapping中 <url-pattern>*.action</url-pattern> <url-pattern>/admin/*</url-pattern> 注意:这里不能同时使用通配符和后缀 比如 /admin/*.do
-
web.xml首页及错误页面等其他配置信息
位置:web.xml根目录 配置默认首页:当不指定具体访问路径时,默认访问默认首页 <welcom-file-list>//按顺序访问,都不存在报404错误 <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcom-file-list> 位置:web.xml根目录 配置错误页面:当应用中出现响应错误或异常时,可以跳转到错误页面 <error-page>//出现404错误,自动跳转到404.html <error-code>404</error-code> <location>/404.html</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/exception.html</location> </error-page>
-
Servlet获取请求头属性方法—Request的相关方法
客户端请求服务端Servlet时,会传递给服务器一系列的HTTP请求头属性,请求接口中定义了系列方法获取请求属性。
- getHeader(String name) 返回某个请求头属性的值,返回String
- getHeaders(String name) 返回指定名字的请求头属性的值,适用一个名字对应多个值得情况
- getIntHeader(String name) 返回类型为Int类型的请求头属性值
- getDateHeader(String name) 返回日期类型的请求头属性 ,返回long
- getHeaderNames() 返回所有请求头属性的名字
-
重要的请求头属性(请求长度、请求MIME类型、请求refer等)
Content-Length: 请求长度 request.getIntHeader("") Accept: MIME类型 request.getHeader("") Referer: 来路路径 request.getHeader("")
-
路径问题
- 服务器根目录:服务器IP+":port";
- 上下文根目录:服务器IP+":port"+工程部署后根目录(通常为项目名称);
- 注意:每一个容器的根目录和上下文目录可能不一样。例框架和tomcat的容器。
- 比如Dynamic Web Project 下的WebContent就被Tomcat视为上下文根目录
- 所以每个容器注意看自己容器的上下文目录
- 有无"/":类比sturts2,有"/"表示从Action容器根目录开始寻找(也就是上下文根目录),如果无则最好给出访问资源的绝对路径。–这里不是很清晰,可以略过。
- 超链接是在servlet容器内进行(即服务器根目录)。所以struts2中最好给出绝对路径来访问资源。但是Springmvc中,似乎不用也是可以的。
-
路径问题
-
相对路径:
默认,相对于当前网络路径的上一级目录,等效于./
http://172.18.20.2:8080/serveletdemo/b img/aaa.jpg => http://172.18.20.2:8080/serveletdemo/img/aaa.jpg http://172.18.20.2:8080/serveletdemo/b/c img/aaa.jpg => http://172.18.20.2:8080/serveletdemo/b/img/aaa.jpg ../ 查找上一级目录 http://172.18.20.2:8080/serveletdemo/b/c ../img/aaa.jpg => http://172.18.20.2:8080/serveletdemo/img/aaa.jpg
base标签 --解决了相对路径的问题
指定了相对路径的根路径,
http://172.18.20.2:8080/serveletdemo/b/c/e/d/f img/aaa.jpg => http://172.18.20.2:8080/serveletdemo/img/aaa.jpg
绝对路径:相对于根路径
/img/aaa.jpg => http://172.18.20.2:8080/img/aaa.jpg
-
-
补充 :路径问题
-
HTML下
-
使用场景
- from action
- a链接 href
- 图片
-
路径
//下面是jsp在默认WebContent下时 <!--相对路径 默认于相对于当前路径的上一级目录--> <a href="login.jsp"> </a> --->上下文目录 localhost:8080/jspdemo/login.jsp 通过<base>标签矫正相对路径为当前上下文路径 <base href="<%= application.getContextPah() %>"> <!--绝对路径--><a href="/login.jsp"></a> ---->服务器根目录 localhost:8080/login.jsp//例:如果该jsp在/product/h <!--相对路径 --><a href="login.jsp"> </a> ----相对的是当前路径的上一级 localhost:8080/jspdemo/product/login.jsp <!--绝对路径--> <a href="/login.jsp"></a> ---服务器根路径 localhost:8080/login.jsp
-
-
Servlet中
- 使用场景
- 请求转发
- 响应重定向
- servlet 命名为/a/b
//请求转发下 绝对路径 ("/a/b") ----相对于上下文根目录 localhost:8080/jspdemo/a/b 相对路径 ("a/b") ----相对于上一层路径 localhost:8080/jspdemo/a/a/b 总结:servlet命名+/ url也+/ //响应重定向---这个则是与HTML下相同 绝对路径 ("/a/b") ---服务器路径 localhost:8080/a/b 相对路径 ("a/b") ---相对于上一层路径 localhost:8080/a/a/b
- 使用场景
-