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

Servlet

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

Servlet

学习目标: 掌握Servlet
学习内容: 1、 web服务器 2、 Tomcat 3、 Servlet 4、 HTTP请求 5、 两种HTTP请求方式 6、 HTTP响应 7、 ServletContext 8、 session 9、 过滤器 10、 监听器
学习时间: 1、 2021年9月20日 2、 2021年9月22日 3、 2021年9月24日 4、 2021年9月26日 5、 2021年10月3日
学习产出: 1、 技术笔记 1 遍 2、 宿舍管理项目

web开发概述

学习web开发,需要先安装一台web服务器,将开发好的web项目部署在web服务器中供外界访问

web服务器

web服务器是指驻留于因特网上某种类型计算机的程序

可以向浏览器等web客户端提供文档,也可以放置网站文件,它是一个容器,是一个连接用户与程序之间的中间件。

WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、

WebLogic、Jboss等。

流程

浏览器访问服务器,服务器接收请求(提交表单),给web程序作出响应

通过web程序与数据库进行交互,然后再由服务器响应最后结果

服务器起到一个中间件的作用

服务器搭建 tomcat

​ 1.官网下载 ,解压
​ 2.配置JAVA_HOME环境变量 D:ProgramFilesJavajdk1.8.0_261
​ TOMCAT根据java_home去查找jdk安装位置
​ 3.在tomcat的bin目录 双击运行 startup.bat命令 启动tomcat

​ bin 放着各种命令 startup.bat命令 shutdown.bat

​ conf 放着配置文件 列如server.xml 修改端口号
​ lib tomcat运行所需要的jar包
​ logs 运行产生的日志文件
​ temp 临时缓存文件

​ webapps 部署web程序的目录
​ work 工作目录

​ 4.访问 IP+端口

Tomcat目录

创建发布web项目

在idea中创建一个基本的java项目
右键 add webframework 变为web项目
项目
src java代码
web 配置文件 网页代码

部署项目
1.手动部署 自己把项目中的代码粘贴到服务器中, 平时开发不用
2.自动部署 在idea中集成tomcat

web项目结构

Servlet Servlet概述

Server Applet的简称 用Java编写的服务器端的程序

它运行在web服务器中,web服务器负责Servlet和客户的通信以及调 用Servlet方法,Servlet和客户通信采用“请求/响应”的模式

Servlet的作用:

​ 1.接收用户发送的请求

​ 2.调用其他的java程序来处理请求

​ 3.根据处理结果,服务器将响应返回给客户端

Servlet的创建和使用

1.创建一个类继承javax.servlet.http包下的HttpServlet

2.在web.xml文件中配置Servlet

3.运行Servlet程序

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用< servlet>元素和元素完成。

Servlet创建和使用-Servlet配置

< servlet>元素用于注册Servlet,它包含有两个主要的子元素: ,分别用于设置Servlet的注册名称和 Servlet的完整类名。

< servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路 径,它包含有两个子元素:,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

url-pattern配置模式:”/”代表当前web应用的根目录

	

    
     
         demo
         
         com.ffyc.firstweb.servlet.DemoServlet
         
         
             name
             jim
         
         
         0
     

    
    
        demo
        /demourl
    
Servlet 生命周期

public class DemoServlet  extends HttpServlet {

     
     public DemoServlet(){
         System.out.println("DemoServlet");
     }

     
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init");
        System.out.println(config.getInitParameter("name"));//获得配置文件中的信息
        System.out.println( config.getServletName());
    }

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

    
    


}
HTTP协议

超文本传输协议(HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程

基于TCP/IP通信协议传递数据

HTTP是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布 式超媒体信息系统

客户端向服务器发送请求,服务器给客户端一个响应

HTTP请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求

​ 请求包括请求行,请求头,请求体

请求行

包含HTTP请求方式,请求资源名称,HTTP版本(例如post test.jsp HTTP/1.1)

请求头

包含主机地址,以及客户端的一些环境信息,以键值对的形式传递

Host: 127.0.0.1:8088 请求的主机地址

**Accept:**text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8 浏览器能够处理的内容类型

Accept-Encoding: gzip, deflate, br 浏览器能够处理的压缩编码

Accept-Language: zh-CN,zh;q=0.9 浏览器当前设置的语言

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息

Connection: keep-alive 浏览器与服务器之间连接的类型

请求体

请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体以键值的形式传递

多个用&链接,服务器接收到后再进行解析

例:username=admin&userpwd=123

两种HTTP请求方式 GET方式

超链接访问,默认是GET方式

form提交,不指定method,默认为GET方式

POST方式

form提交,指定method=“POST”

区别

GET方式主要是从服务器中获取信息;POST主要是想服务器提交信息

GET方式在通过URL提交数据,数据在URL中可以看到(不安全);POST方式,数据放置在请求体中提交(安全)。

GET方式提交的数据大小受限制一般在1kb(不同浏览器也会有不同);而POST则没有此限制

HttpServletRequest

HttpServletRequest是ServletRequest的子接口

HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。

请求和响应是Web交互最基本的模式,在Servlet中,用HTTPServletRequest来表示请求。

HTTPServletRequest:封装了请求信息,可以从中获取任何请求信息

获取客户机/服务器信息

getMethod()得到客户机请求方式

getScheme()请求协议

getRemoteAddr()返回发出请求的客户机的IP地址

getServerName()服务器名(ip或域名)

getServerPort()服务器端口

		//请求行数据
        System.out.println(req.getMethod());
        System.out.println(req.getProtocol());
        System.out.println(req.getServerName());
        System.out.println(req.getServerPort());

        //请求头
        System.out.println(req.getRemoteAddr());//获得客户端的ip
        System.out.println(req.getRemotePort());//客户端端口
        System.out.println(req.getHeader("User-Agent"));
        //接收用户请求的数据  tomcat8.0以后get请求数据的解码方式支持中文
        String name =   req.getParameter("name");
request获取请求参数

getParameter(name) — String 通过name获得值

getParameterValues — String[ ] 通过name获得多值

理中文乱码

​ post

​ setCharacterEncoding(编码格式)

req.setCharacterEncoding("utf-8");//设置post请求数据解码格式

        System.out.println(req.getParameter("account"));
        System.out.println(req.getParameter("passoword"));
        System.out.println(req.getParameter("sex"));
        String[] courses = req.getParameterValues("course");//获取复选框中的内容,返回的是一个数组
        System.out.println(Arrays.toString(courses));
HTTP响应

一个HTTP响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。

响应行

包含了HTTP协议版本,以及用于描述服务器对请求的处理结果

HTTP/1.1(协议版本) 200(状态码) OK(状态码描述)

​ 状态码:服务器和浏览器用于确定状态的固定数字号码

​ 200:请求成功

​ 302:请求重定向

​ 400:语义有误,当前请求无法被服务器理解或请求参数有误

​ 404:请求资源不存在,通常是路径写错了或者服务器资源删除了

​ 500:服务器内部错误(代码异常)

响应头

响应头用于描述服务器的基本信息,以及数据描述

Server Apache-Coyote/1.1

Content-Type text /html;char set=UTF-8

Content-Length 0

Date Wed, 13 Sep 2017 02:26:07 GMT

响应体

代表服务器向客户端浏览器回送的正文

HttpServletReponse

HttpServletResponse是ServletResponse的子接口 。

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个代表响应的HTTPServletResponse对象

HTTPServletResponse对象代表响应

向浏览器动态生成网页内容

用getWriter()获得一个PrintWriter字符输出流输出数据

response会默认以ISO8859-1将需要输出到浏览器的字符进行解码(如果不存在会乱码)

response.setContetnType(“text/html;charset=utf-8”);方法可以同时设定response所使用的字符集编码和浏览器打开所用的字符集编码

 PrintWriter out = null;
        try {
            resp.setContentType("text/html;charset=utf-8");//设置响应内容的编码格式
           out = resp.getWriter();
           out.println("登录成功");

        }catch (Exception e){
            out.println("服务器忙,请稍后再试!");
        }
ServletContext

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的 ServletContext对象

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此 Servlet对象之间可以通过ServletContext对象来实现数据交互,存储一些全局信息

常用方法:

​ getInitParameter(“name”)获得当前应用的初始化参数

​ setAttribute(“attrname”,value) 设置Ser vletContext属性并赋值

​ getAttribute(“attrname”) 获得Ser vletContext属性指定值

​ removeAttribute(“attrname”) 删除Ser vletContext指定属性

​ getRealPath(filename)获得文件的绝对路径

​ getContextPath()获得当前应用的根目录

 
    
        name
        jim
    
		 ServletContext servletContext = req.getServletContext();
        System.out.println(servletContext);
        System.out.println(servletContext.getInitParameter("name"));
        servletContext.setAttribute("a","aaa");
		System.out.println(servletContext.getAttribute("a"));
session

Servlet API中,定义了HttpSession接口,用来封装会话对象。

在第一次向servlet中发起请求时, 在服务器端,由服务器创建一个session对象,完成会话期间的管理

过程

使用session实现会话机制的过程

1、当容器创建一个新的HttpSession对象后,即生成一个随机数,称为 会话ID,并将ID值封装成一个名字为JSESSIONID的session,返回给客户端。

2、调用request.getSession方法获得会话对象时,容器先从request

中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,

返回使用。

3、如果没有获取到JSESSIONID值,认为当前的请求没有相关联的会话 对象,重复步骤1

方法

	//获取session对象
            HttpSession session = req.getSession();
    //向session对象中设置一组键值,登录成功后将用户信息存储到一个对象的session对象中
            session.setAttribute("user",user);

	//在退出时销毁session对象,安全退出
	 HttpSession session = req.getSession();
        session.invalidate();//销毁浏览器

	User user = (User)req.getSession().getAttribute("user");
session生命周期

对象创建后保存在容器中,如果客户端连接到服务器后,不进行任何窗口,那么容器维护这些会话对象将占用很多资源。因此,容器都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。

除了有效时间使会话对象失效外,还可以调用HttpSession中的invalidate方法,使会话失效,立即销毁会话对象

设置会话时间

可以在web.xml中进行配置,修改默认时间。例如,修改为10分钟销毁


	50 

可以使用HttpSession接口中的setMaxIntervalTime设置,以秒为单位,如果参数是负数,表示永远不失效。

例如:将会话的有效时长设置为2小时。

session.setMaxInactiveInterval(2*60*60);

session由谁创建?保存在哪?

有若干客户端与服务器连接,服务器会为每个客户端的一次会话创建一个会话对象。

过滤器 概念

过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求

在请求到达Servlet/JSP之前,过滤器截获请求

作用:在客户端的请求访问后端资源之前,拦截这些请求

相关API

Servlet API中,与过滤器有关的API共有三个接口,分别是

​ Filter、FilterChain、FilterConfig

Filter接口

Filter接口是过滤器类必须实现的接口,该接口中有三个方法。

1、init(FilterConfig filterConfig):该方法是对filter对象进行初始化

的方法,仅在容器初始化filter对象结束后被调用一次。参数

FilterConfig可以获得filter的初始化参数。

2、 doFilter(ServletRequest request, ServletResponse response,

FilterChain chain):该方法是filter进行过滤操作的方法,是最重

要的方法。过滤器实现类必须实现该方法。方法体中可以对request

和response进行预处理。其中FilterChain可以将处理后的request

和response对象传递到过滤链上的下一个资源。

3、destroy():该方法在容器销毁过滤器对象前被调用。

FilterChain接口

doFilter(ServletRequest request,ServletResponse response)

该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能 是下一个过滤器,也可能是目标资源。

FilterConfig接口

该接口类型作为Filter接口中的init方法的参数使用,FilterConfig接口

中有一个常用方法

getInitParameter(String name),该方法用来获得过滤器的初始

化参数值。在web.xml中,可以为每一个filter配置需要的初始化参

数,与Servlet的< init-param>类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取

    
        encod
        com.ffyc.practice.filter.EncodFilter
        
            code
            utf-8
        
    
    
        encod
        /*
    

String code;
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        //设置编 码格式
        servletRequest.setCharacterEncoding(code);
        //让请求继续向下执行,下一个可能是目标servlet,也可能是下一个过滤
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init");
        code = filterConfig.getInitParameter("code");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

总结

过滤器用来实现通用的功能,减少代码冗余,提高可维护性

一个过滤器可以配置给多个资源使用

一个资源也可以配置多个过滤器,按照配置顺序调用

监听器

Servlet监听器是Servlet规范中定义的一种特殊类,用于监听

ServletContext、HttpSession和ServletRequest等域对象的创建与

销毁事件,以及监听这些域对象中属性发生修改的事件。

监听器分类

按监听对象分类:

1、用于监听应用程序对象(Ser vletContext)

2、用于监听用户会话对象(HttpSeesion)

3、用于监听请求消息对象(Ser vletRequest)

按监听事件分类:

1、监听对象的创建和销毁的事件监听器。

2、监听对象属性变更(添加,修改,移除)的监听器

监听器接口

Servlet API中定义了监听器接口,用来监听不同的事件类型

● Ser vletContextListener:上下文监听器。

● Ser vletContextAttributeListener:上下文属性监听器。

● Ser vletRequestListener:请求监听器。

● Ser vletRequestAttributeListener:请求属性监听器。

● HttpSessionListener:会话监听器。

● HttpSessionAttributeListener:会话属性监听器。

创建监听器类

创建监听器类,实现监听器接口,在web.xml文件中配置监听器类。

< listener>

监听器类全类名

< /listener>

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

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

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