我的Servlet学习笔记

servlet 概念

  • 运行在服务的小程序接口,定义了可以在服务器运行的java类的接口,也就是用于服务器交互式的Java程序
    浏览器 服务器
    Servlet(Servlet Applet),全称Java Servlet,是用Java编写的服务器端程序。Servlet运行于支持Java的应用服务器中。

执行原理

比如地址  http://localhost:8080/chen/hello
主机名:        http://localhost:8080   定位到服务器           
项目名:        chen                    定位到服务上的程序
请求的资源名   hello                   定位到程序的资源
url:端口/资源名称 反射全类名的字节码加载进内存 调用service方法
  1. 服务器接受到请求解析url 获取对应资源的路径
  2. 查找web.xml文件,是否有对应的标签
  3. 查找到对应的全类名
  4. 服务器例如 tomcat 会加载Java程序的字节码文件,创建对象
  5. 调用对象的方法

使用

基于web.xml 配置

  1. 创建javaEE项目
  2. 定义类实现Servlet接口
  3. 实现Servlet中的抽象方法
  4. 配置servlet 类名对应路径
package com.cloud.note.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;

public class ServletDemo extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
    }
}
    <!-- web.xml配置 -->
    <servlet>
    <!-- servlet的name-->
        <servlet-name>demo</servlet-name>
        <servlet-class>com.cloud.note.servlet.ServletDemo</servlet-class>
        <load-on-startup>5</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
    <!-- servlet的响应的路径资源-->
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

servlet3.0 开始支持注解配置 Jdk 6

  1. 创建servlet项目 servlet3.0版本
  2. 定义类实现Servlet接口
  3. 实现Servlet中的抽象方法
  4. 使用@ebservlet注解配置url @WebServlet(“资源路径”)
package com.colin.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;

//servlet响应的url
@WebServlet("/bookDelete")
public class BookDeleteServlet extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
    }
}
基于注解和web.xml配置各有优势吧

XML配置的特点:

  1. 修改web.xml配置文件不需要工程进行修改和重新编译
  2. 直观的了解项目所有的Servlet ,和对应的url
  3. 配置文件庞大,开发效率低一些,简单说方便总览,但不方便具体

注解配置的特点:

  1. 提高开发效率,可以只专注于每个Servlet
  2. 简化配置文件,减少了web.xml修改的工作量
  3. 修改注解需要编译工程
  4. 总览不方便
    总之就是互为缺点,web.xml相当于程序的清单一样,方便总览,但也要增加维护(保证清单的正确性,及时更新)

Servlet的生命周期

  1. Servlet的创建 init() 只执行一次,创建时机可以设置 :
    • 当 为负数表示第一次访问时创建
    • 当 大于等于0表示服务器启动时创建
    • 单例模式,只存在一个 init方法只执行一次
    • 多个用户同时访问时可能存在线程安全问题 不要在servlet定义成员变量,如果定义不能进行修改
  2. 执行 service() 每次访问servlet时执行一次,获得请求时执行的方法
  3. 销毁 destroy() 只执行一次 在Servlet被销毁时执行释放资源
    时机:正常关闭服务器
package com.itheima.controller;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * servlet 生命周期
 * @author newChenyingtao
 *
 */
public class UserServlet implements Servlet {

	@Override
	public void destroy() {
		System.out.println("销毁");
	}
	@Override
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("创建servlet");
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("服务中");
	}
}

资源跳转方式: 转发和重定向

getRequestDispatcher()
reponse.sendRedirect()

forward方式 转发 请求体

发生在服务器上,服务器将请求转法到程序的其他Servlet入口处,跳转的路径是相对路径,也即是forward方式只能跳转到本web应用中的页面上,因为发生在服务器上,所以跳转后浏览器地址栏不会变化

request.getRequestDispatcher("/路径(可以是jsp路径也可以是servlet)") .forward(request, response);
request.getRequestDispatcher("/2.jsp)") .forward(request, response);
request.getRequestDispatcher("/servlet/HomeServlet)") .forward(request, response);

使用这种方式跳转,传值可以使用三种方式:url, request, session

sendRedirect 重定向

简单的重定向方法
response.sendRedirect("url");
response.sendRedirect()是重新定向,前后页面不是一个request,并且而这个是在浏览器端运行的。
页面的路径是相对路径response.sendRedirect("/a.jsp");
或者跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("www.baidu.com");
跳转后浏览器地址栏变化。
参数附带 url、session 中,所以该方式只适用于无传值跳转

重定向特点:
1. 地址发生变化
2. 可以访问其他站点
3. 两次请求
转发特点:
1. 转发地址栏不变
2. 当前服务器下资源
3. 一次请求

今天先到这里,以后再补充。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值