博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet技术初理解与使用
阅读量:3965 次
发布时间:2019-05-24

本文共 7542 字,大约阅读时间需要 25 分钟。

a)什么是 Servlet

1、Servlet 是 JavaEE 规范之一。规范就是接口

2、Servlet 就是 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
在这里插入图片描述
在这里插入图片描述

b)手动实现 Servlet 程序

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

2、实现 service 方法,处理请求,并响应数据
3、到 web.xml 中去配置 servlet 程序的访问地址

Servlet 程序的示例代码:

package loey.servlet1;import javax.servlet.*;import java.io.IOException;public class HelloServlet1 implements Servlet{
/** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet1被访问了");}}

web.xml 中的配置:

HelloServlet1
loey.servlet1.HelloServlet1
HelloServlet1
/hello1

在浏览器输入地址http://localhost:8080/08-Servlet/hello1即可得到Hello Servlet1被访问了

在这里插入图片描述
常见的错误 1: url-pattern 中配置的路径没有以斜杠打头。
在这里插入图片描述
常见错误 2:servlet-name 配置的值不存在:
在这里插入图片描述
常见错误 3: servlet-class 标签的全类名配置错误
在这里插入图片描述

c)url 地址到 Servlet 程序的访问

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

d)Servlet 的生命周期

在这里插入图片描述

1、执行 Servlet 构造器方法

2、执行 init 初始化方法
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
3、执行 service 方法 第三步,每次访问都会调用。
4、执行 destroy 销毁方法 第四步,在 web 工程停止的时候调用

public class HelloServlet1 implements Servlet{
public HelloServlet1(){
System.out.println("1.构造器方法"); } @Override public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2.init初始化方法"); } /** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3.Hello Servlet1被访问了"); } @Override public void destroy() {
System.out.println("4.destroy销毁方法"); }}

在这里插入图片描述

e)GET 和 POST 请求的分发处理

public class HelloServlet1 implements Servlet{
/** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3.Hello Servlet1被访问了"); // 类型转换(因为它getMethod()方法 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; // 获取请求的方式 String method = httpServletRequest.getMethod(); if("GET".equals(method)){
doGet(); }else if("POST".equals(method)){
doPost(); } } /** * 做get请求的操作 */ public void doGet(){
System.out.println("get请求"); } /** * 做post请求的操作 */ public void doPost(){
System.out.println("post请求"); }}

f) 通过继承 HttpServlet 实现 Servlet 程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序

1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址

Servlet 类的代码:

public class HelloServlet2 extends HttpServlet {
/** * doGet(在get请求的时候调用 * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法"); } /** * doPost(在post请求的时候调用 * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2 的doPost方法"); }}

web.xml 中的配置:

HelloServlet2
loey.servlet1.HelloServlet2
HelloServlet2
/hello2

g)使用 IDEA 创建 Servlet 程序

菜单:new->Servlet 程序

在这里插入图片描述
配置 Servlet 的信息
在这里插入图片描述

h)Servlet 类的继承体系

在这里插入图片描述

I.使用注解实现Servlet程序

Servlet3.0:

  • 好处:支持注解配置。可以不需要web.xml了。

步骤:

  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  2. 定义一个类,实现Servlet接口
  3. 复写方法
  4. 在类上使用@WebServlet注解,进行配置
    @WebServlet(“资源路径”)
    该注解源码:
@Target({
ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet {
String name() default "";//相当于
String[] value() default {
};//代表urlPatterns()属性配置 String[] urlPatterns() default {
};//相当于
int loadOnStartup() default -1;//相当于
WebInitParam[] initParams() default {
}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }

举例:

@WebServlet("/demo2")public class ServletDemo 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("Servlet3.0来了....."); } @Override public String getServletInfo() {
return null; } @Override public void destroy() {
}}

举例2:

创建一个servlet,符合下列要求:

  • 映射路径为“/student/getinfo”、“/stu/”、“.inf”
  • 包含3个初始化参数:“name:peter”、“age:20”、“room:511”
    (1)、请写出在web.xml文件中配置该servlet的配置代码。
TestInitServlet
com.epoint.TestInitServlet
name
peter
age
20
room
511
TestInitServlet
/student/getinfo
/stu/*
*.inf

(2)、请写出使用注解方式配置该servlet的注解信息。

package com.epoint;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name="TestInitServlet",urlPatterns= {
"/student/getinfo","/stu/*","*.inf"},initParams= {
@WebInitParam(name="name",value="peter"), @WebInitParam(name="age",value="20"), @WebInitParam(name="room",value="511")})public class TestInitServlet extends HttpServlet{
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig(); // System.out.println(servletConfig); System.out.println("初始化name的值:" + servletConfig.getInitParameter("name")); System.out.println("初始化age的值:" + servletConfig.getInitParameter("age")); System.out.println("初始化room的值:" + servletConfig.getInitParameter("room")); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp); } }

转载地址:http://zluki.baihongyu.com/

你可能感兴趣的文章
[第18课] 概率密度函数
查看>>
Pandas 精萃
查看>>
[第19课] 二项分布1
查看>>
什么是 Pandas?
查看>>
Pandas 如何创建 DataFrame
查看>>
Pandas 查看数据
查看>>
[第20课] 二项分布2
查看>>
感 冒
查看>>
职业瓶颈
查看>>
有些问题不一定要一次完成,有时候可以增加中间步骤
查看>>
Eclipse 常用快捷键
查看>>
DB2 系列文章目录
查看>>
DB2 认证路线图
查看>>
在FedaroCore4下安装DB2 Express-C
查看>>
DB2 目录结构
查看>>
DB2 配置
查看>>
DB2 CHNGPGS_THRES 参数
查看>>
DB2安全性概述
查看>>
DB2 用户管理
查看>>
DB2 脚本
查看>>