前端篇
HTML
- HTML文档结构
<!DOCTYPE HTML>
<html>
<head>
<title>my title</title>
</head>
<body>
</body>
</html>
- 单标签,双标签,注释
单标签:<link/> <br/> <img/>
双标签:<a> <span> <h1>
注释:<!-- --> - HTML常用标签
CSS
- CSS语法规则
- CSS样式表的引用方式
行内式
注意这里不能使用选择器
<span style="font-size: 20px;"> </span>
内嵌式
<head>
<style type="text/css">
span{
}
</style>
</head>
外链式
<head>
<link href="./1.css" type="text/css" rel="stylesheet"/>
</head>
导入式
<head>
<style>
@import url
</style>
</head>
- CSS选择器
*.{}
h1{}
.class1{}
#id1{}
JS
- JS的组成
- JS的引入方式
行内式
<input type='button' onclick="js code">
内嵌式
<script type="text/javascript">
js code
</script>
外链式
<script type="text/javascript" src="./1.js"></script>
- JS基本语法
number
string
boolean
object
null
undefine
function showMsg(a, b){
return 3;
}
- DOM
- BOM
- JS事件处理
XML
后端篇
HTTP协议
HTTP请求行:
HTTP请求行位于消息的第一行,包含三个部分:请求方式、资源路径、HTTP版本。
GET /index.html HTTP/1.1
HTTP响应状态行:
HTTP响应状态行位于相应消息的第一行,包含三个部分:HTTP版本、一个表示成功或错误的证书代码(状态吗)和对状态吗进行描述的文本信息
HTTP/1.1 200 OK
- 1xx:请求已接收,需要继续处理
- 2xx:请求以成功被服务器接收、理解并接受
- 3xx:为完成请求,客户端需要进一步细化请求
- 4xx:客户端的请求有错误
- 5xx:服务器出现错误
例如:
200 正常
302 跳转
304 有缓存
404 找不到资源
500 服务器出错
请求头:
在HTTP请求消息中,请求行之后就是若干请求头
Host
Referer
Accept
Accept-Charset
Accept-Encoding
Accept-Language
User-Agent
Connection
Cache-Control
Authorization
Proxy- Authorization
If-Match
If- Modified-Since
Range
If-Range
Max-Forward
常用请求头:
- Accept:
- text/html
- image/gif
- image/*
- */*
- Accept-Encoding:
- gzip,compress
- Host:
- www.itcast.cn:80
- If-Modified-Since:
- GMT格式事件
- Referer:
- http://xxxxxx
- User-Agent:
- xxxxx
响应头:
Location 地址 Content-Type 类型 这两个不能同时存在
Content-Type text/html;charset=utf-8
Server
Refresh 等待刷新时间 可以带参数
Content-Disposition 可以带参数
Content-Encoding 压缩方式 取 Accept-Encoding 里面的值
常用响应头:
- Location:
- http://xx(绝对路径)
- Server:
- Apache-Coyote/1.1
- Refresh:
- 3(单位秒)
- Content-Disposition:
- attachment; filename=lee.zip
- Content-Encoding:
- gzip
Servlet
Tomcat默认端口:8080
实现Servlet接口的类都称为Servlet
Servlet封装了对用户请求的处理
Servlet由容器管理,包括创建、调用和销毁
Servlet接口方法
void init() // 第一次请求时创建初始化一次,只会创建一个
void service(ServletRequest request, ServletResponse response) // 处理用户请求
void destroy() // 销毁时调用
ServletConfig getServletConfig()
String getServletinfo()
Servlet继承关系
Servlet -> GenericServlet -> HttpServlet -> 自定义Servlet
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>demoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
HttpServlet Demo
@WebServlet(name = "myServlet", value = "/myservlet") //value和urlPattern等价
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("Hello");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
ServletConfig 4
ServletConfig config = this.getServletConfig();
设定方法:
@WebServlet(name="TestServlet03", urlPatterns="/TestServlet03", initParams = {@WebInitParam(name = "encoding",value = "UFT-8"),})
public class TestServlet03 extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException{
PrintWriter out = response.getWriter();
ServletConfig config = this.getServletConfig();
String param = config.getInitParameter("encoding");
out.println("encoding="+param);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
方法说明 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
String getServletName() | 返回Servlet的名字 |
ServletContext 2+4+4
ServletContext context = this.getServletContext();
可以在web.xml进行初始化配置
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>
关于初始化参数
方法说明 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
关于设置属性值
方法说明 | 功能描述 |
---|---|
Enumeration getAttributeNames() | 返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
Object getAttribute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
void removeAttribute(String name) | 根据参数指定的域属性名,从ServletContext中删除匹配的域属性 |
void setAttribute(String name, Object obj) | 设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
关于获取资源
方法说明 | 功能描述 |
---|---|
Set getResourcePaths(String path) | 返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开头,指定匹配资源的部分路径 |
String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开头,“/”表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null |
URL getResource(String path) | 返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开头,“/”表示当前Web应用的根目录 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象。参数path传递规则则和getResource()方法完全一致 |
ServletRequest 2+6+2
ServletResponse
setStatus
sendError
SendError
方法说明 | 功能描述 |
---|---|
void addHeader(String name, String value) | 这两个方法都是用来设置HTTP协议的响应头字段,其中,参数name用于指定响应头字段的名称,参数value用于指定响应头字段的值。 |
void setHeader(String name, String value) | 不同的是,addHeader()方法可以增加同名的响应头字段,而setHeader()方法则会覆盖同名的头字段 |
void addIntHeader(String name, int value) | 这两个方法专门用于设置包含整数值的响应头。 |
void setIntHeader(String name, int value) | 避免了调用addHeader()与setHeader()方法时,需要将int类型的设置值转换为String类型的麻烦 |
void setContentLength(int len) | 该方法用于设置响应内容的实体内容的大小,单位为字节。对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值 |
方法说明 | 功能描述 |
---|---|
void setContentType(String type) | 既设置服务器的编码方式,又设置响应头。该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。例如,如果发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为 “image/jpeg”。需要注意的是,如果响应的内容为文本,还可以设置字符编码,如:text/html;charset=UTF-8 |
void setLocale(Locale loc) | 该方法用于设置响应消息的本地信息。对HTTP来说,就是设置Content-Language响应头字段和Content-Type头字段中的字符集编码部分。需要注意的是,如果HTTP消息没有设置Content-Type头字段,setLocale()方法设置的字符集编码不会出现在HTTP消息的响应头中。如果调用setCharacterEncoding()或setContentType()方法指定了响应内容的字符集编码,setLocale()方法将不起作用,只具有指定字符集编码的功能 |
void setCharacterEncoding(String charset) | 只设置服务器编码方式。该方法用于设置输出内容使用的字符编码,对HTTP协议来说,就是设置Content-Type头字段中的字符集编码部分。如果没有设置Content-Type头字段,setCharacterEncoding方法设置的字符集编码不会出现在HTTP消息的响应头中。setCharacterEncoding方法比setContentType()和setLocale()方法的优先级高,setCharacterEncoding方法的设置结果将覆盖setContentType()和setLocale()方法设置的字符集 |
doGet
doPost
ServlerConfig对象
String getInitParameter(String name);
Enumeration getInitParameterNames();
ServletContext getServletContext();
String getServlet
String getRequestURI();
StringBuffer getRequestURL();
String getContextPath();
String getServletPath();
请求转发
通过HttpServletRequest获取dispatcher RequestDispatcher getRequestDispatcher(String path)
通过forward方法进行转发forward(ServletRequest request,ServletResponse response)
会话及会话技术
Cookie
构建Cookie:
服务器向客户端发送Cookie时会设置响应头
Set-Cookie: user=itcase; Path=/;
Servlet API提供了javax.servlet.http.Cookie
类
构造方法:Cookie(String name, String value);
Cookie类一旦创建,名称不能再更改,但是值可以被更改
String getName();
void setValue(String newValue);
String getValue();
void setMaxAge(int exiry); // 秒
// 如果为正数,到时间后删除;如果为负数,关闭浏览器时才删除;如果为0,则立即删除
int getMaxAge();
void setPath(String uri);
String getPath();
void setDomain(String pattern);
// 值必须以.开头,不区分大小写
String getDomain();
void setVersion(int v);
int getVersion();
void setComment(String purpose);
String getComment();
void setSecure(boolean flag);
boolean getSecure();
获取Cookie:
Cookie[] cookies = request.getCookies();
Session
Session的使用
HttpSession session = request.getSession(true/false);
如果参数是true,在没有
由于getSession()
方法可能会产生发送回话标识号的Cookie头字段,所以必须在发送任何响应内容之前调用getSession()
方法。
//HttpSession对象常用方法
String getId();
long getCreationTime(); //返回时间戳
long getLastAccessedTime(); //返回时间戳
void setMaxInactiveInterval(int interval); //默认空闲超时间隔,单位为秒,设置为-1则永不过期
boolean isNew();
void invalidate(); //强制设为无效
ServletContext getServlerContext(); //返回HttpSession对象所属的Web应用程序对象
void setAttribute(String name, Object value);
**Object** getAttribute(String name); //如果要String要强转(String)obj
void removeAttribute(String name);
Session的生命周期
- Session失效的三种情况:超时(规定时间没有新请求,tomcat默认30min)、强制失效、关闭浏览器。
- 设置超时时间的3种方式:setMaxInactiveInterval、项目的web.xml配置文件的session-config->session-timeout、配置服务器的web.xml
在web.xml中设置session超时时间,单位时分钟。设置为0或附属,表示会话用不超时
<session-config>
<session-timeout>30</session-timeout>
</session-config>
域对象
对象 | 生命周期 | 有效范围 |
---|---|---|
PageContext (JSP) | 访问页面 - 离开页面 | 一次请求的一个页面 |
HttpServletRequest | 发送请求 - 返回响应 | 一个用户的一次请求 |
HttpSession | 开始会话 - 会话超时或被销毁 | 一个用户的一个会话 |
ServletContext | 应用启动 - 应用关闭 | 整个应用程序,所有用户共享 |
JSP
JSP = HTML(JavaScript) + Java code + jsp tags
java code
java片段 <% a %> 可以是任何java代码,不能声明方法,需要分号
声明 <%! b %> 声明变量或方法,需要分号
表达式 <%= %>,不需要分号
class JspServlet{
b
service(){
a
}
}
jsp tags
- 注释 <%-- --%>
- 指令标签:page、include、taglib
- 动作标签:include、forward
JSP注释
<!-- 这是一个HTML注释,会在前端显示出来 -->
<%-- 这是一个JSP注释,不会在前端显示出来 --%>
JSP指令标签
指令格式:<% @xxx %>
page指令
用于对页面的某些特性进行描述
<%@ page 属性名1="属性值1" %>
属性:language、import、session、isErrorPage、errorPage、contentType、pageEncoding
include指令
一个页面包含另一个页面,会将file代码合并进来,形成一个jsp
<%@ include file="被包含的文件地址" %>
一般使用相对路径
为什么是file?因为是引入的另外一个文件进行编译
taglib指令
标识该页面中所使用的标签库,同时引用标签库并指定标签的前缀
<%@ taglib prefix="tagPrefix" uri="tagURI" %>
- prefix:用于指定标签的前缀,不能为jsp、jspx、java、sun、servlet、sunw
- uri:用于指定标签库文件的存放位置
例:在页面中引用JSTL的核心标准库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
这个好像不是重点吧
JSP动作标签
包含文件元素<jsp:include>
<jsp:include page="URL" flush="true/false" />
- page:被引入文件的相对路径
- flush是否将当前页面的输出内容刷新到客户端,默认为false
原理是将被包含页面编译处理后的结果包含在当前页面中
include指令和<jsp:include>区别:include指令是将文件合成后进行编译 所以不能用重复的变量名或方法,<jsp:include>是每个文件单独编译。
为什么是page?因为是转发到的其他页面的结果到这里进行合并处理
请求转发元素<jsp:forward>
请求转发后没当前页面将不再执行,而是执行该元素指定的目标页面
<jsp:forward page="relativeURL" />
- page:转发目标的相对路径,必须是当前应用程序的资源
为什么是page?因为转发到的是页面而不是文件
JSP隐式对象
名称 | 类型 | 描述 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求信息 |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端回应消息 |
config | javax.servlet.ServletConfig | 表示当前 JSP 页面的配置信息。 |
session | javax.servlet.http.HttpSession | 用于保存用户的信息 |
application | javax.servlet.ServletContext | 代表 JSP 页面的全局上下文,用于存储应用范围的对象。 |
page | java.lang.Object | 代表当前的 JSP 页面实例本身,类似于 this 关键字。 |
pageContext | javax.servlet.jsp.PageContext | 提供对 JSP 页面内的上下文信息的访问,包含所有隐式对象。 |
exception | java.lang.Throwable | 捕获的异常对象,仅在页面声明 isErrorPage="true" 时可用。 |
- out对象
- out对象是JspWriter,有一个单独的缓冲区,所以和PrintWriter一起使用的时候会在后面输出。
- pageContext对象,代表当前JSP页面的运行环境,可以获取JSP的其他8个隐式对象
- 隐式对象
- JspWriter getOut()
- Object getPage()
- ServletRequest getRequest()
- ServletResponse getResponse()
- HttpSession getSession()
- Exception getException()
- ServletConfig getServletConfig()
- ServletContext getServletContext()
- pageContext不仅提供了获取隐式对象的方法,还提供了存储数据的功能
- setAttribute(String name, Object value)
- setAttribute(String name, Object value, int scope)
- getAttribute(String name): 获取当前页面范围内的属性
- getAttribute(String name, int scope):
- findAttribute(String name): 从页面范围开始,逐层向上查找(页面、请求、会话、应用)并获取属性值
- removeAttribute(String name): 从页面范围移除指定的属性
- removeAttribute(String name, int scope): 从指定范围移除指定的属性
- getAttributeScope(String name): 返回指定属性所在的范围(PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE 或 PageContext.APPLICATION_SCOPE)
- 隐式对象
- exception对象
- 只有在错误处理页面才可以使用
JDBC
六个步骤:
// 加载并注册数据库驱动
DriverManager.registerDriver(Driver driver);
Class.forname("DriverName");
// 通过DriverManager获取连接
Connection conn = DrivetManager.getConnecter(String url, String user, String pwd);
// url: jdbc:mysql://hostname:port/databasename
// 通过Connection对象获取Statement对象
stmt = conn.createStatement();
preStmt = conn.prepareStatement(String sql);
// 使用Statement对象执行sql语句
// 使用Statement时
ResultSet rs = stmt.executeQuery(sql);
int rs = stmt.executeUpdate(sql);
// 使用prepareStatement时
preStmt.setString(1, "a");
preStmt.setString("name", "a");
preStmt.executeUpdate();
ResultSet rs = stmt.executeQuery();
// 操作ResultSet结果集
while(rs.next()) {
int id = rs.getInt("id"); // 通过列名获取
// 或者
int id = rs.getInt(1); // 通过索引获取
}
// 关闭连接,释放资源
// 包括ResultSet、Statement、Connection等资源,使用close()方法关闭