Servlet5

Servelet应用开发

枚举:Enumeration

‘页面跳转提交方法基本上都是get,除了一些特殊方法用的是post’

this指代当前对象。super指代父类对象

面向对象的个数,类型,顺序不同都可以构造出来可以使用

public void pp(String... params){}//...不知个数可以随意设置个数
public static void main(String[] args){
    My my = new My();
    my.pp();
    my.pp("adhd");
    my.pp("bhvd","bhfis","uhief");//都可以调用成功
}

模板模式

反射机制:

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

ThreadLocal:

ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类; 当使用ThreadLocal来维护变量时, ThreadLocal会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一致的情况;

连接的数据库的操作流程:

1、加载驱动:

Class.forName("com.mysql.cj.jdbc.Driver")

2、获取数据库链接

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");

3、构建语句对象

// Statement用于静态sql语句<-PrepapredStatement支持带有参数的动态sql语句<-CallableStatement用于调用存储过程
String sql = "select * from tb_users where id>? and username like ?";
PreparedStatement ps = conn.prepareStatement(sql);
// 执行ps之前必须给?赋值
ps.setLong(1, 0L);
ps.setString(2, "y%");

4、提交sql语句

//ps.executeUpdate():int 用于执行修改操作,返回值表示受影响行数
ResultSet rs = ps.executeQuery(); // 用于执行查询操作

5、遍历结果集获取返回的查询数据

while (rs.next()) {
            Long id = rs.getLong("id");// 获取对应列的值,参数为列名称
            String username = rs.getString("username");
            String password = rs.getString("password");
            System.out.println(id + "\t" + username + "\t" + password);
        }

6、关闭(正向打开,逆向关闭)

rs.close();
ps.close();
conn.close();

executeUpdate()//用于执行修改

executeQuery(); // 用于执行查询操作

工具类:

Java工具类是帮助我们做一些事情,但是不描述任何事物的类。

注意事项:

①类名要见名知意,便于对工具类的选择。
②要私有化方法,工具类只是用来使用其中的方法的类,创建对象没有意义。
③内部方法定义为静态,便于调用。

面向对象:要求高耦合低内聚

filters:过滤器,方便数据处理

StringUtils.isBlank(String str) :判断某字符串是否为空或长度为 0 或由空白符 (whitespace) 构成

request:插入数据使用getParameter

String Username = request.getParameter("username")

web网页之间的关系

web网页之间的关系有三种,分别为请求转发、重定向和包含

请求转发

接受数据的组件将请求直接转发给另外一个组件,由另外的组件生成响应,效率比重定向高

request.getRequestDispatcher("user/add.jsp").forward(request, response);

重定向

接受数据的组件告知客户端一个新的请求地址,由客户端重新向新地址发起请求

response.sendRedirect("add.jsp")
重定向VS请求转发
  • 是否共享request对象

    • 请求转发共享request对象
    • 重定向不共享request对象
  • 是否客户端参与:

    • 请求转发时客户端不参与

    • 重定向需要客户端的参与。实际处理中是服务器向客户端回传了一个302的响应状态码和

      location对应的新地址

  • 如何选用

    • 如果需要跳转页面和当前页共享request,则使用请求转发;如果不需要跳转页面和当前页共享request,则使用重定向

    • 如果两者均可,优先考虑请求转发,因为执行效率高

包含

包含可以分为静态包含和动态包含两种

  • 静态包含就是包含原文,然后在进行编译和执行
  • 动态包含就是各自独立执行,最终包含执行结果

数据校验

UI设计中最基本的原理所有的用户数据输入都是邪恶的 ,所以要求针对用户的输入必须进行合法性验证

一般数据校验分为三个层面

  • 客户端数据校验:一般采用 javascript 实现,运行在客户端浏览器中。优点:不需要网络数据传输,不会对服务器造成压力;缺点:容易绕过

  • 服务器端数据校验:一般采用 Java 实现的,运行在服务器端。优点:不能绕过;缺点:需要网络数据传输,会对服务器造成压力

  • 业务校验:在执行具体的业务逻辑之前执行的验证,和具体的业务逻辑紧密相关

    一般在具体开发中如果时限比较紧张,则经常忽略部分服务器端数据校验

MVC模式

MVC模式将应用强制划分为3个部分:

  • Model模型,用于封装数据逻辑和业务逻辑,一般采用JavaBean实现
  • View视图,用于收集客户动作和显示数据,一般采用jsp+jstl实现
    • 目前新的开发方法为前后端分离开发,后端只提供一个RESTful的调用接口
  • Controller控制器,用于实现流程控制,一般采用Servlet实现

在MVC中不允许直接访问页面,所有的访问都应该经过Servlet转发

JSP: java Server Page

jsp究其本质就是Servlet,主要用于实现页面显示。主要由静态部分[html页面]+java脚本两部分构成,为了简化页面中的java编程,引入JSTL【java标准标签库】

jsp三大页面指令

<%@ page %>用于定义页面全局属性

  • language 用于定义页面中所使用的脚本语言
  • contentType用于指定页面生成的响应内容类型,使用MIME协议【多用途互联网邮件扩展,例如生成html则为text/html,生成图片image/jpeg】,浏览器可以根绝响应内容类型调用不同的处理方式处理响应内容
  • pageEncoding 用于指定当前页面所使用的编码字符集,常见的编码字符集有UTF-8、GBK等

在具体使用中contentType和pageEncoding利用默认值可以相互替代,例如contentType=*"text/html; charset=ISO-8859-1"* pageEncoding=*"ISO-8859-1"*其中的编码字符集设置只需要一个即可,一般使用contentType居多

<%@ include %>用于实现页面的静态包含

  • file用于指定需要包含的页面文件

基本语法

<%! %> 代码声明部分,例如类中所有方法之外,可以定义方法、属性等

<%!
public String getError(HttpServletRequest req,String key){
 //在<%%>中可以直接使用9大默认对象,但是在自定义方法中不能直接使用默认对象,需要传递
    String res="";
    Object obj=req.getAttribute("errors");
    if(obj!=null && obj instanceof Map){
        Map<String,String> errs=(Map<String,String>)obj;
        if(errs.containsKey(key))
        res=errs.get(key);
    }
    return res;
}
%>

<% %> 可执行的代码段,例如在一个方法中的代码部分,可以定义临时变量

<%=getError(request,"username")%> 这里需要注意在<%=%>之间是表达式,不是语句,所以
不能出现分号

书籍商品信息表

create table tb_catalog(id bigint primary key auto_increment,name
varchar(32)) engine=innodb default charset utf8;
create table tb_book(id bigint primary key auto_increment,title varchar(64)
not null,catalog_id bigint not null,foreign key(catalog_id) references
tb_catalog(id) on delete cascade,unit varchar(8), price numeric(8,2) default
0.0) engine=innodb default charset utf8;

首页显示所有数据的查询语句`select b.*,c.name from tb_book b left join tb_catalog c on

b.catalog_id=c.id`

关联查询常见的有3种:

  • 交叉连接:笛卡尔积,基本在具体应用种不会使用

    • select * from t1,t2

    • select * from t1 cross join t2

  • 内连接:连接双方满足条件则双方匹配显示,否则都不显示。内连接可以分为等值和不等值两种

    • select * from t1,t2 where t1.t2_id=t2.id
  • 外连接:外连接可以分为左外、右外和全外三种,MySQL不支持全外连接

    • 左外,显示左表种的所有数据,右边表种的数据自动按照连接条件进行匹配显示,如果右表种没有对应数据,则显示为null。右外刚好相反

    • select * from tb_catalog c left join tb_book b on c.id = b.catalog_id ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值