首页 > 数据库 >Day32-JavaEE应用&Servlet路由技术&UDBC&Mybatis数据库&生命周期

Day32-JavaEE应用&Servlet路由技术&UDBC&Mybatis数据库&生命周期

时间:2024-12-15 22:33:13浏览次数:9  
标签:String Day32 JavaEE println import Servlet id UDBC out

一,Servlet&路由&周期

1,Servlet的含义:Servlet是运行在web服务器或应用服务器上的程序,它是作为来自web浏览器或其他HTTP客户端请求和HTTP服务器上的数据库或应用程序的中间件。使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页

2.Servlet的使用

(1)创建一个类来继承HttpServlet

(2)web.xml配置Servlet路由 或者 WebServlet也可以配置Servelt路由

(3)写入内置方法(init service destroy doget dopost)

3,Servlet的生命周期

46629cd36d6918fd3973a12841891e1f

4、处理接受和回显

HttpServletRequest是ServletRequest的子接口

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

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

HttpServletResponse是ServletResponse的子接口

setCharacterEncoding() 设置编码格式

setContentType() 设置解析语言

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

PrintWriter 接受符合类型数据

5,写入内置方法

package com.example.demo1;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
@WebServlet("/a")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // HttpServletRequest是ServletRequest接口的子接口,提供了用于处理HTTP请求的额外功能。
        // HttpServletResponse是ServletResponse接口的子接口,提供了用于处理HTTP响应的额外功能。
        System.out.println("--------------doGet");
        // 通过参数名获取请求中的值。返回一个String,表示与给定参数名相对应的单个值。
        String id =req.getParameter("id");
        // 设置响应内容的类型和编码。常用于指定输出的数据类型,如HTML、JSON等。
        resp.setContentType("text/html;charset=utf-8");
        // PrintWriter是用于向客户端输出字符数据的类,可以接受各种数据类型,然后将其转换为文本并发送到客户端。
        // 通过 resp.getWriter() 获取一个 PrintWriter 对象,用于向客户端返回响应数据。
        PrintWriter out = resp.getWriter();
        // 向客户端发送数据
        out.println("这是GET请求的数据:");
        out.println("id:"+id+"<br>");
        // 通过调用 out.flush() 刷新缓冲区,并调用 out.close() 关闭 PrintWriter 对象。
        out.flush();
        out.close();
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
        String name = req.getParameter("name");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.println("这是post提交的数据");
        out.println(name);
        out.flush();
        out.close();
        // 打印一条日志到终端
        System.out.println("--------------doPost");
    }
 
    // 当Servlet首次创建时调用的初始化方法
    @Override
    public void init(ServletConfig config) throws ServletException{
        System.out.println("--------------init");
//        try {
//            Class.forName("com.example.servletdemo.NewsServlet");
//
//        } catch (ClassNotFoundException e) {
//            throw new RuntimeException(e);
//        }
 
    }
 
    // 当Servlet被销毁时调用的方法
    @Override
    public void destroy() {
        System.out.println("--------------destroy");
        super.destroy();
    }
 
    // 处理GET和POST请求的服务方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("--------------http service");
        super.service(req, resp);
    }
 
    // 覆盖的用于ServletRequest和ServletResponse的服务方法
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("--------------Servlet service");
        super.service(req, res);
    }
}

二,数据库JDBC&Mybatis&库

1,数据库驱动:JDBC(Java Database Connectivity)是 Java 用于与数据库交互的 API,而不同的数据库供应商提供了各自的 JDBC 驱动程序。在这里,"com.mysql.jdbc.Driver" 是 MySQL JDBC 驱动程序的类名。
加载和初始化: 当调用 Class.forName("com.mysql.jdbc.Driver"); 时,它会尝试查找、加载并初始化指定的类。在这个过程中,MySQL JDBC 驱动程序的静态代码块

2.数据库连接与数据查询

package com.example.demo1;
 
import java.sql.*;
 
 
public class NewsServlet{
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 加载 MySQL 驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        String url ="jdbc:mysql://localhost:3306/demo01";
        // 通过调用 DriverManager.getConnection() 方法,你可以获取到一个 Connection 对象,
        // 该对象表示与数据库的连接。你可以使用这个 Connection 对象执行 SQL 语句和事务操作。
        Connection connection = DriverManager.getConnection(url,"root","123456");//本地mysql的账号密码,连接mysql数据库
        System.out.println(connection);//打印数据库连接信息
        String sql="select * from news";
        //危险写法
        //String vulsql="select * from news where id="+id;
        //预编译写法
        String safesql="select * from news where id=?";
        System.out.println(sql);
        // connection.createStatement() 是用来创建一个 Statement 对象,
        Statement statement= connection.createStatement();
        // 而 statement.executeQuery(sql) 是用来执行 SQL 查询并返回结果集。
        ResultSet resultSet = statement.executeQuery(sql);
        // resultSet.next() 方法用于将结果集的指针移动到下一行,并返回一个布尔值,
        // 表示是否还有更多行可供遍历。通过使用 while 循环,可以在结果集还有下一行的情况下不断迭代。
        while (resultSet.next()){
            // resultSet.getInt("id") 用于获取当前行 "id" 列的整数值,并将其赋给变量 id。
            int id = resultSet.getInt("id");
            String page_title = resultSet.getString("page_title");
            String heading = resultSet.getString("heading");
            String subheading = resultSet.getString("subheading");
            String content = resultSet.getString("content");
            String img = resultSet.getString("img");
            System.out.println(id+"|"+page_title+"|"+heading+"|"+subheading+"|"+content+"|"+img);
        }
    }
}

3.防止SQL注入写法

(1),预编译写法

// 预编译写法
String safesql = "SELECT * FROM news WHERE id=?";
//? 是一个占位符,表示将在执行时动态替换。
try (PreparedStatement preparedStatement = connection.prepareStatement(safesql)) {
//使用 PreparedStatement: PreparedStatement 是 Statement 的子接口,用于执行预编译的 SQL 语句。通过调用 connection.prepareStatement(safesql) 创建一个 PreparedStatement 对象。
    **// 设置参数,防止SQL注入攻击,使用 setXXX 方法设置占位符的值。在这里,使用 setInt(1, id) 将 id 的值设置到第一个占位符上。这种方式防止了 SQL 注入攻击,因为参数值是通过预编译的方式传递的,而不是通过直接拼接字符串。
    preparedStatement.setInt(1, id);**
 
    // 执行查询,调用 executeQuery() 执行查询
    ResultSet resultSet = preparedStatement.executeQuery();
 
    // 处理结果集...
} catch (SQLException e) {
    e.printStackTrace();
}

参考文献:https://blog.csdn.net/qq_61553520/article/details/136607663?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221d2cdc2615c50077ffa78466cec90d67%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=1d2cdc2615c50077ffa78466cec90d67&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-2-136607663-null-null.nonecase&utm_term=32&spm=1018.2226.3001.4450

标签:String,Day32,JavaEE,println,import,Servlet,id,UDBC,out
From: https://www.cnblogs.com/sec-geek/p/18608832

相关文章

  • JavaEE 【知识改变命运】05 多线程(4)
    文章目录单例模式什么是单例模式饿汉模式懒汉模式多线程-懒汉模式分析多线程问题第一种添加sychronized的方式第二种添加sychronized的方式改进第二种添加sychronized的方式(DCL检查锁)阻塞队列什么是阻塞队列什么是消费生产者模型标准库中的阻塞队列消息队列应用的场景......
  • JavaEE初阶——多线程4(线程安全 和 解决办法(synchronized))
    线程不安全原因小结:1.【根本原因】操作系统上的线程是“抢占式执行”“随机调度”=>线程之间执行顺序有很多变数(罪魁祸首,万恶之源)2.代码结构:代码中,多个线程,同时,修改,同一个变量。、如果只是读取,变量的内容是固定不变的。如果是两个不同变量,彼此之间就不会产生相互覆盖......
  • 初始JavaEE篇 —— 网络原理---应用层协议
     找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE我们在前面简单的接触了 TCP/IP五层协议中的传输层协议,并使用UDP协议与TCP协议编写了一个简单的回显服务器与客户端。接下来,我们来深入学习应用层的协议。应用......
  • javaEE毕业设计基于ssm框架的在线考试系统的设计与实现jau62
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍在各学校的教学过程中,用户的考试是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“在线考试系......
  • javaEE毕业设计基于ssm的在线教学视频播放网站的设计与实现-r0xl4
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍在线视频网站的目的是实现满足在线视频播放、视频上传和下载等影视剧迷们对影视剧的日常需求的功能。为了达到这个目的,于是对系统提出了以下的系统功能:(1)能够在线播放视频,实......
  • 【JavaEE初阶】HTML
    ......
  • JavaEE 【知识改变命运】03 多线程(3)
    文章目录多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因:1.线程是抢占式的2.多线程修改同一个变量(程序的要求)3.原子性4.内存可见性5.指令重排序总结线程安全问题产生的原因解决线程安全问题1.synchronized关键字的介绍(监视器锁monitorlock)a.锁......
  • Springboot基于JavaEE技术的大学生兼职平台的设计实现2el65(程序+源码+数据库+调试部署
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,企业,企业信息,招聘信息,学生应聘,兼职评价,在线沟通,行业,勤工俭学开题报告内容一、研究背景与意义随着高等教育的普及和社会经济的发展,大学生兼职已成为......
  • 网络编程(JavaEE)
    前言:    熟悉了网络的基本概念之后,接下来就需要针对网络进行一系列的编程,其中可能涉及到新的一些编程操作,需要我们进一步探索!网络编程套接字:    套接字其实是socket的翻译。    操作系统给应用程序(传输层给应用层)提供的API,起了个名字就叫socket......
  • 【JavaEE初阶】落霞与孤鹜齐飞,秋水共长天一色 - (重点)线程
    本篇博客给大家带来的是线程的知识点,由于时间有限,分三天来写,本篇为线程第二篇.......