Servlet之request&response

目录

Servlet

概念

配置Servlet

执行原理

 Servlet中的生命周期方法:

Servlet体系结构

Servlet相关配置

request

request对象和response对象的原理

request功能

response

功能

forward 和  redirect 区别

路径写法

相对路径

绝对路径


Servlet

概念

 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
 将来我们自定义一个类,实现Servlet接口,复写方法。

配置Servlet

 在web.xml中配置:
        <!--配置Servlet -->
        <servlet>
            <servlet-name>demo1</servlet-name>
            <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>demo1</servlet-name>
            <url-pattern>/demo1</url-pattern>
        </servlet-mapping>

执行原理

    1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
    2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
    3. 如果有,则在找到对应的<servlet-class>全类名
    4. tomcat会将字节码文件加载进内存,并且创建其对象
    5. 调用其方法

 Servlet中的生命周期方法:

1. 被创建:执行init方法,只执行一次
        * Servlet什么时候被创建?
            * 默认情况下,第一次被访问时,Servlet被创建
            * 可以配置执行Servlet的创建时机。
                * 在<servlet>标签下配置
                    1. 第一次被访问时,创建
                        * <load-on-startup>的值为负数
                    2. 在服务器启动时,创建
                        * <load-on-startup>的值为0或正整数

* Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
            * 多个用户同时访问时,可能存在线程安全问题。
            * 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

    2. 提供服务:执行service方法,执行多次
        * 每次访问Servlet时,Service方法都会被调用一次。
    3. 被销毁:执行destroy方法,只执行一次
        * Servlet被销毁时执行。服务器关闭时,Servlet被销毁
        * 只有服务器正常关闭时,才会执行destroy方法。
        * destroy方法在Servlet被销毁之前执行,一般用于释放资源
 

Servlet体系结构

Servlet -- 接口
        |
    GenericServlet -- 抽象类
        |
    HttpServlet  -- 抽象类

    * GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
        * 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

    * HttpServlet:对http协议的一种封装,简化操作
        1. 定义类继承HttpServlet
        2. 复写doGet/doPost方法

Servlet相关配置

1. urlpartten:Servlet访问路径
        1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
        2. 路径定义规则:
            1. /xxx:路径匹配
            2. /xxx/xxx:多层路径,目录结构
            3. *.do:扩展名匹配

request

request对象和response对象的原理

    1. request和response对象是由服务器创建的。我们来使用它们
    2. request对象是来获取请求消息,response对象是来设置响应消息

request功能

 String getMethod()  获取请求方式 :GET
String getContextPath()(*)获取虚拟目录:/day14
String getServletPath()获取Servlet路径: /demo1
String getQueryString()获取get方式请求参数:name=zhangsan
 String getRequestURI():        /day14/demo1(*)获取请求URI:/day14/demo1
StringBuffer getRequestURL()  :http://localhost/day14/demo1(*)获取请求URI:/day14/demo1
 String getProtocol()获取协议及版本:HTTP/1.1
 String getRemoteAddr()获取客户机的IP地址:
(*)String getHeader(String name)通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames()获取所有的请求头名称
BufferedReader getReader()获取字符输入流,只能操作字符数据
ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据
String getParameter(String name)根据参数名称获取参数值    username=zs&password=123
String[] getParameterValues(String name)根据参数名称获取参数值的数组  hobby=xx&hobby=game
 Enumeration<String> getParameterNames()获取所有请求的参数名称
Map<String,String[]> getParameterMap()获取所有参数的map集合
request.setCharacterEncoding("utf-8")在获取参数前,设置request的编码,解决中文乱码问题
RequestDispatcher getRequestDispatcher(String path)通过request对象获取请求转发器对象
forward(ServletRequest request, ServletResponse response) 使用RequestDispatcher对象来进行转发
void setAttribute(String name,Object obj)存储数据
Object getAttitude(String name)通过键获取值
void removeAttribute(String name)通过键移除键值对
ServletContext getServletContext()获取ServletContext

response

功能

PrintWriter getWriter()字符输出流
ServletOutputStream getOutputStream()字节输出流
 response.setStatus(302);资源跳转的方式,设置状态码为302
response.setHeader("location","/day15/responseDemo2");设置响应头location
response.sendRedirect("/day15/responseDemo2");简单的重定向方法

forward 和  redirect 区别

* 重定向的特点:redirect
            1. 地址栏发生变化
            2. 重定向可以访问其他站点(服务器)的资源
            3. 重定向是两次请求。不能使用request对象来共享数据
        * 转发的特点:forward
            1. 转发地址栏路径不变
            2. 转发只能访问当前服务器下的资源
            3. 转发是一次请求,可以使用request对象来共享数据

路径写法

相对路径

* 如:./index.html
                    * 不以/开头,以.开头路径

                    * 规则:找到当前资源和目标资源之间的相对位置关系
                        * ./:当前目录
                        * ../:后退一级目录

绝对路径

* 如:http://localhost/day15/responseDemo2        /day15/responseDemo2
                    * 以/开头的路径

                    * 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
                        * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
                            * 建议虚拟目录动态获取:request.getContextPath()
                            * <a> , <form> 重定向...
                        * 给服务器使用:不需要加虚拟目录
                            * 转发路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值