Servlet从入门到熟练,给你不一样的体验

1.认识一下吧—(servlet)—!

1)它就是一个Java类,它比较特殊,它必须继承HttpServlet类或者是实现Servlet接口。
2)不同于普通的Java类,它的运行必须在WEB容器中运行
3)编写完毕后,必须到动态站点的配置文件web.xml中去注册
4)**它是运行在服务器端的程序,它用来处理浏览器发送的请求的类。**然后处理完毕后,把结果响应给浏览器。

2. 插播一下哦—(动态web的前世和今生)—!

1)现有html静态网站,它的特点是内容是一成不变的。如果要发布新的内容,必须编写新的页面或者改写现有的html页面,完毕后需要重新发布和启动。
2)静态网页的不足在于无法应付用户的复杂需求。要解决这个问题早期是cgi程序,这就是所谓的公共的网关接口。一般是用c语言编写。
3)后来我们要追求用户体验,比如需要css样式,这意味着必须把样式也通过输出。这样构建动态网页的效率太低。最好是html结合输出来处理,把css和标签用html的语法描述,把变化的部分通过代码描述。这样的技术就是早期动态web技术,php、jsp、asp的做法。
4)我们可以创建jsp文件,该文件可以直接编写html标签和css样式,js等等内容,同时在jsp文件中有特定的语法来执行java代码。然后web容器(Tomcat)是一个程序,它可以把jsp文件翻译成Servlet代码(Java代码),然后编译成class字节码,再去执行。这样就解决了静态页面的编辑高效性问题,又解决了程序部分的问题。

在这里插入图片描述

3.servlet的作用

**1)jsp页面做页面的显示,我们又称为视图。它属于表示层技术。mvc-v(view)
2)servlet就不做视图,它的功能就是做所谓的控制器。mvc-c(conroller)
3)原来学习的service和dao就是所谓的模型.mvc-m(model)**

4.创建servlet和注册servlet

步骤:
1)编写Servlet
2)注册
3)部署
4)启动
5)测试
1)如何在idea中创建动态web?
2)在WEB-INF下面添加一个lib文件夹,里面拷贝jar
a)javax.servlet.jsp-api-2.3.1.jar:编译jsp用的jar
b)javax.servlet-api-3.1.0.jar:servlet支持的jar
c)jstl-1.2.jar:jstl支持的jar
其他的包是数据库mysql的jar,还要jnuit的jar
3)创建包 com.java.servlet在里面创建第1个Servlet
在这里插入图片描述
4)体会servlet作为表示层视图的作用(写1遍,理解就行)

package com.java.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**

  • 体会Servlet作为视图的作用

  • 目的是让大家知道它可以做视图,后面我们用它不要做视图,让它做控制器

  • 1)访问Servlet的时候,是通过url(网址)访问的

  • 2)程序必须要具备通过url找到Java类,并执行响应的方法的能力

  • http://localhost:8080/day02/fisrt.do
    */
    public class FirstServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1、设置响应格式和编码
    response.setContentType(“text/html;charset=UTF-8”);
    //2、PrintWriter是用来向页面输出内容
    PrintWriter writer = response.getWriter();

    writer.print("<!DOCTYPE html>");
    writer.print("<html lang=\"en\">\n");
    writer.print("<head>");
    writer.print("<meta charset=\"UTF-8\">");
    writer.print("<title>Title</title>");
    writer.print("</head>");
    writer.print("<body>");
    writer.print("现在实验把Servlet作为视图");
    writer.print("</body>");
    writer.print("</html>");
    

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }
    }
    5)到web.xml中注册

<?xml version="1.0" encoding="UTF-8"?>

<servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>com.java.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/fisrt.do</url-pattern>
</servlet-mapping>
## 5.servlet的生命周期 **1)servlet的继承关系** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200802211045394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzI4NjUw,size_16,color_FFFFFF,t_70) 解读:自己编写的Servlet继承抽象HttpServlet,所以我们必须实现它的抽象方法。然后HttpServlet继承抽象类GenericServlet,GenericServlet实现了三个接口,分别是Serializable、ServletConfig、Servlet。 2)实验,查看生命周期的特点 1)第1次请求 创建Servlet实例 执行初始化方法init() 执行service()方法 2)非第1次请求 执行service() 3)服务器关闭 destory()方法执行 结论:生命周期的几个阶段 1)用户发送请求,创建Servlet实例,只创建1次 2)初始化init()方法会执行,无论用户请求多少次,只执行1次 3)调用service()方法处理用户请求,用户请求多少次,那么该方法执行多少次 4)当服务器关闭或者服务器崩溃,就会执行destory()方法来销毁servlet ## 6.了解一吧---HttpServletResponse---! **1、什么是Response?** 它是http协议的响应协议的api体现,换句话说,响应协议就是用这个java对象来描述的。 **2、介绍该对象的方法**

方法名 解释
setStatus(302) 设置状态码
setHeader(“Location”,"/Servlet/servlet2") 设置响应头

sendRedirect() * 重定向的简化方式
response.setHeader(“refresh”, “5;url=http://www.baidu.com”); 设置5秒后跳转
setCharacterEncoding(“UTF-8”); 设置响应的编码
setHeader(“content-Type”, “text/html;charset=utf-8”); 设置响应的格式和编码
response.setContentType(“text/html;charset=utf-8”); * 设置响应格式和编码的简化方式
3、response对象的作用
1)它用来响应用户的请求(就是往浏览器中写数据)
2)它可以设置响应头
比如:设置重定向,设置5秒后跳转,设置响应编码
3)设置302重定向
案例: 设置响应头,登录错误,5秒后跳转到登录页面
4)设置响应头的格式和编码

7.这又是什么呢—ServletConfig对象—!

1、ServletConfig对象的作用?
A)每个Servlet都有自己的名字,该对象可以获得该Servlet的名字。String name=getServletName()
B)Servlet是可以有初始化参数的,该对象可以获得参数参数 String value=getInitParameter(参数名)
C)可以通过该对象获得在Servlet中初始化参数的名字 Enumeration getInitParameterName();
2、为什么设计Servlet API的时候,让Servlet带初始化参数(初始化参数的意义)
当我们在web.xml中为Servlet配置1,该Servlet会在容器启动的时候就会初始化Servlet对象,并去执行init()方法。不配置,就是通过通过浏览器发送请求的时候才会初始化Servlet对象,并执行init()方法。两者启动的时机不一样。
我们是否可以利用这一点(servlet中带参数,并设置load-on-startup节点),让Servlet在容器启动的时候执行init()方法,从而去做一些额外的事情。这也就是web框架编写时的处理思路。比如SpringMVC框架就是如此。

8.ServletContext对象

1、作用
1)网站本身也可以有初始化参数,该对象可以用来获得站点的初始化参数。 getInintParameter(name)
2)作为作用域对象(暂时不讲解)
3)可以获得资源在服务器上的绝对路径
2、案例
需求:获得webapp下面的文件夹images在服务器中的真实路径。获得web上下文参数。
1)编写ServletContextDemoServlet

package com.java.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;

public class ServletContextDemoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得 ServletContext对象
ServletContext context = this.getServletContext();
//获得参数值
String uname = context.getInitParameter(“uname”);
System.out.println(uname);
//获得文件夹的真实路径
String realPath = context.getRealPath("/images");
if(null!=realPath){
File file=new File(realPath);
if(!file.exists()){
file.mkdirs();
}
}
//文件的上传路径
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
}

}
2)web.xml中的配置如下

<param-name>uname</param-name>
<param-value>zhangsan</param-value>

!今天你又进步了呦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值