Servlet入门笔记

2022-07-12 15:02:53 浏览数 (1)

J2EE与Java Web

发展史,三种架构

  1. 单机时代 - 桌面应用
  2. 联机时代(Client客户端 - Server模式)
    1. Client/Server结构(C/S结构)是指客户端和服务器结构
    2. 优点:数据方便共享,安全系数高
    3. 缺点:必须安装客户端,升级与维护困难
  3. 互联网时代(Broswer - Server模式)
    1. Broswer-Server(B/S)模式即浏览器和服务器模式
    2. 优点:开发简单,无需安装客户端,数据易于共享
    3. 缺点:相较于C/S模式,执行速度与用户体验相对较弱
初识Servlet
请求与响应

从浏览器发出送给服务器的数据包称为 “请求(Request)"

从服务器返回给浏览器的结果称为 “响应(Response)”

J2EE(Java 2 Platform Enterprise Edition)是指“Java 2 企业版”

Servlet 主要用于生成动态Web内容

Servlet

Apache Tomcat

Tomcat是Apache 软件基金会旗下一款免费的开放源代码的Web应用服务器程序 Tomcat是运行Servlet的容器

IDEA创建Java Web工程

一、通过maven向导,创建标准java web工程。

  1. 创建标准maven工程,在选择maven工程,jdk1.8,设置项目坐标系
  2. main文件夹下新建webapp目录
  3. 在File-Project Structure-Project Settings-Module-" "-web中设置,表明该目录保存web应用方面的内容
    1. Deployment Descriptors中调整核心配置文件web.xml的路径,在将"web"修改为“srcmainwebapp”,版本信息与Tomcat保持一致,选择3.1 Apache Tomcat® - Which Version Do I Want?查看版本
    2. 设置web资源路径,选中webapp路径,部署时映射的路径默认为"/"
    3. web应用的启动部署方式,使用默认目录保存最终运行的目录D: …outartifactsservelt_first_Web_exploded

二、将idea与Tomcat进行绑定,点击Add Configeration

  1. 找到Tomcat Server,选择本地(Local)
  2. 取消自动打开网页(Open browser)
  3. 点击Deployment,点 号,点击Artifact
    1. 将Application context:设置为/,取消上下文

Java Web 工程标准结构

Servlet开发与基本配置

  • 创建Java类,继承HttpServlet
  • 重写service方法,处理请求,生成响应
代码语言:javascript复制
public class SampleServlet  extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 处理请求中的用户数据
        String name = req.getParameter("name");
        String mobile = req.getParameter("mobile");
        //2. 通过响应返回结果
        //        PrintWriter:字符输出流
        PrintWriter out = resp.getWriter();
        out.println("<h1>name:"   name   "</h1>");
        out.println("<h1>mobile:"   mobile   "</h1>");
    }
}
  • 配置web.xml,绑定访问地址
代码语言:javascript复制
<servlet>
    <servlet-name>sample</servlet-name>
    <servlet-class>hua.indi.servlet.SampleServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/sample</url-pattern>
</servlet-mapping>

请求参数的发送与接受

请求参数是指浏览器通过请求向Tomcat提交的数据

request.getParameter() :接收单个参数

request.getParameterValues() :接收多个同名参数

Get与Post请求方式

Get方式将请求参数附加在访问地址后显性向服务器发送的方式。 http://localhost:8080/sample?name=zhangsan Post方式会将数据存放在”请求体”中隐性向服务器发送的方式 http://localhost:8080/samole 请求体:name=zhangsan

Get与Post应用场景
  • Get常用于不包含敏感信息的查询功能
    • 例如:https://www.baidu.com/s?wd=imooc
  • Post用于安全性较高的功能或服务器写操作
    • 用户登录、用户注册、公司账目
Get与Post处理方式
  1. 所有请求:service()方法
  2. Get求情:doGet()方法
  3. Post请求:doPost()方法
代码语言:javascript复制
public class RequestMethodServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        PrintWriter out = response.getWriter();
        out.println("<h1>GET:name="   name   "</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        PrintWriter out = response.getWriter();
        out.println("<h1>POST:name="   name   "</h1>");
    }
}

Servlet生命周期

  1. 装载 - web.xml
  2. 创建 - 构造方法
  3. 初始化 - init()
  4. 提供服务 - servlet
  5. 销毁 - destory()
代码语言:javascript复制
public class FirstServlet extends HttpServlet {
    /**
     * 装载 web.xml 后创建 FirstServlet构造方法
     */
    public FirstServlet() {
        System.out.println("正在创建FirstServlet");
    }

    /**
     * 初始化加载 FirstServlet
     */
    @Override
    public void init() throws ServletException {
        System.out.println("正在初始化FirstServlet");
    }

    /**
     * Servlet进行服务
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // getParameter获取用户输入的指定参数
        String name = req.getParameter("name");
        String html = "<h1 style='color:red'>Hi,"   name  "!</h1></hr>";
        System.out.println("返回给浏览器的响应的内容为:" name);
        // getWriter获取响应流
        PrintWriter out = resp.getWriter();
        // 向客户端返回响应
        out.println(html);
    }

    /**
     * 在创建之前,结束后销毁 FirstServlet
     */
    @Override
    public void destroy() {
        System.out.println("正在销毁FirstServlet");
    }
}

注解方式配置Servlet

Servlet 3.x之后引入了“注解Annotation”特性 注解用于简化Web应用程序的配置过程 Servlet核心注解:@WebServlet

代码语言:javascript复制
/**
 * 添加 @WebServlet
 * 运行时会在所有在 WEB-INF 中扫描Class文件
 */
@WebServlet("/anno")
public class AnnotationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("I'm Annotation Servlet~~");
    }
}

0 人点赞