servlet基础学习

手动实现一个servlet程序

  1. 编写一个类去实现Servlet接口

    1. 新建一个HelloServlet的java类

    image-20210121132012488

    image-20210121132203254

  2. 实现Servlet方法,处理请求,并相应数据

    1. ,然后继承HttpServlet接口,重写doGet方法

  3. 到web-xml去配置Servlet访问地址

    image-20210121135220374

  4. 到浏览器去访问配置的servlet地址

    image-20210121135244143

  5. 查看idea控制台返回的数据

    image-20210121135324640

设置工程路径

  1. 点击Edit Configurations…

    image-20210121134610257

  2. 下面这个就是工程路径,可以更改

image-20210121134723905

使用idea创建一个Servlet程序

右键包名,new一个Servlet程序,接着输入Servlet程序名,然后就创建了一个Servlet程序

image-20210121135640990

image-20210121135905169

创建好的Servlet程序会自动帮我们继承HttpServlet接口,自动重写doGet方法和doPost发法,但是不会帮我们把web-xml配置好,所以我们还需要配置web-xml

image-20210121140024004

配置web-xml

image-20210121140151413

没有创建servlet选项的解决办法

菜单选项中没有Servlet选项

image-20210121140420014

解决办法:

image-20210121140904356

image-20210121141006343

image-20210121141046715

然后就可以使用idea自动创建servlet项目了

Get请求和Post请求

实例

在Servlet1中编写代码

image-20210121141516969

在web目录下创建一个a.html 编写代码

method:选择提交方式

image-20210121142238104

运行tomcat,浏览器输入地址,点击提交,浏览器跳转到页面image-20210121142405820

image-20210121142540671

查看idea输出,输出了doGet方法里面的内容

image-20210121142503408

Get请求有哪些:

​ 1)form标签 method = get

​ 2)a标签

​ 3)link标签引入css样式

​ 4)Script标签引入js样式

​ 5)img标签引入图片

​ 6)iframe标签引入HTML页面

​ 7)浏览器地址栏中输入地址后敲回车

Post请求有哪些:

​ 1)form标签 method = post

HttpServletRequest类

HttpServletRequest类有什么用:

每次只要有请求进如到tomcat服务器中,tomcat服务器就会把请求过来的Http协议信息解析好封装到request对象中,然后传递到servlet方法(doGet或doPost)中,我们可以通过HttpServletRequest对象,获取到所有的请求信息。

HttpServletRequest类常用方法:

  1. getRequestURL() 获取请求的统一资源定位符(绝对路径)

  2. getRequestURI() 获取请求的资源路径

  3. getRemoteHost() 获取请求的ip地址

  4. getHeader() 获取请求头

  5. getParameter() 获取请求的参数

  6. getParameterValues() 获取请求的参数(多个值的时候使用)

  7. getMethod() 获取请求的方式

  8. setAttribute() 设置域数据

  9. getAttribute() 获取域数据

  10. getRequestDispatcher() 获取请求转发对象

  11. setCharacterEncoding(“utf-8”) 设置post传输字符编码

Get请求接收参数

代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1. getRequestURL()   获取请求的统一资源定位符(绝对路径)
        System.out.println("URL = > "+request.getRequestURL());

//        2. getRequestURI()    获取请求的资源路径
        System.out.println("URI = >" +request.getRequestURI());

//        3. getRemoteHost()    获取请求的ip地址
        System.out.println("IP地址 = > "+request.getRemoteHost());

//        4. getHeader()            获取请求头
        System.out.println("user-agent请求头 = >"+request.getHeader("User-Agent"));

//        7. getMethod()            获取请求的方式
        System.out.println("请求方式:"+request.getMethod());
    }

运行结果:

image-20210121163709733

例子:getParameter() getParameterValues()

创建一个简单的提交页面

image-20210121165938172

然后创建一个servlet程序

注:因为getParameterValues()是获取多个数,所以要用Arrays.asList将数组转换为集合

image-20210121170010642

运行结果:

image-20210121170341558

Post请求接收参数

使用post请求会表单时,会出现中文乱码

image-20210121170800306

所以我们要先在请求时设置post传输字符编码

setCharacterEncoding(“utf-8”)

image-20210121171016434

HttpServletResponse类

HttpServletResponse类和HTTPServletRequest类一样,每次请求进来,tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HTTPServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息

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

两个输出流

字节流 getOutputStream();

字符流 getWriter();

两个流只能使用一个

往客户端回传数据

回传数据时,必须设置字符编码,否则看不懂

代码:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset = utf-8");
        PrintWriter out = resp.getWriter();
        out.print("学习就是最好的休息");
    }

Servlet请求转发

什么是请求的转发:

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

图解:

image-20210121171233647

流程:

  1. 第一个servlet程序获取请求的参数

  2. 设置域数据

  3. 获取请求转发的对象(第二个servlet程序)

  4. 跳转到第二个servlet程序

  5. 第二个servlet程序获取请求的参数

  6. 获取域数据

  7. 执行自己的业务

    第一个servlet程序截图:

image-20210121173822504

第二个servlet程序截图:

image-20210121173903559

特点:

请求转发的特点:

浏览器地址栏没有变化

他们是一次请求

他们可以共享Request域中的数据

可以转发到web-inf目录下

不可以访问工程外的资源

Servlet请求重定向

什么是请求重定向:客户端访问服务器,然后服务器给客户端一个新的地址,客户端去访问

图解:

1610779979476

流程:

  1. 浏览器访问第一个servlet程序

  2. servlet程序告诉客户端新的地址

  3. 客户端从新访问新的地址

    截图:

    代码

    response.setHeader("location","http://localhost:8080/01Servlet/response2");
    
    image-20210121180220258

​ 第二种写法(推荐):

​ 代码:

response.sendRedirect("http://localhost:8080/01Servlet/response2");

image-20210121180419468

特点:

  1. 浏览器地址栏会发生变化
  2. 发生两次请求
  3. 不共享Request域中的数据
  4. 不能进入web-inf目录
  5. 可以访问工程以外的地址

Base标签

所有相对路径在工作时候都会参照当前浏览器地址栏中的地址来进行跳转

用法:忽略浏览器地址栏的地址,使用自己定义的地址

写法:

<base href = "地址">

例子:

在web目录下建立index.html,在index.html中建立跳转到c.html的链接到servlet程序的链接

在web目录下建立里a目录,a目录下建立b目录,b目录下建立c.html 在c.html中建立跳转到index.html的链接

在servlet程序中,请求转发到c.html

代码截图:

index.htmlimage-20210121183803190

servlet程序截图

image-20210121183840657

c.html截图

image-20210121183908197

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值