基础(1)
什么是Java Web
用Java技术来解决相关Web互联网领域的技术总称。
需要在特定的web服务器上运行,分为web服务器和web客户端两部分。
跨平台,能够在多个平台中部署与运行。
需要会哪些技术:
- 基于页面的前端技术,如html、css、JavaScript等
- 动态语言技术,如java、jsp等
- 数据库的技术,如Oracle、MySQL、SqlServer等
- 其他工具与组件,如服务器,SSM,SSH等
JSP简介
JSP全名为Java Server Pages——Java服务器页面,本质上是一个简化的Servlet设计。
JSP是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成jsp文件,后缀名为(*.jsp)。
用JSP开发的Web应用时跨平台的,能在多种操作系统平台中运行。
第一个JSP程序
图解创建一个JSP项目
第一步:创建一个dynamic web project(如果没有该选项,则在project里进行搜索)

第二步:

第三步:

Content directory选项设定web的内容都存放在HelloWeb项目下的WebContent目录里面。
思考:如果现在有一个index.html文件,怎么将其改成.jsp文件?
-
方法一:直接将后缀名改为.jsp,然后在代码最上面加上以下内容:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
-
方法二:在工程中新建一个jsp页面,把html页面的内容拷贝进去,并且要保留原始.jsp文件中的内容
动态项目的结构

WEB-INF目录下:
-
/classes:Java编译器产生的类文件输出目录。应用程序类载入器使用此目录中的类来加载运行时所需要的功能。
-
/lib:包含了Web应用程序所引用的支持性JAR文件,是综合的资源文件目录。
-
web.xml:标准Web应用程序部署描述文件。
JSP程序的执行流程

- 用户向服务器请求hello.jsp页面,服务器获取到该页面,并将其转换成一个servlet程序(hello.java),并且编译该程序,得到class文件,然后在服务器上执行该class文件,将结果返回给用户。
JSP内置对象及4种作用域
JSP内置对象简介
-
内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用
-
作用域:pageContext、request、session、application
request对象
封装了由web浏览器或者其他客户端生成HTTP请求的细节(参数、属性、头标和数据)
request的用法:

request作用域
用户的请求周期
out对象
代表输出流的对象,输出指定的信息到页面中
out的用法:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="com.imooc.db.*,com.imooc.bean.*,java.util.HashMap"%>
<!DOCTYPE html>
<html>
<head>
<title>学生成绩</title>
</head>
<body>
<%
HashMap<String, Student> map = DBUtils.map;
int i = 0;
for (String key : map.keySet()){
%>
<p>第<%out.println(i);%>条:<% out.println(map.get(key).toString());%></p>
<%i++;%>
<%
}
%>
</body>
</html>
response对象
封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状态码的方式
response使用示例:
<h3>响应对象的字符编码集:<%=response.getCharacterEncoding()%></h3>
pageContext对象
pageContext提供了转发请求到其他资源和包含其他资源的方法,提供获取其他内置对象的方法。
pageContext的作用:
- 1.调用forward方法来完成请求的转发
- 2.通过include方法来完成jsp页面的包含关系:使用场景:经常一套网站中的各个页面会有相同的模块/部分,将这些部分抽取出来,当用到的时候,使用include指令将它们插入到页面中。
- 3.pageContext可以用来获取其他的内置对象,getRequest、getSession等。
page对象
代表了正在运行的由JSP文件产生的类对象。
session对象
主要用于跟踪会话。
什么是会话?
会话是代表用户第一次进入当前系统知道退出系统或者关闭浏览器,在此期间与服务器的一系列交互。
config对象
用于获取配置信息
示例:
Config对象:<%=config.getServletName() %>
config获取初始化参数:<%=config.getInitParameter("age") %>
初始化参数age在web.xml的servlet标签中设置
exception对象
异常对象,用来获得异常信息。
通过在页面中指定errorPage来指定出现异常后,跳转到哪个页面处理:
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="error.jsp"
pageEncoding="UTF-8" import="com.imooc.db.*,com.imooc.bean.*,java.util.HashMap"%>
exception对象只能在错误页面中使用。
怎么声明一个页面是错误页面?
在页面开头加上 isErrorPage="true"
<%@ page language="java" contentType="text/html charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
application对象
提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径方式。
应用:获取当前系统的访问量
request作用域
使用request作用域在相邻两个web资源之间共享同一个request请求对象。
pageContext作用域
当前的执行页面
session作用域
会话期间
application作用域
web容器的声明周期
JSP页面之间传递数据
相邻两个jsp页面之间传递数据,可以通过URL参数的方式来传递数据:
规则: 资源?key=value&key=value 用&来分隔
URL中的参数又叫做请求参数,顾名思义,它可以通过request对象来获取到。
示例:
<a href="update.jsp?
account=<%=e.getAccount()%>
&name=<%=e.getName()%>
&email=<%=e.getEmail()%>">
修改</a>
XML入门
XML的基本概念
- XML(Extensible Markup Language):可扩展标记语言
- 允许开发者自由定义标签,可以将标签和内容有效分离
- XML不再侧重于数据如何展示,而是更多的关注数据如何存储和传输
XML的应用场景
- XML把数据从HTML中分离出来
- 简化数据共享
- 简化数据的传输
- 简化平台的变更
XML的优势
简单易用的标记语言
严格的格式
数据逻辑和显示逻辑分离
XML文档规则
XML声明:写在xml文件开头
<?xml versio="1.0" encoding="utf-8" standalone="yes"?>
字符集
- 简体中文:GBK或者GB2312
- 繁体中文:BIG5
- 西欧字符:ISO8859-1
- 通用的国际编码:unicode
- 针对Unicode的可变长度字符编码:UTF-8
XML元素的基本规则
1.合法化标签名
- xml元素由开始标签和结束标签组成,结束标签比开始标签多一条斜线
- xml文档区分大小写,因此,开始标签和结束标签名称必须完全相同,大小写也要完全一致。
XML文档对于标签名的要求如下:
-
标签名可以字母、字符、下划线、中划线、冒号和点号组成。但是不能以数字、中划线和点号开头。
-
标签名不能包括 < > , $ 等符号
-
标签名中尽量不要出现英文冒号,除非是在命名空间中。
-
标签名不能以字符"xml"(或者任意大小写组合)开始
-
标签名不能包含空格
2.嵌套子元素
-
XML允许无限深度嵌套子元素,只要保证子元素之间的嵌套合理即可
-
XML元素可以嵌套多个重名的子元素,这多个子元素之间是有序的
3.空元素
-
XML允许使用空元素语法,空元素可不接受子元素,也可不接受字符串内容
-
空元素和内容为空的元素并不相同
-
空元素只是不能包含子元素,也不能包含字符串内容,但完全可以接受属性,而且可以接受多个属性
XML文档规则——字符数据
开始标签和结束标签之间的文本可以是任意的Unicode字符。
如果文本字符串中包含一些特殊的字符,例如尖括号(<),或者and符号(&),由于这些符号在XML文档中都有特殊的含义,因此直接在XML元素中使用该字符串将引起文档混乱。
1.使用实体引用
为了正确的处理XML文档中的特殊字符,xml允许使用实体来表示这些特殊字符。XML预置了5个实体引用,如下表所示:
| 实体引用 | 代表的符号 | 说明 |
|---|---|---|
< |
< | 小于符号 |
> |
> | 大于符号 |
& |
& | and符号 |
' |
' | 英文单引号 |
" |
" | 英文双引号 |
2.使用CDATA标记
在特殊标记CDATA下,所有的特殊字符,甚至是无效的元素都将被当成简单的字符处理,实体引用也会失去作用,变成纯文本。
语法:
<![CDATA[文本内容]]>
XML文档规则——注释
XML文档还可以加入解释用的字符数据,这些解释用字符串不会被XML解析器处理,这些解释用的文本称为注释。
语法:
<!--注释字符串-->
XML命名空间
为什么要使用命名空间?
在同一份XML文档中可能出现多个同名的元素和属性,他们具有不同的含义和作用,如果不从语法上提供区别,则XML处理器无法区分它们。
命名空间就是给元素指定一个使用区间。
语法:
xmlns[:prefix] = "命名空间字符串"
命名空间的特征:
名字很长(命名空间通常是一个绝对的URL地址)
名字里通常包含英文冒号,斜线等特殊字符
Servlet入门
什么是servlet
servlet(servlet applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式的浏览和修改数据,生成动态web内容。
servlet生命周期
分为3个阶段:
初始化阶段——调用init()方法
Servlet第一次被访问的时候调用
响应客户请求阶段——调用service()方法
每次请求都会调用service()方法
终止阶段——调用destroy()方法
当Servlet被销毁的时候调用
看一个示例:
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init(ServletConfig config) throws ServletException {
System.out.println("servlet的init()方法被调用了");
}
public void destroy() {
System.out.println("servlet的destroy()方法被调用了");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用了service()方法");
}
}
请求与响应
-
请求:浏览器对服务器的一次访问被称为一次请求,请求用HttpServletRequest对象来表示
-
响应:服务器给浏览器的一次反馈称为一次响应,响应用HttpServletResponse对象来表示。
ServletContext与ServletConfig
java是一门面向对象的语言,万事万物皆对象。
-
整个JavaWeb工程也可以用一个对象来表示,这个对象就是ServletContext类型。
-
另外,可以在web.xml文件中给某一个Servlet配置一些配置信息,当服务器被启动的时候,这些配置信息就会被封装到某一个ServletConfig对象中去。因此ServletConfig表示的是某一个Servlet的配置信息。
代码示例:
public class Demo1Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
context.setAttribute("username", "张三");
String name = (String) context.getAttribute("username");
System.out.println("username = " + name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
public class Demo3Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig config = this.getServletConfig();
String age = config.getInitParameter("age");
System.out.println("age = " + age);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
重定向与转发——实现页面跳转
转发
- 调用的是HttpServletRequest对象中的方法
- 转发时浏览器中的地址栏中的url不会发生变化
- 转发时浏览器只请求一次服务器
重定向
- 调用的是HttpServletResponse对象中的方法
- 重定向时浏览器中的url地址会发生改变
- 重定向时浏览器请求两次服务器
MVC入门
Sun公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式。
servlet——>JSP——>JSP+JavaBean——>Servlet+JSP+JavaBean
-
Servlet缺陷:
- 需要配置
- 显示HTML元素的时候很复杂
-
JSP缺陷:
- 封装和处理数据麻烦
-
JSP + JavaBean模式优点:
- JSP显示数据
- JavaBean封装和处理数据
-
Servlet + JSP + JavaBean模式优点:
- 使用Servlet处理用户的请求
- JSP显示数据
- JavaBean封装和处理数据
使用Servlet+JSP+JavaBean模式,也被称为MVC模式:
M:Model模型层——JavaBean
V:View视图层——JSP
C:Controller控制层——Servlet
用户的请求都提交到Servlet(C),由C统一调度JavaBean(M)封装和处理数据,
由JSP(V)进行数据的显示。
MVC开发流程


浙公网安备 33010602011771号