期末考试临近,整理出《Java高级开发技术》所有重点题目,供读者救急
本文使用的教材为:
黑马程序员. Java Web程序设计任务教程[M]. 第一版. 北京:人民邮电出版社, 2017.
如需使用参考文献,会在文末进行标注,如用到网页参考文献,会在文中标注框增加跳转链接
本章有HTML技术、CSS技术、JavaScript技术三个部分
1.html开头以标记,后跟随,标记头部信息,定义要显示的内容
2.单标记格式为<标记名 />,其意义就是用一个符号就能完整描述,双标记即为标记开始和结束,格式为<标记名>内容标记名>
3.常用标记
<p>用于标记一个段落p>
<br/>用来换行
<font 属性= "属性值">文本内容,用来控制网页中文本的样式如字号字体颜色font>
<font face="微软雅黑" size="7" color="green">这样会输出微软雅黑字号7的绿色字font>
<img src="这里放图像链接"/>就可以插入图片了,如果想加长宽就在链接后加 width和height,想加边框就是border,边框为0就是无边框
<table>table>表格标记,表格中<tr>tr>创建一行,行中<td>td>创建一个单元格
<form>form>用来创建表单,一般用法是<form action="url地址" method="提交方式" name="表单名称">,中间加表单的控件
<input type="控件类型">用于创建表单控件,如text为文本输入框,password为密码输入框,radio为单元输入框,推荐在这里预先定义好value,如
<input type="radio" name="gander" value="male"/>男
就能定义一个男的选项
checkbox是多选框,用法相似,file为文件上传,submit为提交按钮,reset为重置,点击后会清空
<textarea>testarea>用于创建多行输入框,如
<textarea cols="这里输入每行显示的字符数" rows="这里输入行数">输入框中默认显示内容textarea>
<ul>定义无序列表
<li>列表项,不定义type类型会看到的是实心圆li>
<li type="disc">就是默认,和上面一样li>
<li type="square">是实心正方形li>
<li type="circle">是空心圆li>
ul>
<a herf="跳转目标" target="目标窗口打开方式">创建超链接a>
目标窗口打开方式有_self原窗口打开(默认)、_blank新窗口打开、_parent在父框架集打开被链接文档、_top在整个窗口打开被链接文档
<div>将整个网页分割为不同的部分div>
1.CSS:Cascading Style Sheet
2.规则:
选择器{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
举例:
div{ border: 1px solid red; width: 600px; height: 400px;}
其意思为div选择器表示html作用的对象,border边框width宽度height高度,border的1px表示边框一个像素,solid表示实心边框线,红色
3.CSS在HTML的引用方式
<head>
<style type="text/css">
选择器{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
style>
head>
<head>
<link href="CSS文件路径" type="text/css" rel="stylesheet" />
head>
4.CSS选择器和常用属性
标记名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
.类名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
#id名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
*{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
1.HTML DOM(Document Object Model)
节点访问方式:
父节点对象 = 子节点对象.属性;
parentNode返回节点的父节点,没有父节点返回null;
childNodes返回节点到子节点的节点列表;
firstChild返回节点首个子节点,没有返回null;
lastChild返回最后一个子节点,没有返回null;
2.获取文档指定元素
//通过元素ID,下为寻找属性值为UserID节点的代码
document.getElementById("UserID");
//通过元素name,下为寻找name值为userName的节点
//由于不一定是一个结果将返回一个数组,如果要限制返回哪个元素可以通过标记下标值即后面的[0]
document.getElementsByName("userName")[0];
3.JavaScript应用于Html中
<script type="text/javascript">
此处为js代码
script>
<script type="text/javascript" src="这里放js的路径">script>
4.变量用var声明,数据类型、运算符、条件语句略
5.js调用:
function functionName/*函数名必须有*/(parameter1,parameter2.../*参数列表可选*/){
statements;/*函数语句必须有*/
return expression;/*返回值可选*/
}
6.事件处理
类别 | 事件 | 事件说明 |
---|---|---|
鼠标单击事件 | onclick | 鼠标单击时触发该事件 |
表单事件 | onblur | 当前元素失去焦点时触发事件 |
onchange | 当元素失去焦点并且元素内容发生改变时触发此事件 | |
onfocus | 当元素获得焦点触发此事件 | |
onreset | 当表单被重置触发此事件 | |
onsubmit | 当表单被提交触发此事件 | |
页面事件 | onload | 当页面加载完触发此事件 |
如:
<body>
<input type="button" name="btn" value="点我" onclick="art('Hello')"; />
body>
7.Window对象获取浏览器窗口相关信息,Date对象获取有关时间,String对象提供字符串处理的属性方法等(该部分具体内容略,请自行查阅教材)
XML(Extensible Markup Language),可扩展标记语言。
<内容>内容>没有嵌套子元素为空元素标记为内容>
元素中写明,值用单引号或双引号
1.DTD约束
以下为.dtd文件
定义一个元素,书架是元素名,书+是修饰的成分
书是元素名,括号里是包含的元素名
嵌套内容是普通文本字符串
以下为在.xml文件中进行引入
DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URL">
DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD的URL">
在xml中直接嵌入dtd
DOCTYPE 根元素名
DTD语句
>
2.Schema约束
xs:schema为根元素,所有属性都在上面的网址所以网址必须写
在xml中定义名称空间
<元素名 xmlns:元素名="URI">
Schema语法
元素定义
HTTP协议是超文本传输协议,请求/响应式协议,客户端发出请求,服务器进行响应。其特点有:
支持客户端/服务器模式
简单快速:客户端向服务器请求服务时,只需传送请求方式和路径。由于HTTP简单,服务器程序规模小,因而通信速度快
灵活:HTTP可传输任意类型数据,正在传输的数据类型由Content-Type加以标记
无状态:对事务处理没有记忆能力,后续要处理前面消息必须重传,可能导致数据量增大
1.GET方式
GET传输数据不超过2kb,使用方式是将form表单method属性设置GET或者不设置即默认方式,提交表单后浏览器就按此方式发送请求。
URL后面有?的后面是参数信息,参数名=参数值,多个参数用&进行分割。
2.POST方式
使用POST方式传递的数据,各个元素和数据作为实体消息发送给服务器,Content-Type消息头设置为application/x-www-form-urlencoded,该消息头自动设置为实体内容长度。
POST传输数据大小无限制,且比GET更安全
3.HTTP响应消息
HTTP/1.1 200 OK
1.1是通信版本,200是状态码,OK是状态描述
状态码:1xx表示已接受继续处理,2xx表示已接收理解并接受,3xx表示需要进一步细化请求,4xx表示客户端请求有错误,5xx表示服务器端出现错误
重要状态码:200成功处理,非常顺利;
302请求资源临时从不同URI响应请求,但请求者应继续使用原有位置来进行以后的请求;
304若客户端有缓存的文档则附加if-Modified-Since请求头,表示只有请求的文档在if-Modified-Since指定时间后发生更改,服务器返回新文档。若非最新缓存版本返回的是200;
404找不到请求资源;
500服务器发生错误。
响应消息头略,自行了解吧
tomcat下目录的作用
bin存放tomcat的可执行文件和脚本文件,conf存放tomcat服务器和所有web应用需要访问的jar文件,logs放日志文件,temp存放临时文件,webapps是应用程序的主要发布目录,work放tomcat工作目录
其他不想写了没啥用
mysql用3306端口,tomcat默认8080
编写servlet相关类时最好用继承的方法,因为那么多接口用不过来。。。
1.创建web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>servlet文件的名字servlet>
<servlet-class>servlet class文件的位置servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servlet文件的名字servlet-name>
<url-parttern>/网址url-parttern>
servlet-mapping>
web-app>
<form action="路径" method="post">
姓名<input type="test" name="name" /><br />
密码<input type="test" name="psw" /><br />
<input type="submit" value="提交" />
form>
指同一个Servlet映射成多个虚拟路径,即客户端可以通过多个路径实现对同一个Servlet的访问。
<servlet>
<servlet-name>Testservlet-name>
<servlet-class>
class文件所在位置
servlet-class>
servlet>
<servlet-mapping>
<servlet-name>Testservlet-name>
<url-pattern>/test1url-pattern>
<url-pattern>/test2url-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>Testservlet-name>
<url-pattern>/test2url-pattern>
servlet-mapping>
(1)如:*.do匹配所有.do结尾的url
(2)如:/asd/*匹配/asd开头所有URL
两种通配符不能混合使用
初始化一个Servlet后会将servlet配置信息封装到一个ServletConfig中,并通过调用init(ServletConfig config)将对象传递。
方法 | 功能 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象,包括所有初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
String getServletName() | 返回Servlet名字,即web.xml中servlet-name元素的值 |
(1)在web.xml中为Servlet配置参数
<servlet>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>Testservlet-name>
<url-pattern>test2url-pattern>
servlet-mapping>
(2)编写web.xml中servlet-name的类用于读取
public class Test extends HttpServlet{
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
//获得ServletConfig对象
ServletConfig config = this.getServletConfig();
//获取参数名为encoding对应的参数值
String param = config.getInitParameter("encoding");
out.println("encoding="+param);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletExpection,IOExpection{
this.doGet(request,response);
}
}
(3)启动Tomcat访问即可
Servlet启动时,会为每个Web应用创建唯一的ServletContext对象代表当前Web应用,封装Web应用信息并实现多个Servlet之间的数值共享。
(1)在web.xml初始化
<context-param>
<param-name>XXXparam-name>
<param-value>xxxparam-value>
context-param>
<context-param>
<param-name>AAAparam-name>
<param-value>aaaparam-value>
context-param>
<servlet>
<servlet-name>Test1servlet-name>
<servlet-class>class文件位置servlet-class>
servlet>
<servlet-mapping>
<servlet-name>Test1servlet-name>
<url-pattern>test1url-pattern>
servlet-mapping>
(2)创建该类
public class Test1 extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//得到ServletContext对象
ServletContext context = this.getServletContext();
//得到包含所有初始化参数名的Enumeration对象
Enumeration<String> paramNames = context.getInitParameterNames();
out.println("all");
//遍历所有初始化参数名,得到相应的参数值并打印
while(paramNames.hasMoreElements()){
String name = paramNames.nextElement();
String value = context.getInitParameter(name);
out.println(name + ": " + value);
out.println("
");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException{
this.doGet(request,response);
}
}
方法 | 功能 |
---|---|
Enumeration getAttributeNames() | 返回Enumeration对象,包括所有ServletContext的域属性名 |
Object getAttibute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
void removeAttribute(String name) | 根据参数值指定的域属性名,从ServletContext删除匹配的域属性 |
void setAttribute(String name,Object obj) | 设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
创建两个ServletContext接口方法设置和获取属性值
//省略前部
ServletContext context = this.getServletContext();
//通过setAttribute方法设置属性值
context.setAttribute("data","this servlet save data");
}
public void doPost省略了后面
this.doGet(request,reponse);
}}
getOutputStream():获取字节输出流对象为ServletOutputStream类型,可以直接输出字节数组的二进制数据。
getWriter():输出内容全为字符文本的网页文档
public class PrintServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
String data = "itcast";
// 获取字节输出流对象(重要!要考的!)
OutputStream out = response.getOutputStream();
out.write(data.getBytes());// 输出信息
//使用getWriter()方法发送消息体(也要考的,这是使用了getwriter的方法)
PrintWriter print = response.getWriter();
print.write(data); // 输出信息
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
第一种方式:
//设置httpservletresponse编码
response.setCharacterEncoding("utf-8");
//通知浏览器编码
response.setHeader("Content-Type","text/html;charset=utf-8");
第二种方式:
response.setContentType("text/html;charset=utf-8");
public voidsendRedirect(java.lang.String location) throws java.io.IOException
/*书上示例*/
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 用HttpServletRequest对象的getParameter()方法获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 假设用户名和密码分别为:itcast和123
if (("itcast").equals(username) &&("123").equals(password)) {
// 如果用户名和密码正确,重定向到 welcome.html
response.sendRedirect("/chapter04/welcome.html");
} else {
// 如果用户名和密码错误,重定向到login.html
response.sendRedirect("/chapter04/login.html");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
//书上代码
public class DownManagerServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取referer头的值
String referer = request.getHeader("referer");
// 获取访问地址
String sitePart = "http://" + request.getServerName();
// 判断referer头是否为空,这个头的首地址是否以sitePart开始的
if (referer != null && referer.startsWith(sitePart)) {
// 处理正在下载的请求
out.println("dealing download ...");
} else {
// 非法下载请求跳转到download.html页面
RequestDispatcher rd = request
.getRequestDispatcher("/download.html");
rd.forward(request, response);
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
//书上代码
public class RequestForwardServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 将数据存储到request对象中
request.setAttribute("company", "北京传智播客教育有限公司");
RequestDispatcher dispatcher = request
.getRequestDispatcher("/ResultServlet");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 获取PrintWriter对象用于输出信息
PrintWriter out = response.getWriter();
// 获取request请求对象中保存的数据
String company = (String) request.getAttribute("company");
if (company != null) {
out.println("公司名称:" + company + "
");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
<session-config>
<session-timeout>30session-timeout>
session-config>
不想写了,后面就很简单了,看书吧