Servlet
概述
Servlet是由sun公司提供的一门动态Web资源开发技术
动态Web资源可以根据访问者的不同显示不同的数据,展示不同的页面,而静态Web资源则表示无论是谁去访问,得到的页面与数据都是相同的
Servlet本质是一个Java程序,但是它是无法独立运行的,需要将Servlet程序放在服务器中,由服务器调用才可执行
运行在服务器中的Servlet程序的作用是:对服务器接收的请求进行处理
配置
自己所写的Servlet需要实现Servlet
接口或者是继承其实现类,一般来说我们都会继承HttpServlet
在项目的WebContent/WEB-INF
下的web.xml
文件中需要配置Servlet的映射
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.tedu.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
浏览器可以通过访问<url-pattern>
中的地址hello
找到项目,通过相同的<servlet-name>HelloWorld
找到对应的<servlet-class>
Serlvet类的全类名com.tedu.HelloWorld
,最后通过反射来获取Servlet类的实例
Servlet的调用过程
- 浏览器向服务器发送请求,服务器从中获取
Host
头,以此来判断浏览器访问的是哪一个虚拟主机 - 根据请求行中的资源路径获取浏览器访问的哪一个Web应用中的哪一个资源
- 根据获取的资源路径到
web.xml
中进行匹配,找到映射的真实类路径 - 调用
Service
方法根据具体的请求方式将请求交给doGet/doPost
方法处理 - 从
request
中获取具体的业务需求,然后将处理的结果封装进response
响应对象中 - 按照Http协议的规定组织成响应消息发送给浏览器
Request与Response
Web服务器收到客户端的http请求时会针对每一个请求创建一个用于代表请求的request
对象与代表响应的response
对象
Request
request
对象可以获取浏览器发送过来的参数
获取请求行
getMethod()
获取请求方式如GET/POST
getRequestURI()
获取去请求资源URIgetProtocol()
获取协议名称与版本getContextPath()
获取项目名称
获取请求参数
getParameter(String)
通过请求参数的名字获取对应的参数值,只能获取一个,不存在则返回nullgetParameterValues(String)
通过请求参数名字获取所有对应参数值,不存在则返回null
setCharacterEncoding("utf-8")
设置客户端与服务器之间统一编码utf-8
Response
可以用来生成Http响应信息发送给用户
响应头
setStatus()
设置响应状态码setError()
设置错误响应状态码setHeader()
设置响应头中各种参数
获取流
getOutPutStream()
获取字节输出流getWriter()
获取字符输出流
转发与重定向
转发:request.getRequestDispatcher(地址).forward(request,response)
- 一次请求一次响应
- 地址栏不会发生改变
- 只能在同一个Web应用间进行跳转
- 可以通过
request
域来进行数据的传递setAttribute(String,Object)
给request绑定数据,是一个键值对getAttribute(String)
通过Key来获取Value(绑定的数据)
重定向response.sendRedirect(地址)
- 两次请求两次响应
- 地址栏会发生改变
- 可以跨项目进行跳转
- 不可以通过
request
进行数据的传递