Java Servlet

本文详细介绍了Servlet的概念及其在Tomcat等Web容器中的工作原理,包括Servlet的生命周期方法(构造器、init、service、destroy)、初始化参数、ServletContext对象的使用。此外,还讲解了Servlet与客户端的请求/响应模式、不同请求方式(GET和POST)的差异。Servlet在MVC模式中扮演Controller角色,处理请求并调用模型。同时,文章涵盖了Web应用的配置、Servlet的注册与映射,以及JSP的四个作用域。最后,讨论了请求方式(RESTful风格)和前后端数据交互方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA servlet是和平台无关的服务器端组件,运行在Servlet容器中,比如Tomcat

Servlet容器作用:

  1. 创建servlet实例,调用servlet相关生命周期方法
  2. 负责Servlet和客户的通信,以及调用Servlet的方法
  3. Servlet和客户的通信采用请求/响应模式
  4. 运行JSP, Filter, Servlet等软件环境

Servlet可完成如下功能:

  1. 创建并返回基于客户请求的动态HTML页面
  2. 创建并嵌入到现有HTML页面的部分HTML页面(HTML片段)
  3. 与其他服务器资源(如数据库或基于java的应用程序)进行通信

Servlet生命周期的方法: (以下方法都是由Servlet容器负责调用)

  1. 构造器: 只有第一次请求Servlet时,创建Servlet实例,调用构造器,这说明Servlet是单实例
  2. init方法: 只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet
  3. service: 被多次调用,每次请求都会调用service方法,实际用于响应请求的
  4. destory:只被调用一次,在当前Servlet所在的Web项目被卸载前调用,用于释放当前Servlet所占用的资源

web.xml中的load-on-startup参数,配置在<servlet>节点中,如使用时<load-on-startup>1</load-on-startup> 可以指定Servlet被创建的时机,若为负数,则在第一次请求时创建,若为0或正数时,则在当前web应用被Servlet容器加载时创建实例,且数值越小,越早被创建

ServletConfig: 封装了Servlet配置信息,并且可以获取ServletContext对象

1. 配置Servlet的初始化参数

<!--配置servlet的初始化参数,要放在<servlet>内,且必须在load-on-startup节点前-->

<init-param>

<param-name>user</param-name>//参数名

<param-value>root</param-value>//参数值

</init-param>

<init-param>

<param-name>password</param-name>//参数名

<param-value>123</param-value>//参数值

</init-param>

2. 获取初始化参数

getInitParameter(String name) 获取指定参数名的初始化参数

getInitParameterNames() 获取参数名组成的Enumeration对象

ServletContext:

  1. 可以由ServletConfig获取
  2. 该对象代表当前web应用,可以认为ServletContext是当前web应用的大管家,可以从中获取到当前web应用的各个方面的信息

<!--配置当前web应用的初始化参数,在web.xml中配置-->

<context-param>//相当于全局参数,所有servlet都可用

<param-name>driver</param-name>

<param-value>com.mysql.jdbc.Driver</param-value>

</context-param>

使用Get和Post方式传递参数

Get方式: 把请求参数放在URL后边,用?连接;传送的数量有限制,一般限制在1KB以下

Post方式: 请求参数在请求体中,传递的数量远大于Get

MVC(Model View Control): 是软件工程中的一种软件架构模式,它把软件系统分为模型视图控制器三个基本部分。

Model指的是jdbc+mybatis,做数据映射,完成具体的业务操作,如查询数据库,封装对象;

View指的是html+js+jquery | jsp(java server page)(java+html)进行数据展示;

Control指的是servlet(java class)(data interface explosion)获取View的请求,调用模型将数据交给视图进行展示;

Protocol(协议): 

最底层协议:TCP/IP transfer controll protocol/internet protocol传输控制协议/网络协议 

新增了解UDP协议: user datagram protocol 用户数据包协议:

应用范围:TCP属于有状态协议,在客户端与客户端间可见服务状态,因此需要服务器来中转

UDP协议属于两个用户点对点通信,不需要单独的服务器维护

SMTP协议: simple mail transfer protocol 简单右键传输协议

FTP协议: File transfer protocol 文件传输协议

SFTP协议

HTTP(S)协议:Hyper text transfer protocol 超文本传输协议,含义超出文本范畴,比如设计音乐,视频;本质是基于单次HttpServletrequest和HttpServletresponse的协议,底层封装TCP协议,单次request连接单独服务器,获取单次response后断开,属于无状态协议

会话: Session(HttpSession) 是内置对象,维护用户状态

3. Serviets是一个类,包含两个内置对象(HttpServletrequest和HttpServletresponse),属于Control的核心

Web Container(Web容器):

Tomcat  local host | 127.0.0.1 | 本地IP地址    端口号=视配置   webapps

Websphere,Weblogic等装载Web项目

Servlet开发与运行

  1. Servlet程序必须通过Servlet容器启动运行
  2. Servlet程序必须在web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问
  3. 一个<servlet>元素用于注册一个Servlet,它包含两个主要的子元素<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名
  4. 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含两个主要的子元素<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径
  5. 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名
  6. Servlet映射到的URL也可以使用*通配符,只能有两种固定格式,*.扩展名,/扩展名/*

Servlet的开发流程
1. 编写一个java类,继承HttpServlet类,并重写HttpServlet类的doGet方法和doPost方法
2. 配置web.xml文件,或者使用注解对servlet进行配置

a. web.xml配置servlet内容,配置信息需写在webapp内部
<webapp>
 <servlet> //servlet的配置 相当于局部参数
<servlet-name>Commodity</servlet-name>// servlet注册的名字  
<servlet-class>controller.Commodity</servlet-class>//servlet的类全名
</servlet>
  
<servlet-mapping>//servlet的映射配置
<servlet-name>Commodity</servlet-name>//需要和某一个servlet节点的servler-name子节点的文本节点一致
<url-pattern>/fa.do</url-pattern>// 映射具体的访问路径,/代表当前web应用的根目录
</servlet-mapping>
</webapp>
当访问/fa.do的时候,服务器自然就会把请求交给Commodity进行处理了.

b. 使用@注解配置
@WebServlet(name = "Commodity",urlPatterns = {"/fa.do"})
public class LoginServlet extends HttpServlet {

相当于写java类时,直接加注解,当访问/fa.do的时候,服务器同样就会将处理交由Commodity进行处理

4. jsp的四个作用域

xxx.setAttribute(key,value)

xxx value=xxx.getAttribute(key)

5. java
pagecontext 页面级
request 单次请求级
session 会话级
application 应用级

 三端缓存
idea缓存 File——invalidate cashes
浏览器缓存——设置——清除浏览器数据
tomcat缓存——webapps——ROOT——删除内部内容

JSP标签
SuperTagName>(TagName[attr=val, attr2=val2...]{text})*N
>表示父子关系
()表示组合关系
+表示同辈关系
[] 表示属性
{}表示文字内容
 

6. 请求方式

restful: 请求风格  GET/POST/PUT/DELETE/HEAD...Springweb通过过滤器实现

7. 前后端数据交互方式

http://localhost:8080/action.do?k1=v1&k2=v2            GET

window.location.href=/action.do?k1=v1&k2=v2            GET

ajax{url:"action.do", type:"get|post", data:{k1:v1,k2:v2}}     GET|POST

<a herf="/action.do?k1=v1&k2=v2">...</a>                   GET

<form action="/action.do" method="get|post">              GET|POST

<input type="text|password|radio|checkbox..." name="k1"/>

<input type="text|password|radio|checkbox..." name="k2"/>

...

</form>

class XxxServlet extends HttpServlet{

      public void doGet|doPost|service(HttpServletRequest req, HttpServletResponse resp){

//省略字符编码设置

//值提取

T v1=req. getParameter(k1);

T v2=req. getParameter(k2);

...}

后端——到前端

class XxxServlet extends HttpServlet{

      public void doGet|doPost|service(HttpServletRequest req, HttpServletResponse resp){

//省略字符编码设置

//值提取

//调用service方法提取数据库内容

T v=new XxxService().xxx();

req. setParameter(key,v);

req. getRequestDispatcher("/action.do|xxx.jsp").forward(req,resp)转发,和前端请求保持一致

}

} xxx.jsp
----------------------------------------------------------------------------------

${requsterScope.key}

----------------------------------------------------------------------------------

<a herf="/action.do?k1=v1&k2=v2">...</a>  指向action.do=后台转发 指向 /action2.do=。。。指向xxx.jsp

侦听器Listener:Tomcat启动时初始化,关闭释放连接池资源

过滤器Filter:过滤用户的请求,客户端请求先至过滤器,经权限验证/统一初始化设置后滤,请求再转到servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值