欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-20 09:49:46
...

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字节码,再去执行。这样就解决了静态页面的编辑高效性问题,又解决了程序部分的问题。

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

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
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>

!今天你又进步了呦!

相关标签: java servlet web