Servlet基础及实现增删改查案例

2.4 配置xml


myServlet

com.kaka.web.UserServlet

myServlet

/dealLogin

2.5 运行结果


在这里插入图片描述在这里插入图片描述

3. Servlet的执行流程

===================================================================================

以第二板块的Servlet为例:

  1. 根据表单中的action属性dealLogin,与web.xml中的servlet-mapping的url-pattern匹配;

  2. 找到servlet-mapping中的servlet-name指向的对象,如果存在直接调用该对象的service方法;

  3. 如果对象不存在,在servlet节点中查找同名找到servlet-class项的字符串;

  4. 使用Class.forName()方法反射该类对象;

  5. 调用该类的父类的service方法;

  6. 有同类型的请求到来时,重复步骤2;

4. Servlet与JSP的比较

=====================================================================================

  • 书写方面:jsp由html+java脚本组成;Servlet只能由java语言编写;
  • 执行原理上:jsp转化为java然后编译为.class最后执行执行;Servlet.java直接编译为.class然后执行
  • 内容方面:jsp有9大隐式对象;servlet没有隐式对象;
  • 编写规范上:servlet需要继承HttpServlet,重写父类的方法:service、doGet、doPost…

5. 基于Servlt完成CRUD

=====================================================================================

步骤:

  • 编写数据库

  • 创建web工程、建包

  • 配置xml文件

  • 创建index.jsp 含有查询部门信息链接,作为主界面;

  • 创建StudentList.jsp 全查展示页

  • 创建StuServlet 完成list查询的逻辑

  • 含有action=list的传参 根据action的字符串取值做不同的操作

  • 编写StuDao

  • 编写Student实体

  • 在列表页添加链接: < a href=“addStudent.jsp” >添加学生信息

  • 编写addStudent.jsp页面

  • 在service方法中添加逻辑分支

5.1 创建数据库STUDENT表


CREATE TABLE student(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(50) NOT NULL,

sex VARCHAR(10) DEFAULT ‘man’,

age VARCHAR(5)

) CHARSET = utf8;

5.2 xml文件的配置


stuServlet

com.kaka.controller.StuServlet

encoding

UTF-8

stuServlet

/stu

5.3 创建index.jsp


<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

主页面

查询学生信息

5.4 创建StudentList.jsp


<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8” import = “java.util.,com.kaka.entity.”%>

显示学生信息清单

显示学生信息清单

添加学生信息

IDNAMESEXAGE

<%

if(request.getAttribute(“stus”)!=null){

List li = (List)request.getAttribute(“stus”);

for(int i = 0; i < li.size(); i++){

Student student = li.get(i);

%>

<%=student.getId() %> <%=student.getName() %> <%=student.getSex() %> <%=student.getAge() %>

修改 

删除

<%

}

}

%>

5.5 创建addStudent.jsp


  • 在添加表单中需要含有action的隐藏域
  • < input type=“hidden” name=“action” value=“add” / >

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

添加学生信息

添加学生信息

ID:

NAME:

SEX:

AGE:


5.6 创建updateStudent.jsp


<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8” import = “com.kaka.entity.*”%>

修改信息界面

修改界面

<%

Student s = (Student)request.getAttribute(“student”);

if(s!=null){

%>

ID:

NAME:

SEX:

AGE:


<%}else{

out.print(“修改的对象不存在!!!”);

}

%>

5.7 创建JDBCUtil.java


package com.kaka.util;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class JDBCUtil {

//定义常量

final static String driver = “com.mysql.jdbc.Driver”;

final static String url = “jdbc:mysql://localhost:3306/db0711?useUnicode=true&characterEncoding=utf8”;

final static String username = “root”;

final static String password = “root”;

//声明常用的对象

protected Connection conn = null;

protected PreparedStatement pstmt = null;

protected ResultSet rs = null;

//静态代码块

static{

try {

Class.forName(driver);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

//获取连接

public void getConnection(){

try {

conn = DriverManager.getConnection(url, username, password);

} catch (SQLException e) {

e.printStackTrace();

}

}

//关闭资源

public void closeAll(){

if(rs != null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(pstmt != null){

try {

pstmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

5.8 创建Student.java实现类


package com.kaka.entity;

public class Student {

private int id;

private String name;

private String sex;

private String age;

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(int id, String name, String sex, String age) {

super();

this.id = id;

this.name = name;

this.sex = sex;

this.age = age;

}

@Override

public String toString() {

return “Student [id=” + id + “, name=” + name + “, sex=” + sex + “, age=” + age + “]”;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

}

5.9 创建StuDao.java接口


package com.kaka.dao;

import java.util.List;

import com.kaka.entity.Student;

public interface StuDao {

public List findAll();

public boolean addStudent(Student student);

public Student findOne(int id);

public boolean updateStudent(Student student);

public boolean deleteDeptById(int id);

}

5.10 创建StuDaoImpl.java接口实现类


package com.kaka.dao;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.kaka.entity.Student;

import com.kaka.util.JDBCUtil;

public class StuDaoImpl extends JDBCUtil implements StuDao{

@Override

public List findAll() {

List li = new ArrayList();

try {

String sql = “SELECT * FROM STUDENT”;

super.getConnection();

super.pstmt = super.conn.prepareStatement(sql);

rs = pstmt.executeQuery();

while(rs.next()){

Student stu = new Student();

stu.setId(rs.getInt(“id”));

stu.setName(rs.getString(“name”));

stu.setSex(rs.getString(“sex”));

stu.setAge(rs.getString(“age”));

li.add(stu);

}

return li;

} catch (SQLException e) {

e.printStackTrace();

}finally{

super.closeAll();

}

return null;

}

@Override

public boolean addStudent(Student student) {

try {

String sql = “INSERT INTO STUDENT(id,name,sex,age) VALUES(?,?,?,?)”;

super.getConnection();

super.pstmt = super.conn.prepareStatement(sql);

pstmt.setInt(1, student.getId());

pstmt.setString(2, student.getName());

pstmt.setString(3, student.getSex());

pstmt.setString(4, student.getAge());

int i = pstmt.executeUpdate();

if(i > -1){

return true;

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

super.closeAll();

}

return false;

}

@Override

public Student findOne(int id) {

try {

String sql = “SELECT * FROM STUDENT WHERE ID=?”;

super.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, id);

rs = pstmt.executeQuery();

Student student = new Student();

if(rs.next()){

student.setId(rs.getInt(“id”));

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

image

image

image

image

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

ndOne(int id) {

try {

String sql = “SELECT * FROM STUDENT WHERE ID=?”;

super.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, id);

rs = pstmt.executeQuery();

Student student = new Student();

if(rs.next()){

student.setId(rs.getInt(“id”));

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

[外链图片转存中…(img-d10GaUrm-1714445518619)]

[外链图片转存中…(img-MYfANDsI-1714445518620)]

[外链图片转存中…(img-B7fXXqk5-1714445518620)]

[外链图片转存中…(img-ET1IbKiG-1714445518621)]

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值