myServlet
com.kaka.web.UserServlet
myServlet
/dealLogin
===================================================================================
以第二板块的Servlet为例:
-
根据表单中的action属性dealLogin,与web.xml中的servlet-mapping的url-pattern匹配;
-
找到servlet-mapping中的servlet-name指向的对象,如果存在直接调用该对象的service方法;
-
如果对象不存在,在servlet节点中查找同名找到servlet-class项的字符串;
-
使用Class.forName()方法反射该类对象;
-
调用该类的父类的service方法;
-
有同类型的请求到来时,重复步骤2;
=====================================================================================
- 书写方面:jsp由html+java脚本组成;Servlet只能由java语言编写;
- 执行原理上:jsp转化为java然后编译为.class最后执行执行;Servlet.java直接编译为.class然后执行
- 内容方面:jsp有9大隐式对象;servlet没有隐式对象;
- 编写规范上:servlet需要继承HttpServlet,重写父类的方法:service、doGet、doPost…
=====================================================================================
步骤:
-
编写数据库
-
创建web工程、建包
-
配置xml文件
-
创建index.jsp 含有查询部门信息链接,作为主界面;
-
创建StudentList.jsp 全查展示页
-
创建StuServlet 完成list查询的逻辑
-
含有action=list的传参 根据action的字符串取值做不同的操作
-
编写StuDao
-
编写Student实体
-
在列表页添加链接: < a href=“addStudent.jsp” >添加学生信息
-
编写addStudent.jsp页面
-
在service方法中添加逻辑分支
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT ‘man’,
age VARCHAR(5)
) CHARSET = utf8;
stuServlet
com.kaka.controller.StuServlet
encoding
UTF-8
stuServlet
/stu
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8” import = “java.util.,com.kaka.entity.”%>
显示学生信息清单
<%
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() %><%
}
}
%>
- 在添加表单中需要含有action的隐藏域
- < input type=“hidden” name=“action” value=“add” / >
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
添加学生信息
ID:
NAME:
SEX:
AGE:
<%@ 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(“修改的对象不存在!!!”);
}
%>
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();
}
}
}
}
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;
}
}
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);
}
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个章节的知识。
关于阿里内部都在强烈推荐使用的“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书》,看完之后两个字形容,爱了爱了!