Java EE Web部分--01.servlet

版权声明:转载请注明原始链接 https://blog.csdn.net/sswqzx/article/details/82892129

学习目标

web知识

Tomcat

Servlet

Servlet3.0注解开发

一、Web知识

1、B/S通信模式

B/S架构:又称Browser/Server架构,即浏览器和服务器架构模式

B/S通信模式:

1、基于请求-响应交互模型
	客户端浏览器向服务器 发送一个请求
	web服务器向客户端浏览器回送 一个响应 
	一次请求、一次相应
2、必须先有请求 再有响应 
3、请求和响应成对出现

2、URL请求路径

URL (Uniform Resource Locator)统一资源定位符是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。

格式:

协议://ip:端口号/资源位置

协议,http、https、ftp等

域名,域名或IP地址,能够帮我们定位到互联网上的某一台服务器

端口号,端口号是一个应用程序在一台服务器上的编号。http协议的默认端:80

资源位置,用于描述WEB资源在服务器上的位置

参数=值,浏览器和服务器交互传递的数据。

http协议知识点:

二、Tomcat

1、概述

tomcat服务器是一个免费的开源的web应用服务器。是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。

下载地址:官网地址:`https://tomcat.apache.org`

Tomcat:Apache组织提供一个免费开源的小型的服务器软件。支持Servlet和JSP规范,性能高。开源,免费,性能高。

  1. WebLogic:Bea公司的一个收费的大型的服务器软件,后被Oracle收购。支持EE的所有的规范

  2. WebSphere:IBM公司的一个收费的大型的服务器软件,支持EE的所有的规范。

  3. JBoss:是一个基于J2EE的开放源代码的应用服务器。JBoss是一个管理EJB的容器和服务器,JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

2、安装使用

将下载的zip文件解压后,点击bin/下startup.bat、在浏览器打开http:localhost:8080/就能看到效果了

可以看到如下的目录结构:

目录说明:

bin:脚本目录
	启动脚本:startup.bat
	停止脚本:shutdown.bat

conf:配置文件目录 (config /configuration)
	核心配置文件:server.xml
	用户权限配置文件:tomcat-users.xml
	所有web项目默认配置文件:web.xml

lib:依赖库,tomcat和web项目中需要使用的jar包

logs:日志文件.
	localhost_access_log..txt tomcat记录用户访问信息,..表示时间。
	例如:localhost_access_log.2017-04-28.txt
	
temp:临时文件目录,文件夹内内容可以任意删除。

webapps:默认情况下发布WEB项目所存放的目录。

work:tomcat处理JSP的工作目录。 

 启动:双击tomcat解压目录/bin/startup.bat 文件即可启动tomcat

访问:tomcat的默认端口为8080,所以在浏览器的地址栏输入:http://ip:8080即可访问tomcat服务器。

如果想修改端号或配置可以到conf/server.xml中修改

关闭:

1. 关闭startup.bat启动窗口;
2. 双击tomcat的/bin/shutdown.bat文件;
3. Ctrl+C;

3、使用IDEA创建JavaWeb项目

【第一步】 File---New---Project

【第二步】 选择Java Enterprise版本,然后配置tomcat

【第三步】 选择使用模板创建项目

【第四步】 填写项目名,并为这个web项目配置tomcat

【第五步】 创建完成

 使用tomcat发布JavaWeb项目

JavaWeb项目开发完成之后,必须发布到tomcat中,并启动tomcat才能够被用户访问到

将web项目复制到tomcat的webapps目录下/如下图

三、Servlet

1、概述

概述:

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态web资源。
Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),是最重要的组件。

作用:

Servlet 的作用

1. 接收请求 :接收客户端发送的请求数据;
2. 业务逻辑的处理;
3. 响应结果 :将处理结果响应给客户端(浏览器);

2、servlet开发步骤

1. 创建一个普通java类实现Servlet接口;
2. 重写Servelt接口中的所有抽象方法;
3. 注册这个类;
   1. 在web.xml中配置这个类的信息;
   2. 配置这个类的映射路径;
4. 在service方法中处理请求和响应的业务逻辑;
5. 发布项目,启动项目之后,通过映射路径访问这个类;

演示:

普通java类HelloServlet实现Servlet接口

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("请求过来了。");
    }

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

    @Override
    public void destroy() {

    }
}

web.xml中配置这个HelloServlet的类路径和映射路径

 <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.heima.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

访问路径为:http://ip:8080/hello

IDEA显示:

3、Servlet编程优化

方案一:GenericServlet优化方案

说明:
 

GenericServlet类是一个抽象类,它实现了多个接口,其中有一个是Servlet,
所以它重写了Servlet接口中的所有方法。我们只需要继承GenericServlet类,
重写其中的service方法即可。GenericServlet是一个抽象类,里边只有一个抽象方法service(),
我们继承GenericServlet之后只需要重写service()方法处理具体的业务逻辑即可

分析

 1. 创建一个普通的java类继承GenericServlet;
 2. 在web.xml中配置这个GenericServlet的子类;
 3. 重写service方法,在service方法中完成向浏览器响应数据的功能;

编写一个普通的java类,ServletDemo1,继承GenericServlet

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

public class Demo2 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("999999999999999999");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.itcat.demos.Demo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/in</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>two</servlet-name>
        <servlet-class>com.itcat.demos.Demo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>two</servlet-name>
        <url-pattern>/twos</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>three</servlet-name>
        <servlet-class>com.itcat.demos.Demo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>three</servlet-name>
        <url-pattern>/threes</url-pattern>
    </servlet-mapping>

方案二:HttpServlet优化方案

在实际的生活中,客户端(浏览器)给我们发送的请求往往是HTTP协议下的请求,
所以我们只需要处理HTTP的请求和响应即可。也就是说我们需要的知识一个与HTTP协议相关的Servlet。

Sun公司为我们提供了HttpServlet,对GenericServlet再次进行扩展和功能加强。
实际开发中:我们编写Servlet就可以采用 继承HttpServlet来完成servlet的开发,
这样的Servlet我们可以获取更多的业务功能。

HttpServlet是GenericServlet的一个子类。这个类是专门帮我们处理与HTTP协议相关的请求与响应的一个Servlet类,它里边的方法如下

说明:

HttpServlet继承了GenericServlet,功能比GenericServlet更强大
HttpServlet类中的方法参数为HttpServletRequest对象和HttpServletResponse对象。
使用这两个对象的好处在于:

1. HttpServletRequest继承了ServletRequest,HttpServletResponse继承了ServletResponse。
功能更强大;
2. HttpServletRequest和HttpServletResponse为我们提供了很多处理HTTP协议相关的API,
HTTP协议正是我们日常生活中使用得比较多的一种协议;

演示:

package com.itcat.demos;

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

public class Demo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理get请求");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理Post请求");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.itcat.demos.Demo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/in</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>two</servlet-name>
        <servlet-class>com.itcat.demos.Demo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>two</servlet-name>
        <url-pattern>/twos</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>three</servlet-name>
        <servlet-class>com.itcat.demos.Demo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>three</servlet-name>
        <url-pattern>/threes</url-pattern>
    </servlet-mapping>

4、Servlet生命周期

1. 谁创建:tomcat创建;
2. 何时创建:第一次访问这个Servlet的时候,只创建一次,创建完成后会调用init()方法;
3. 如何工作:每次请求到这个Servlet时,由service方法处理请求和响应信息;
4. 何时销毁:服务器正常关闭,销毁前会调用destory()方法;

小结:
1. Servlet对象的创建:
	1. 创建者:tomcat;创建时机:在Servlet第一次被访问的时候;
	2. 特点:
		1. 只会创建一次(单例);
		2. 对象创建完成之后,会调用init()方法;
2. Servlet运行:
	1. service()方法接收用户的请求,和处理响应;
	2. 特点:
		1. 每次对这个Servlet的访问都会由service()方法来处理;
		2. service()方法的两个参数:request和response对象专门用来处理请求和响应;
3. Servlet销毁:
	1. Servlet对象在服务器正常关闭的时候销毁;
	2. 特点:
		1. 销毁的时候会调用destory()方法;

5、Servlet映射规范

url-pattern中的映射路径配置存在以下几种方式:

1. 完全匹配  		 /user/hello		  资源路径为/user/hello时可以访问
2. 目录匹配			/user/*				 资源路径中含有/user目录均可访问
3. 后缀名匹配	    *.do			     资源路径中以.do结尾的均可访问
4. 缺省路径			/			         访问的路径找不到,就会去找缺省路径
tomcat获得匹配路径时,优先级顺序:1 >2 > 3 > 4

 

四、Servlet3.0注解开发

1、概述

Servlet3.0新特性

  • 注解支持

    该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。

  • 支持web模块(servlet filter Listener)

  • 支持Servlet异步处理

  • 文件上传API简化

2、IDEA创建3.0版本的Servlet

建完成后,Servlet类上面会默认添加一个注解@WebServlet(name="Servlet3Demo") 。这个@WebServlet注解就是用来配置当前这个Servlet的。这个注解中常用的有两个属性:

  1. name属性: 相当于web.xml的 <servlet-name>;

  2. urlPatterns属性: 编写访问servlet的路径 类似于 <url-pattern>

package com.itcat.serlat;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Servletdemo")
public class Servletdemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

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

    }
}

3、Servlet开发最终版本

优化一:在doPost方法中调用doGet方法。这样我们的代码都在goGet()方法里写就可以了

package com.itcat.serlat;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Servletdemo")
public class Servletdemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
    }

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

    }
}

最终版:改模版:

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet("/${Entity_Name}")
public class ${Class_Name} extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
        doGet(request,response);
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

    }
}


Servlet开发最终版:

package com.base.demo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/Servletdemo1")
public class Servletdemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

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

    }
}

猜你喜欢

转载自blog.csdn.net/sswqzx/article/details/82892129
今日推荐