基础(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个实体引用,如下表所示:

实体引用 代表的符号 说明
&lt; < 小于符号
&gt; > 大于符号
&amp; & and符号
&apos; ' 英文单引号
&quot; " 英文双引号

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开发流程

posted @ 2020-06-05 23:46  scnb  阅读(111)  评论(0)    收藏  举报