Servlet基本介绍

一、什么是servlet?

servlet是Server Applet的缩写 译为”服务端小程序“,是一种Java语言来开发动态网站的技术

  1. Servlet就是一个接口, 定义了Java类被浏览器访问到(tomcat识别)的规则。

  2. 将来我们自定义一个类,实现Servlet接口,复写方法也可完成接收用户的请求,处理用户的请求,响应信息给客户端,

  • Servlet是在服务器端运行的Java程序,可以接收客户端的请求并做出响应

  • Servlet可以动态生成HTML内容对客户端进行响应

  • Servlet与JSP的关系

    • JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。

    • JSP更擅长表现于页面显示,servlet更擅长于逻辑控制。

二、实现servlet的方法

实现servlet有三种方法

  • 实现Javax.servlet.Servlet接口;
  • 继承Javax.servle.GenericServlet类
  • 继承Javax.servlet.http.httpServlet类【重点、因为我用的的就是这个、方便】

注解:用我的话来说,其实servlet就是一个处理逻辑的地方,因为规则上不允许jsp页面出现java代码,他本身是用来显示的,所以用到了servlet来处理逻辑,然后,将处理的结果再保存到一个域对象里去(后面再说),再回到jsp页面利用el表达式去调取


servelt使用详解

1、实现servlet接口

public interface Servlet{
    public void init(servletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
    public String getServletInfo();
    public void destory();
}

2、自定义一个类实现servlet接口,重写方法如下:

public class HelloServlet implements Servlet {          
    public LoginServlet1() {创建}
	public void destroy() {销毁}
	public ServletConfig getServletConfig() {
		return null;
	}
	public String getServletInfo() {
		return null;
	}	    
	public void init(ServletConfig arg0) {初始化}  
	public void service(ServletRequest arg0, ServletResponse arg1) {处理请求}           
}

配置servlet映射路径,让浏览器访问这个映射路径,再通过这个映射路径去访问servlet

  • 给servlet配置servlet路径,需要在web.xml中对servlet进行配置。

  <!-- 配置servlet(HelloServlet) -->
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>com.zking.HelloServlet</servlet-class>
  </servlet>
  <!-- 映射servlet(HelloServlet) -->
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/请求路径</url-pattern>
  </servlet-mapping>

<!-- 注意:但凡是改了web.xml文件的内容 务必记得重启服务器再运行!!! -->

大家会不会觉得这样很麻烦呢?没有关系 servlet3.0他来了

Servlet3.0

在Servlet3.0开始,可以通过注解的方式进行配置Servlet,不用在web.xml中再进行配置。

  • 好处:

    • 支持注解配此。可以不要web. xml了。

  • 步骤:

    • 创建JavaEE项目, 选择Servlet的版本3.0以上,可以不创建web . xml

    • 定义一个类,实现Servlet接口

    • 复写方法

    • 在类上使用@WebServlet注解,进行配说

      • @webServlet("资源路径")| I

Servlet的生命周期

void init(ServletConfig):出生之后(1次)
void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
void destory():临时之前调用(1次)

【总结】servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法。

Servlet提前执行init方法

默认情况地下,只有在初次访问Servlet时才会执行init方法。有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。这个时候就需要让init方法提前执行,免得影响初次访问的体验。

想要让init方法提前执行,需要在web.xml文件中对需要提前执行的Servlet进行设置

<!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 -->
      <servlet>
          <servlet-name>TestServlet</servlet-name>
          <servlet-class>cn.liuwei.servlet.TestServlet</servlet-class>
          <!-- 设置Servlet的init方法提前执行 -->
          <load-on-startup>2</load-on-startup>
      </servlet>

load-on-startup的值越小,提前执行的优先级越高。并且一般不设置为1,因为1是Tomcat的的Servlet的优先级

继承javax.servlet.http.HttpServlet类

HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。

创建HttpServlet步骤

  • 继承HttpServlet抽象类

  • 重写HttpServlet的部分方法,如doGet()或doPost()方法

  • 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串

  • 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

HttpServlet的实现由两种方式

实现方式一:.xml配置实现
    A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
    B.继承HttpServlet抽象类
    C.重写get()、post()方法
实现方式二:注解实现
    直接在Package包下新建Servlet

HttpServletRequest

Servlet容器对于接受到的每一个Http请求,都会创建一个ServletRequest对象,并把这个对象传递给Servlet的Sevice( )方法。其中,ServletRequest对象内封装了关于这个请求的许多详细信息。

  • HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口

【String getParameter(String name)】:根据name值得到value值
【String[ ] getParameterValues(String name)】:根据name值得到多个value值 例如:爱好

【void setCharacterEncoding(String charset)】:设置请求的编码方式 防止中文乱码
【void setAttribute(String key, Object value)】:存值[键值对的方式]
【Object getAttribute(String key)】:根据键拿到值

其中,getParameter是在ServletRequest中最常用的方法,可用于获取查询字符串的值。

HttpServletResponse

javax.servlet.ServletResponse接口表示一个Servlet响应,在调用Servlet的Service( )方法前,Servlet容器会先创建一个ServletResponse对象,并把它作为第二个参数传给Service( )方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

【void setContentType(String arg0)】:设置响应的编码方式
【PrintWriter getWriter()】:获得内置对象out

其中的getWriter方法,它返回了一个可以向客户端发送文本的的Java.io.PrintWriter对象。默认情况下,PrintWriter对象使用ISO-8859-1编码(该编码在输入中文时会发生乱码)。

JSP页面表单提交方式

- 1.type="submit"
- 2.type="image"
- 3.使用链接来提交表单,javascript的DOM模型
- 4.通过onsubmit事件提交
- 5.通过ajax提交

<form action="请求路径url" method="get/post"></form>

表单提交有两种方式:
        1.get(默认)  地址栏会显示信息,安全性低;有数据长度的限制
        2.post 反之  以后推荐使用post

get是用来从服务器上获得数据,而post是用来向服务器上传递数据。get可以在URL后面看见所提交的数据,但是Post是不会看见的!get安全性非常低,post安全性较高

页面跳转的方式

  • 使用href超链接标记 客户端跳转

  • 表单提交 客户端跳转

  • 使用RequestDispatcher.forward()(转发) 服务器跳转

  • 使用 response.sendRedirect()(重定向) 客户端跳转

  • 使用forward动作标记 服务器跳转【后面将 JSTL】

  • 使用response对象实现页面跳转的第二种方法,setHeader()方法【】

  • 使用JavaScript 客户端跳转

<think>嗯,用户想了解Servlet基本概念、用法以及工作原理。首先,我需要根据提供的引用资料来组织回答。ServletJava Web开发的核心组件,处理HTTP请求并生成响应。用户可能刚接触Web开发,需要基础的解释。 根据引用[2],Servlet必须实现javax.servlet.Servlet接口,服务器会创建实例并调用方法。生命周期在引用[3]和[4]中提到,分为加载、初始化、服务、销毁。需要分步骤解释每个阶段,特别是init、service、destroy方法的作用。 用户可能想知道如何实际使用Servlet,所以示例代码很重要。引用[1]中的代码示例实现了Servlet接口,覆盖了必要的方法,尤其是service方法生成响应。但用户可能需要知道如何部署和配置,比如web.xml或注解配置,但引用中没有提到,可能得简要提及。 工作原理部分需要结合引用[2]和[4],说明Servlet容器如何处理请求,多线程下的service方法,以及生命周期管理。要注意线程安全问题,如引用[4]提到的service方法运行在多线程环境,开发者需确保线程安全。 用户可能对Servlet的应用场景有疑问,比如处理表单数据、生成动态内容等。此外,常见问题如GET和POST的区别、生命周期管理、配置方式可能也是用户潜在的需求,需要生成相关问题。 需要检查是否所有信息都准确引用了提供的资料,避免引入外部知识。例如,解释Servlet接口的五个方法时,必须引用[4]。回答结构要清晰,分点说明概念、生命周期、使用步骤、示例代码、工作原理,最后相关问题。</think>### Servlet基本概念与工作原理 #### 一、Servlet是什么? ServletJava编写的服务器端程序,用于处理HTTP请求并生成动态响应[^2]。它是Java EE规范的核心组件,通过实现`javax.servlet.Servlet`接口,开发者可以定义请求处理逻辑,例如: - 处理表单提交 - 生成动态网页内容 - 与数据库交互 #### 二、Servlet生命周期(核心机制) Servlet生命周期由容器管理,分为4个阶段[^3][^4]: 1. **加载与实例化** 容器首次收到请求时,通过加载器加载Servlet并创建实例(通常仅一次)。 2. **初始化** 调用`init(ServletConfig config)`方法,用于加载配置或资源(单线程执行)。 3. **服务处理** 多线程环境下调用`service()`方法,根据请求型(GET/POST)分派处理。 4. **销毁** 容器关闭时调用`destroy()`方法释放资源(如数据库连接)。 #### 三、基础使用步骤 1. **实现Servlet接口** ```java public class MyServlet implements Servlet { @Override public void service(ServletRequest req, ServletResponse res) { res.getWriter().write("Hello Servlet"); } // 其他方法需空实现 } ``` 2. **配置部署(以web.xml为例)** ```xml <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping> ``` #### 四、工作原理示意图 客户端请求流程: ``` HTTP Request → Web Server → Servlet容器 → 匹配URL → 调用service() → 生成响应 ``` 关键特性: - **单例多线程**:每个Servlet仅一个实例,通过多线程处理并发请求[^4] - **协议无关性**:支持HTTP、FTP等协议(实际多用`HttpServlet`子) #### 五、典型应用场景 1. 用户登录验证 2. 购物车数据管理 3. 动态图表生成 4. RESTful API开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值