Java 二阶段 Servlet Request Response

Servlet的作用

1.接受客户端的请求,动态生成网页。
2.调用业务逻辑层
3.转发和重定向

http协议

在这里插入图片描述
无状态:每次连接,都是新的。
无连接:有链接,每次用完都断开。
在这里插入图片描述

面试题

一个页面,中有四张图片,发送了几次请求?
http1.1:建立一次连接,5次请求(1次请求网页,四次请求图片)。
http1.0,建立5次连接,5次请求。

请求报文

在这里插入图片描述

响应报文

在这里插入图片描述

常见的错误

在这里插入图片描述

创建Servlet对象(放在内存中)

1.实现Servlet接口。

//必须实现1。(只执行一次)
init(ServletConfig config);
//获取Servlet的配置
ServletConfig getServletConfig()//服务方法,处理浏览器请求的方法,
//req:请求对象,封装请求的信息
//res:响应对象,封装响应信息
service(ServletRequest req, ServletResponse res);
//获取servlet的基本信息,版本,作者等
public String getServletInfo();
//销毁:tomcat关闭,会执行destory,只执行一次

第一次访问Servlet时会创建Servlet对象,并执行init方法,再执行service()方法
第二次访问Servlet时,有了Servlet对象,只执行service()方法。

当tomcat关闭时,会执行destory()方法,会销毁Servlet对象。
与浏览器无关,只有一个Servlet对象,除非tomcat关闭,才销毁Servlet对象。

2.继承GenericServlet或者HttpServlet(一般选这个)
重写doget()和dopost的方法
可以在dopost()方法中调用doget()方法,这样只需写一个,两个方法都能调用。
用浏览器访问的都是get请求,form表单里能选get或者post请求

Servlet的配置方式

一个servlet能有多个访问路径。
但是访问路径不能重复
在这里插入图片描述
/bs2相当于在这个路径下,requset.getContextPath()/bs2,所以访问Servlet,只需在上下文路径后面/bs2就可以。

在这里插入图片描述
/*.xxx不能这么写。

/aaa/bbb/*  匹配/aaa/bbb/开头的地址或者/aaa/bbb
/aaa/*/aaa 匹配/aaa/*/bbb
/aaa/bbb/ 匹配/aaa/bbb/开头的地址
不写/,不使用后缀匹配,会出现 Invalid<url-pattern>in servlet mapping

servlet加载时机

1.第一次访问servlet时创建(默认)
2.启动tomcat时创建
能修改创建的时机

<servlet>
    <servlet-name>Servlet2</servlet-name>
    <servlet-class>com.qf.Servlet2</servlet-class>
    //默认值是-1,表示第一次访问servlet创建
    //修改成>=0时,启动时创建,数越小,优先级越高。(整数)
    <load-on-startup></load-on-startup>
</servlet>

Servlet的生命过程

在这里插入图片描述

Servlet参数

<init-param>
    <param-name>username</param-name>
    <param-value>xiuer</param-value>
</init-param>
//在这能捕获<init-param>设置的参数
public void init(ServletConfig servletConfig) throws ServletException {
    System.out.println(this.getClass().getName()+this.hashCode());
    String username = servletConfig.getInitParameter("username");
}
//如果Servlet继承的是HttpServlet类,因为有getServletConfig()方法,得到ServletConfig对象。
String username = getServletConfig().getInitParameter("username");
System.out.println(username);

通过注解配置Servlet

在这里插入图片描述
注解配参数

@WebServlet(value ={"/pattern","/pattern1"} ,loadOnStartup = 0,initParams = {@WebInitParam(name="username",value = "xiaoming"),@WebInitParam(name="age",value = "18")})

Servlet的安全性在这里插入图片描述

request

处理客户端请求需要request对象
request对象包含了客户端请求的所有的内容
服务器默认ISO-8859-1编码接受。get请求没有问题。post请求会有中文乱码的问题。

String username = request.getParameter("username");
//获取数组
String[] hobbys  =request.getParameterValues("hobby");
get没有问题,post有中文问题。
//设置编码
request.setCharacterEncoding("utf-8");
//tomcat默认ISO-8859-1
//获取请求头
request.getHeader("Accepter")
//获得请求方式
request.getMethod()
//得到地址(Uinform Resouce Identifier 统一资源标识符)
request.getRequestURI()
//得到整个地址(Uniform Resouce Locator)统一资源定位符
request.getRequestUIL()
//获取IP地址
request.getRemoteAdder()

在这里插入图片描述

response

//服务器响应
//设置编码(一定要在获取流的前面)
response.setCharacterEncoding("utf-8");
//1.设置内容的类型,采用响应头的方式告诉浏览器我采用的编码,推荐使用
response.setContentType("text/html;charset=utf-8");
//2.
//response.setHeader("ContentType", "text/html;charset=utf-8");
//获取字节流,把二进制(图片,声音)数据发给浏览器要用这个流
//ServletOutputStream outputStream = response.getOutputStream();
//获取字符流,把文本数据发送给浏览器,二者不能同时用。
PrintWriter writer = response.getWriter();
//发送,可以不用关流和flush,
writer.write("<h1>nihao,秀我</h1>");~

在这里插入图片描述

转发与重定向

转发
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值