JavaWeb复习

2022-03-23 20:04:20 浏览数 (1)

JavaWeb的概念

JavaWeb是指通过java语言编写可以通过浏览器访问的程序的总称叫javaweb

JavaWeb是基于请求和响应开发的

什么是请求?

客户端给服务器发送数据叫请求,request;

什么是响应?

客户端给服务器回传数据叫响应,reponse;

Web资源的分类

按实现的技术和呈现的效果不同,分为静态资源和动态资源;

静态资源:html、css、js、txt、jpg等等

动态资源:jsp页面、servlet程序等

Servlet技术

什么是servlet

1.servlet是JavaEE三大规范之一 ,规范就是接口

2.Servlet就是JavaWeb三大组件之一。三大组件分别是Servlet程序、Filter过滤器、Listener监听器.

3.Servlet是运行在 服务器上的一个Java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

实现servlet程序

编写一个类实现servlet接口

实现service方法处理请求并响应数据

到web.xml中配置servlet程序的访问地址

servlet实现类

代码语言:javascript复制
/**
 * @create: 2022/1/15
 * @author: Tony Stark
 */
public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("第一个servlet程序");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

web.xml

代码语言:javascript复制
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>firstServlet</servlet-name>
    <servlet-class>com.rpf.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>firstServlet</servlet-name>
    <url-pattern>/servlet</url-pattern>
  </servlet-mapping>
</web-app>

访问

代码语言:javascript复制
http://localhost:8080/servlet 

输出

代码语言:javascript复制
第一个servlet程序

注意

代码语言:javascript复制
<url-pattern>中的路径要以/打头

ServlertContext类

什么是ServletContext?

1.ServletContext是一个接口,它表示Servlet上下文对象

2.一个web工程,只有一个ServletContext对象实例

3.ServletContext对象是一个域对象

什么是域对象?

域对象:可以像map一样存取数据的对象,叫做域对象。

存数据setAttribute 取数据getAttribute 删除数据removeAttribute

ServletContext类的四个作用

1.获取web.xml中配置的上下文参数context-param

2.获取当前的工程路径,格式:/工程路径

3.获取工程部署后在服务器磁盘上的绝对路径

4.像map一样存取数据

HTTP协议

所谓Http协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫Http协议。

Http协议中的数据又叫报文

请求的Http格式

常用请求头说明

Accept:表示客户端可以接收的数据类型

Accept-Langueue:表示客户端可以接收的语言类型

User-Agent:表示客户端浏览器的信息

Host:表示请求时的服务器ip和端口号

响应的HTTP协议格式

1.响应行

响应的协议和版本号

响应状态码

响应状态描述符

2.响应头

key:value 不同的响应头有其不同含义

响应头和响应体之间有空行隔开

3.响应体 就是回传给客户端的数据

常用的响应码说明

200 表示请求成功

302 表示重定向

404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)

500 表示服务器已经收到请求,但是服务器内部错误(代码错误)

MIME类型说明

是HTTP协议中的数据类型 类型格式 :“大类型/小类型”,并与某一种文件的扩展名相对应

请求的转发

什么是请求的转发

请求的转发是指,服务器收到请求之后,从一次资源跳转到另一个资源的操作叫做请求转发。

base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转。

Web中的相对路径和绝对路径

在javaWeb中,路径分为相对路径和绝对路径两种:

相对路径:

代码语言:javascript复制
	 .      表示当前目录

	..  	表示上一层目录

	资源名	表示当前目录/资源名	

绝对路径:

代码语言:javascript复制
	http://ip:port/工程路径/资源路径

web中 / 斜杠的不同意义

在web中 / 斜杠是一种绝对路径

/ 斜杠 如果被浏览器解析,得到的地址是:

代码语言:javascript复制
http://ip:port/

/ 斜杠如果被服务器解析,得到的地址是

代码语言:javascript复制
http://ip:port/工程路径

HTTPServletResponse类

代码语言:javascript复制
HTTPServletResponse类的作用

HTTPServletRequest和HTTPServletResponse一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息。

如果我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。

两个输出流

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

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

两个流同时只能使用一个,使用了字节流,就不能在使用字符流,反之亦然,否则就会报错。

如何往客户端回传数据

要求:往客户端回传字符串数据

代码语言:javascript复制
/**
 * @create: 2022/1/17
 * @author: Tony Stark
 */
public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //        同时告诉服务器和客户端使用的编码格式
       resp.setHeader("Content-Type","text/html;  charset=utf-8");
       resp.setCharacterEncoding("utf-8");
        //往客户端回传字符串数据
        PrintWriter writer = resp.getWriter();
        writer.print("response响应的字符串");
        System.out.println(resp.getCharacterEncoding());
    }
}

方式二

代码语言:javascript复制
/**
 * @create: 2022/1/17
 * @author: Tony Stark
 */
public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
        resp.setContentType("text/html;charset=utf-8");
        //往客户端回传字符串数据
        PrintWriter writer = resp.getWriter();
        writer.print("response响应的字符串");
        System.out.println(resp.getCharacterEncoding());
    }

响应头也设置为了UTF-8

注意:此方法一定在获取流之前设置才有效

请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一个新地址你去新的地址访问,叫做请求重定向(因为之前的地址可能已经被废弃)。

例如我们去一家店铺,店铺搬迁了在门上贴条写搬到某某地址,你去某某地址找到店铺。

第一种方法:

代码语言:javascript复制
 //设置响应状态码302 代表重定向
        resp.setStatus(302);
        //设置响应头说明新的地址在哪里
        resp.setHeader("Location","http://localhost:8080/responseTwo");

public class ResponseOne extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("房屋升级,店铺搬迁!!!");
        //设置响应状态码302 代表重定向
        resp.setStatus(302);
        //设置响应头说明新的地址在哪里
        resp.setHeader("Location","http://localhost:8080/responseTwo");
    }
}

public class ResponseTwo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("房屋搬迁到这里了");
    }
}

访问

代码语言:javascript复制
http://localhost:8080/responseOne

页面显示

地址

代码语言:javascript复制
http://localhost:8080/responseTwo

内容

代码语言:javascript复制
房屋搬迁到这里了

第二种方式(推荐)

代码语言:javascript复制
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("房屋升级,店铺搬迁!!!");
        resp.sendRedirect("http://localhost:8080/responseTwo");
    }

重定向特点:

1.浏览器地址栏会发生变化

2.两次请求

3.不共享Request域中数据

4.不能WEB-INF下的资源

5.可以访问工程以外的资源

0 人点赞