栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet在IDEA中的应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet在IDEA中的应用

部署TomCat项目的方式

1、直接将项目放到webapps目录下即可
/hello:项目的访问路径–>虚拟目录
简化部署:将项目打成一个war包,在将war包放置到webapps目录下
war包会自动解压缩
2、配置conf/server.xml文件
在标签中配置


docbase:项目存放的路径
path:虚拟目录

3、在confCatalinalocalhost创建任意名称的xml文件。在文件中编写


虚拟目录:xml文件的名称
静态项目和动态项目

目录结构
Java动态项目的目录结构

---项目的根目录
	---WEB-INF目录:
		---web.xml:web项目的核心配置文件
		---classes目录:放置字节码文件的目录
		---lib目录:放置依赖的jar包
将Tomcat集成到IDEA中,并创建Java EE 项目,部署项目



Servlet:server applet

概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
将来我们自定义一个类,实现Servlet接口,复写方法

快速入门

1、创建一个JavaEE项目
2、定义一个类,实现servlet接口
3、实现接口中的抽象方法
4、配置Servlet
我们需要使用浏览器通过URL来访问新创建的Java类,就需要将Java类在web.xml文件中映射成为对应的资源路径,也可理解为URL后面加的东西。

Java类
package com.example.day06_tomcat;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemo01 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("zgDaren!");
    }

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

    @Override
    public void destroy() {

    }
}

web.xml



    
    
        demo1
        com.example.day06_tomcat.ServletDemo01
    
    
    
        demo1
        /demo01
    

问题:当我们定义了一个Java类,但我们并没有创建对象,我们也没有调用方法,自己就被执行了

servlet执行原理

1、当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径(demo01)
2、查找web.xml文件,是否有对应的标签体内容
3、如果有,则在找到对应的全类名
4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法

servlet生命周期(5个方法)

1、被创建:执行init方法 ,只执行一次
Servlet什么时候被创建?
指定Servlet的创建时机,在web.xml文件中的标签下进行配置
第一次被访问时创建为负数,其默认为-1
在服务器启动时加载为正数或0
Servlet的init方法只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的
多个用户同时访问时,可能会存在线程安全问题所以尽量不在servlet中定义成员变量,可在service中定义,即使定义了成员变量,也不要修改获取值

2、提供服务:执行service方法,执行多次
每次访问servlet时,service方法都会被调用一次
3、被销毁:执行destroy方法,只执行一次
servlet被销毁时执行,服务器正常关闭,servlet被销毁
只有正常关闭时,才会执行destory方法
destroy方法在servlet销毁之前执行,释放资源

Java类
package com.example.day06_tomcat;

import javax.servlet.*;
import java.io.IOException;


public class ServletDemo02 implements Servlet {
    
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }
    
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...");
    }
    
    @Override
    public String getServletInfo() {
        return null;
    }
    
    @Override
    public void destroy() {

    }
}

web.xml



    
    
        demo1
        com.example.day06_tomcat.ServletDemo01
    
    
    
        demo1
        /demo1
    

    
        demo2
        com.example.day06_tomcat.ServletDemo02
        

        5
    


    
        demo2
        /demo2
    

servlet注解配置

1、创建一个JavaEE项目,选择servlet的版本在3.0以上,可以不创建web.xml
2、定义一个类,实现servlet接口
3、实现接口中的抽象方法
4、在类上使用@webServlet注解,进行配置

@WebServlet("资源路径")
@WebServlet(urlPatterns = "/demo")
@WebServlet("/demo")
package cn.zg.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


//@WebServlet(urlPatterns = "/demo")
@WebServlet("/demo")
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("Servlet4.0来了...");
    }

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

    @Override
    public void destroy() {

    }
}

== 切换项目时,一定要先关闭tomcat服务器,设置好后在重新启动,不然就会出现端口被占用的情况,如果端口被占用则在cmd窗口中netstat -aon|findstr 1099 命令查看到该1099端口的PID,然后结束进程==

IDEA与tomcat相关配置

1、IDEA会为每一个tomcat部署的项目单独建立一份配置文件
在项目中启动tomcat服务器后,查看控制台log:Using CATALINA_base: “C:Users64359AppDataLocalJetBrainsIntelliJIdea2020.3tomcataf080da0-49e3-4185-a2c8-ba394708d02c”
2、工作空间项目和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源
WEB-INF目录下的资源不能被浏览器直接访问。
3、断点调试,使用“dubug”启动

Servlet体系结构

Servlet–接口
GenericServlet–抽象类
HttpServlet–抽象类
GenericServlet:将servlet接口中其他方法做了默认空实现,只将service()方法作为抽象
将来定义servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的封装和实现,简化操作
定义类继承HttpServlet
复写doGet/doPost方法

继承HttpServlet的类
package cn.zz.servlet;

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("/demo3")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet...");
    }

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

在webapp目录下新建login.html,用来检测post方法



    
    Title


    
Servlet相关配置

一、urlpartten:Servlet访问路径
1、一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})
2、路径定义规则:
a、/xxx
b、/xxx/xxx:多层目录结构
c、*.do:但是前面一定不要写/

HTTP协议

概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
特点:基于TCP/IP的高级协议
默认端口号:80
基于请求/响应模型的:一次请求对应一次响应
无状态的:每次请求之间相互独立,不能交互数据
历史版本:1.0:每次请求响应都会建立新的连接
1.1:复用连接

请求消息数据格式 请求行

请求方式 请求url 请求协议/版本
GET/login.html HTTP/1.1

请求方式:HTTP协议有7种请求方式,常用的有2种
GET:1、请求参数在请求行中,在url后
2、请求的url长度有限制
3、不太安全
POST:1、请求参数在请求体中
 2、请求的url长度没有限制
 3、相对安全

请求头

请求头名称:请求头值
常见的请求头:
1、Host:请求的主机
2、User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器端获取该头信息,解决浏览器的兼容性问题
3、Accept:告诉服务器浏览器可以解析啥文件
4、Accept-Language:支持的语言环境
5、Accept-Encoing:可接收的语言格式
6、Referer:http://localhost/login.html
告诉服务器“我”从哪里来
防盗链:
统计工作:

		7、Connection:keep-alive(表示可以一直被复用)

3、请求空行
空行:就是用于分隔post请求的请求头和请求体的
4、请求体(请求正文)
get无请求体,post有请求体,封装post请求消息的请求体的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号