《Java Web程序设计任务教程》重点知识总结(Java高级开发技术知识点总结)

本文是《Java Web程序设计任务教程》的重点知识总结,涵盖HTML、CSS、JavaScript基础,深入讲解XML、HTTP协议、Tomcat、Servlet、请求响应及会话管理等内容,适合Java Web初学者和复习者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

期末考试临近,整理出《Java高级开发技术》所有重点题目,供读者救急
本文使用的教材为:
黑马程序员. Java Web程序设计任务教程[M]. 第一版. 北京:人民邮电出版社, 2017.
如需使用参考文献,会在文末进行标注,如用到网页参考文献,会在文中标注框增加跳转链接


第一章 网页开发技术

本章有HTML技术、CSS技术、JavaScript技术三个部分

HTML技术

1.html开头以<!DOCTYPE>标记,后跟随,标记头部信息,定义要显示的内容
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>

CSS技术

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的引用方式

<!--以下是内嵌式,把CSS代码集中在head头部-->
<head>
	<style type="text/css">
		选择器{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}  
	</style>
</head>

<!--以下为链入式,把CSS文件的路径链接到头部-->
<head>
	<link href="CSS文件路径" type="text/css" rel="stylesheet" />
	<!--stylesheet是样式表文件-->
</head>

4.CSS选择器和常用属性

<!--标记选择器:所有html标记均可用-->
标记名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;} 
<!--类选择器:类名就是html页面元素的class属性-->
.类名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;} 
<!--id选择器:id就是html页面的id属性值-->
#id名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;} 
<!--通配符选择器-->
*{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;} 

JavaScript基础

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')"; />
	<!--鼠标单击后,会出现一个提示框,内容为hello-->
</body>

7.Window对象获取浏览器窗口相关信息,Date对象获取有关时间,String对象提供字符串处理的属性方法等(该部分具体内容略,请自行查阅教材)


第二章 Java Web概述

XML基础

XML(Extensible Markup Language),可扩展标记语言。

<!--文档声明-->
<?xml版本信息 [编码信息] [文档独立性信息]?>
<!--如--><?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!--元素定义-->
<内容></内容>没有嵌套子元素为空元素标记为</内容>
<!--属性定义-->
元素中写明,值用单引号或双引号

1.DTD约束
以下为.dtd文件

<!ELEMENT 书架 (书+) >定义一个元素,书架是元素名,书+是修饰的成分
<!ELEMENT 书(书名,作者,售价) >书是元素名,括号里是包含的元素名
<!ELEMENT 书名 (#PCDATA) >嵌套内容是普通文本字符串
<!ELEMENT 作者 (#PCDATA) >
<!ELEMENT 记录 (#PCDATA) >

以下为在.xml文件中进行引入

<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URL"><!--相对位置-->
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD的URL"><!--绝对位置-->

在xml中直接嵌入dtd

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE 根元素名 
	DTD语句
	>

2.Schema约束

<?xml version=1.0?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
xs:schema为根元素,所有属性都在上面的网址所以网址必须写
	<xs:element name="root" type="xs.string"/>
</xs:schema>

在xml中定义名称空间

<元素名 xmlns:元素名="URI">

Schema语法
元素定义

<xs:element name="xxx" type="yyy"/>

HTTP协议

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

tomcat下目录的作用
bin存放tomcat的可执行文件和脚本文件,conf存放tomcat服务器和所有web应用需要访问的jar文件,logs放日志文件,temp存放临时文件,webapps是应用程序的主要发布目录,work放tomcat工作目录
其他不想写了没啥用
mysql用3306端口,tomcat默认8080


Servlet基础

Servlet体系结构图

HTTP请求
HTTP响应
客户端
HTTP服务器
Servlet容器
Servlet

Servlet开发入门

编写servlet相关类时最好用继承的方法,因为那么多接口用不过来。。。
1.创建web.xml

<?xml version="1.0" encoding="IDO-8859-1"?>
<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>
		<!--开启后浏览器打开localhost:8080/项目名/网址-->
	</servlet-mapping>
</web-app>

2.Servlet生命周期
Servlet生命周期图
3.post方式html举例

<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>
	<servlet-name>Test</servlet-name>
	<servlet-class>
		class文件所在位置
	</servlet-class>
</servlet>
<servlet-mapping>
	<!--映射为test1和test2-->
	<servlet-name>Test</servlet-name>
	<url-pattern>/test1</url-pattern>
	<url-pattern>/test2</url-pattern>
</servlet-mapping>
<!--为了便利的挖坑,还可以把test2单独拿出来,你看维护的同学扎不扎你就完事了-->
<servlet-mapping>
	<!--映射为test2-->
	<servlet-name>Test</servlet-name>
	<url-pattern>/test2</url-pattern>
</servlet-mapping>

Servlet通配符

(1)如:*.do匹配所有.do结尾的url
(2)如:/asd/*匹配/asd开头所有URL
两种通配符不能混合使用

ServletConfig

初始化一个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><!--getInitParameter()方法-->
		<param-name>encoding</param-name><!--参数名称-->
		<param-value>UTF-8</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>Test</servlet-name>
	<url-pattern>test2</url-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访问即可

ServletContext

Servlet启动时,会为每个Web应用创建唯一的ServletContext对象代表当前Web应用,封装Web应用信息并实现多个Servlet之间的数值共享。

Web应用的初始化参数

(1)在web.xml初始化

<context-param>
	<param-name>XXX</param-name>
	<param-value>xxx</param-value>
</context-param>
<context-param>
	<param-name>AAA</param-name>
	<param-value>aaa</param-value>
</context-param>
<servlet>
	<servlet-name>Test1</servlet-name>
	<servlet-class>class文件位置</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>Test1</servlet-name>
	<url-pattern>test1</url-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("<br />");
	}
	}
	public void doPost(HttpServletRequest request,
	HttpServletResponse response)throws ServletException, IOException{
	this.doGet(request,response);
	}
}

多个Servlet对象共享数据

方法功能
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);
		}
	}

利用Referer请求头防止“盗链”

//书上代码
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 + "<br>");
			}
		}
		public void doPost(HttpServletRequest request, 
	        HttpServletResponse response)throws ServletException, IOException {
			doGet(request, response);
		}
	}

会话及其会话技术

Session超时管理

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

不想写了,后面就很简单了,看书吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RonaldDong存档旧号,不再更新

非常感谢您对我的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值