一、数据库部分
Statement statement = conn.createStatement();
PreparedStatement prepareStatement = conn.prepareStatement(sql);
(单选)JDBC的Connection接口不包含的方法是()。
A.createStatement()
B.prepareStatement(String sql)
C.createPrepareStatement(String sql)
D.commit()
正确答案:C 二、Servlet 部分
GET
POST
什么是Servlet?
java程序 可以被服务器直接访问
浏览器可以解析HTML,用户可以通过浏览器访问服务器中的HTML
用户通过HTML提供的操作界面,执行访问服务器的操作
浏览器->HTML(CSS,JS)->服务器->Servlet->JDBC->数据库
Servlet Server applet
组件规范
Servlet是运行在服务器端的组件规范
程序员开发的Servlet
规范(标准)JAVA语言
tomcat运行,jetty,weblogic…..实现JAVAEE标准
2、HelloWorld
- 创建类集成HttpServlet
- 在类上添加注解:@WebServlet(“/hello.do”)
- 重写父类service()方法
3、访问服务器如下路径,浏览器如何展示login.html
http://ip:8080/mywebapp/login.html
- 服务器启动,加载服务器中部署的项目
- 浏览器输入http://ip:8080/mywebapp/login.html地址
- 浏览器根据http://ip:8080内容与tomcat建立连接
- 浏览器向服务器发送请求数据包(其中数据包中包含/mywebapp/login.html)
- 服务器接收到请求数据包后,根据请求数据包的/mywebapp/login.html查找
- 服务器将login.html文件中的代码直接发送到浏览器
- 浏览器直接解释执行服务器发送的代码
- 浏览器与服务器断开连接
4、 浏览器访问Servlet,Servlet如何运行的
服务器启动的时候,服务器扫描了项目中所有的类
将添加了@WebServlet("/hello.do")注解的类信息保存/hello.do-cn.tedu.demo.web.servlet.HelloWorldServlet
点击超链接(链接的完整路径:http://localhost:8080/mywebapp/hello.do)
浏览器与服务器建立连接
浏览器向服务器发送请求数据包
服务器根据请求数据包中mywebapp/hello.do查找与该路径对应的类
服务器创建该类对象
调用该类中service()方法
service()方法执行结束之后,服务器将结果返回给浏览器
浏览器显示结果
浏览器与服务器断开连接
http://localhost:8080/mywebapp/hello.do:URL
/mywebapp/hello.do:URI
TCP/IP协议 基于连接的协议
HTTP协议 应用层协议 基于TCP/IP协议
浏览器与服务器交互基于HTTP协议 短连接Map key-value
list
set
tomcat调用HelloWorldServlet,创建HelloWorldServlet对象
String className = map.get(“/hello.do”)
HttpServet obj = Class.forName(className).newInstance();//反射
obj.service();
A{
B b = new B();
b.study();
}
B{}
5、浏览器表单中的数据是如何被Servlet中获取到
浏览器是如何接收到服务器返回的结果?
- 服务器启动,扫描项目中所有的类,建立路径与servlet类的映射
- 浏览器点击登录按钮,浏览器与服务器建立连接
- 浏览器向服务器发送请求数据包(mywebapp/login.do、表单数据)
- 服务器接收到请求数据包之后,创建两个对象
request对象,response对象
request对象,是实现了HttpServletRequest接口的对象
response对象,是实现了HttpServletResponse接口的对象 - 服务器将请求数据包中的数据封装到request对象中
- 服务器根据接收到的请求资源路径查找到具体的Servlet
- 创建该Servlet对象
- 调用Servlet中的service()方法,将request,response两个对象传
给该方法 - 服务器将response中的数据封装成响应数据包
- 服务器将响应数据包发送给浏览器
- 浏览器显示结果
- 关闭连接
============================
1、Servlet生命周期
- 当Servlet第一次被访问,服务器会加载Servlet实例(实例化Servlet)
- 调用Servlet中的init()方法,执行初始化,该方法只执行一次
- 调用Servlet中的service()方法,执行Servlet中的业务处理,执行多次
(如果容器调用父类的service()方法,父类的service()方法根据浏览器的请求方式,再来调用doGet()或doPost()方法,执行业务功能) - 当Servlet对象被销毁之前,调用Servlet中的destroy()方法,该方法只执行一次
2、与生命周期相关的特殊操作,当容器启动立即实例化并初始化Servlet
当项目中有配置文件需要解析,通常将解析配置文件的时机设置在容器启动
配置文件中添加:
或者添加如下注解:
@WebServlet(urlPatterns={“/doSome.do”},loadOnStartup=2)
3、Servlet核心API
Servlet接口
GenericServlet抽象类,实现了Servlet接口
HttpServlet抽象类,继承了GenericServlet类
开发Servlet,LoginServlet继承HttpServlet
4、浏览器访问Servlet,可能会出现一些错误,当出现错误
浏览器会接收到一些常见的服务器返回的状态码
404,资源不存在(路径错误)
500,服务器内部错误(代码有异常)
200-505
400以上的状态码都是错误,200表示一切正常
5、HttpServletRequest 接口
封装请求数据的接口
String getParameter(String paramName); 获取请求参数的值
String[] getParameterValues(String paramaName);获取请求参数的值
如果请求中,没有对应的参数,返回值为null
通过HTML都有哪些可以发送参数的方式
* 提交表单
* 超链接 删除数据
String strId = request.getParameter(“id”);
Integer id = Integer.parseInt(strId);
* JS传参
域名
6、HttpServletResponse接口
封装响应数据的接口
void setContentType(“text/html;charset=utf-8”);设置返回内容的类型和字符编码
text/html-html
返回文本内容:先获取输出流,再写内容
PrintWriter out = response.getWriter();
out.println(“Hello”);
1、ServletConfig
Servlet配置,每个Servlet都有单独的ServletConfig对象
2、ServletContext
容器启动,会为每一个项目创建一个ServletContext对象
当前系统在线人数为:21
- Servlet的职能:
1、获取请求 request.getParameter(“userName”);
2、处理请求(调用) dao.save();
3、响应结果(跳转,重定向,转发)
7、总结:开发中常用的Servlet相关的技术:
- Servlet开发步骤
- HttpServletRequest获取请求
- HttpServletResponse响应结果
三、JSP 部分
==============================
JSP
1、JSP HelloWorld
JSP文件扩展名是.jsp
JSP中,HTML,CSS,JS直接写
JSP中使用<% %>编写Java 代码段
JSP的运行原理
当第一次访问JSP,服务器将JSP文件转换为一个java文件 xxx.java
编译该JAVA文件,生成XXX.class
运行该Java文件
浏览器访问服务器中的java(servlet,jsp)
在servlet或jsp中将数据写入response中,
服务器将response的数据构建一个响应数据包
发送给浏览器
2、什么是JSP:
Java Server Page,运行在特定服务器中的动态页面转换生成技术
3、JSP语法JSP中,HTML,CSS,JS直接写
<% %> 定义java代码段
<%! %> JSP中的声明 声明的内容会被生成在类的成员中
<%= %> JSP的表达式
JSP指令
page指令:可以设置页面全局属性<%@page 属性=”值” %>
pageEncoding=”utf-8”设置解析页面使用的字符集(默认ISO-8859-1)GBK(2字节) gb2312 utf-8(3字节)
import:导包 唯一一个可以重复使用的属性
include指令
taglib指令JSP中有一组对象可以直接使用 称为JSP的内置对象(9个)
request————HttpServletRequest
response———–HttpServletResponseJSP,Servlet,JavaBean java类(实体类,工具类,DAO)
开发页面使用JSP 接收请求,处理请求,返回结果使用Servlet
4、Servelt与JSP的数据交换
* 将数据设置到request对象中
void setAttribute(String name,Object value);
* 转发到JSP
创建一个转发器
RequestDispatcher dis
= request.getRequestDispatcher(“url”);
执行转发动作
dis.forward(request,response);
5、URL重定向和请求转发
URL重定向:response.sendRedirect(“url”);
执行原理:服务器向浏览器发送 302状态码和location=userList.jsp
浏览器继续访问服务器userList.jsp
特点:
* 重定向之后,浏览器地址栏发生变化
* 重定向可以定向到任何资源
* 重定向之后,服务器清空request对象中的所有数据
客户端跳转
请求转发 :request.getRequestDispatcher(“url”).forward(request,response);
实现Servlet到页面的跳转
执行原理:在服务器内部,服务器直接执行转发的目标组件
特点:
* 转发之后,浏览器地址栏不发生变化
* 转发只能转发到当前项目中的资源
* 转发期间,所有组件共享request对象
服务器端跳转
当有servlet发送数据到jsp,必须使用转发
3、JSP EL&JSTL
EL:表达式语言 ${}
在EL中有一组内置对象,可以获取对应的对象的数据
pageScope,获取PageContext中的数据
requestScope,获取HttpServletRequest中的数据
sessionScope,获取HttpSession中的数据
applicationScope,获取ServletContext中的数据
===============================
web应用中的中文乱码处理
- 乱码原理
解码和编码采用的编码表不一致 - 解决乱码
统一编码表 - Servlet接收请求参数乱码的解决方式
- 如果是post请求
request.setCharacterEncoding(“utf-8”); - 如果是get请求
String name = request.getParameter(“name”);
//编码
byte[] bytes = name.getBytes(“ISO-8859-1”);
//解码
name = new String(bytes,”utf-8”);
- 如果是post请求
- JSP乱码:
<%@ page pageEncoding=”utf-8”%> - Servlet直接响应中文
response.setContentType(“text/html;charset=utf-8”); - 数据库(mysql)乱码:
create database mydb default charset=utf8;
create table t1(id int(4)) default charset=utf8;
2、 web应用中路径的解决方案
绝对路径:以”/“开头为绝对路径
相对路径:不以”/“开头为相对路径
web应用”/“的含义:
* @WebServlet(“/login.do”),”/“表示项目的根路径
http://localhost:8080/day09
* HTML中,”/“表示服务器的根路径
http://localhost:8080
* 重定向中,”/“表示服务器的根路径
response.sendRedirect(“/day09/a/a.jsp”);
* 转发中,”/表示”项目的根路径
request.getRequestDispatcher(“/a/a.jsp”)
.forward(request,response);
重定向,浏览器地址栏发生变化,转发地址栏不变
web应用中什么是当前路径?以浏览器的路径为当前路径
结论:解决路径问题最好方式是使用绝对路径
jsp中获取/项目名:request.getContextPath()
测试流程1:a.jsp-demoa.do-b.jsp->c.jsp
解决项目中../,将项目中所有的servlet路径设置为/login/login.do
3、状态管理
HttpServlet
HttpServletRequest
HttpServletResponse
重定向
转发
JSP语法 <%@page> <%%> <%=%>
状态管理(数据管理)
浏览器与服务器请求一次连接一次,每次连接服务器默认都不会保存任何数据
通过技术手段,保存某次连接的数据,称为状态管理
在多次请求中,使用某次请求的数据,必须使用状态管理技术
实现状态管理的技术Cookie和Session
浏览器1(卡(华为手机,充电宝)—》服务器
浏览器2(卡(华为手机,充电宝)—》服务器
浏览器3(卡(华为手机,充电宝)—》服务器
浏览器1(id号)—》服务器 (卡1(华为手机,充电宝,id号)
浏览器2(id号)—》服务器 (卡2(华为手机,充电宝,id号)
浏览器3(id号)—》服务器 (卡3(华为手机,充电宝,id号)
Cookie:保存在浏览器端的文本文件,实现状态管理的方式之一
工作原理:当服务器创建cookie并发送到浏览器,浏览器再次访问服务器
会自动将cookie发送的服务器
1、状态(数据)管理-session
会话管理
获取session对象
request.getSession();如果没有查找到session对象,会创建
request.getSession(true);如果没有查找到session对象,会创建
request.getSession(false);如果没有查找到session对象,返回null
void setAttribute(String name,Object value);设置属性
Object getAttribute(String name);获取属性
2、基于session实现的功能
- 保存登录账号信息,所有包含登录功能的系统都必须实现
- 每个页面显示登录账号
- 使用session实现系统登录权限验证
3、session的销毁
- 超时时间 tomcat默认30分钟没有对session的访问
- 手动销毁 退出 void invalidate();
4、Session的特点:
- Session是服务器维护的一个内存对象
- Session可以保存任何数据类型
- Session保存数据没有大小限制
- Session没有路径的限制
- Session数据没有安全隐患
- 默认,如果浏览器禁止cookie,Session也无法使用
5、URL重写
使用Session,防止浏览器禁止cookie
通过编码的方式,传递session的id
response.encodeURL(“adminMain.jsp”);
http://localhost:8080/day08_ums/adminMain.jsp;jsessionid=048F1A66235BD825944A8B804F131660
cookie
AJAX
1、什么是AJAX?
- 发送异步请求的技术
- 可以实现页面的局部刷新
- Asynchronous JavaScript And XML
异步的js和XML json格式的字符串
2、XMLHttpRequest
JS的对象,用来发送异步请求,AJAX技术中的唯一对象

