Java学习1.25————JavaWeb(Servlet)

ServletConfig和ServletContext是Servlet的两个核心对象

HttpServlet继承了GenericServlet,GenericServlet实现了Servlet,ServletConfig和Serializable。

GenericServlet中有一个getServletConfig()方法用于获取配置信息。比如资源的别名

在web.xml用可以设置初始化信息

Servlet上下文对象(又叫Servlet域对象):ServletContext

作用:可以像map一样存储数据,可以获取全局共享初始化数据

域:取值的范围

ServletContext的作用域范围是整个工程,生命周期是从Servlet创建到销毁,即当Servlet的实例被创建,ServletContext就也被创建,在当前工程任意一个类获取的ServletContext都是同一个,它的内存地址永远是相同的。在当前工程的任何地方都能获取到ServletContext中的数据。

<!--配置全局共享数据-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost/3306</param-value>
    </context-param>

获取方法:
1、根据getServletConfig()的对象servletconfig获取

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取Servlet配置对象
        ServletConfig servletConfig = getServletConfig();

        //获取Servlet域对象
        ServletContext servletContext = servletConfig.getServletContext();
		//向ServletContext中存值得方法
		//ServletContext的作用域范围是Servlet的整个生命周期
		servletContext.setAttribute("asdf","sfd");
		//获取域中数据方法servletContext.getAttribute()
		Object asdf = servletContext.getAttribute("asdf");
        
        Object sfd = servletContext.getAttribute("sfd");
		//获取全局共享初始化数据的方法servletContext.getInitParameter()
		String url = servletContext.getInitParameter("url")
		
    }

servletContext.getAttribute()是获取域中的数据,servletContext.getInitParameter()是获取全局共享数据

HTTP协议
所谓HTTP协议,客户端和服务端通信时,需要遵守的规则,叫HTTP协议
请求分为get请求和post请求

get请求
1、请求行
1)请求方式get
2)请求的资源路径【+?+请求参数】
3)请求的协议的版本号HTTP/1.1

2、请求头
key:value组成不同的键值对,表示不同的含义
例如:
在这里插入图片描述

POST请求
1、请求行
1)请求方式post
2)请求的资源路径【+?+请求参数】
3)请求的协议的版本号HTTP/1.1

2、key:value组成不同的键值对,表示不同的含义

3、请求体:就是发送给服务器的数据

get请求会把所有的数据拼接在地址栏上,所以没有请求体。
get提交方式不能在地址栏中手动拼接参数,它会在你输入数据后解析到地址栏上,post提交方式可以手动输入数据在地址栏上。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
<form action="http://localhost:8080/test/05" method="get">
    
    <input type="text" name="username">
    <input type="text" password="password">
    <input type="submit" value="提交">

</form>
</body>
</html>

get方式,通过在text框中输入数据,解析后数据会显示在地址栏上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
<form action="http://localhost:8080/test/05?username = zs&password=root" method="post">

    <input type="submit" value="提交">

</form>
</body>
</html>

post方式
可以直接在地址栏后手动拼接数据,也可以不拼接。
若是不拼接提交后数据不会显示在地址栏,而是在请求体(form data)中;若是拼接,所拼接参数会显示在地址栏中;若是在text框输入了数据,且地址栏中拼接了参数,则参数会显示在地址栏和query string parameter 中,所输入数据则在请求体(form data)中。

常用响应码说明:
200请求成功
302请求重定向
404请求地址错误
500代码错误

HttpServletRequest类
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。

HttpServletRequest类的常用方法:

1)getRequestURI()获取资源路径
2)getRequestURL()获取请求的统一资源定位符(绝对路径)
3)getRemoteHost()获取客户端的ip地址
4)getHeader()获取请求头
5)getParameter()获取请求的参数(当参数有多个值时,只获取第一个)
6)getParameterValues()获取请求的参数(多个值的时候使用)
7)getMethod()获取请求的方式
8)setAttribute(key,value)设置域数据
9)getAttribute(key)获取域数据
10)getRequestDispater(“xxx”)获取请求转发对象(括号中参数是要转发的资源路径)

RequestDispatcher requestdispatcher = request.getRequestDispatcher("/hello")//请求转发
requestdispatcher.forward(request,response); //指向具体的资源

doGet方法的参数request也是域对象,作用域是一次请求之内,一次请求之内即地址栏上的地址没有变化。

请求转发
指的是服务器收到请求后,从一个资源跳转到另一个资源的过程。
在这里插入图片描述

HttpServletResponse类
每次只要有请求进入Tomcat服务器,Tomcat服务器就会创建一个Response对象传递给Servlet程序使用。HttpServletResponse表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。

往客户端回传数据

字节流和字符流对象不能同时存在

字节流getOutputStream()
常用于下载(传递二进制数据)

字符流getWriter()
常用于回传字符串(常用)

响应的乱码解决
setContentType(“text/html;charset=UTF-8”)

请求重定向
请求重定向,指的是客户端给服务器发请求然后服务器告诉客户端去新地址访问。(旧地址可以已经废弃)
请求重定向使用的是response对象
1、原始方法(源代码方式)

//请求重定向
       response.setStatus(302);

       //设置响应头,执行地址的跳转
       response.setHeader("location","https://www.baidu.com/");

2、用sendRedirect()方法

//方案二
       response.sendRedirect("https://www.baidu.com/");

请求重定向是进行了两次请求的,所以不能通过请求重定向进行request域对象的请求转发。重定向在执行中会发生地址的跳转,并且不共享request域中的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值