Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaWeb_1 搭建Web环境、初识JSP #32

Open
Qingquan-Li opened this issue Feb 9, 2017 · 0 comments
Open

JavaWeb_1 搭建Web环境、初识JSP #32

Qingquan-Li opened this issue Feb 9, 2017 · 0 comments
Labels

Comments

@Qingquan-Li
Copy link
Owner

Qingquan-Li commented Feb 9, 2017

Java Web 开发技术重点:
掌握 Web 技术的基础知识
Servlet 技术的概念及应用
JSP 技术基础及应用
使用 JSP、Servlet 开发动态网站

JavaWeb_1 搭建 Web 环境、初识 JSP

重点:
使用 Tomcat 部署 Web 项目
使用 JSP 实现输出

要点:
理解 C/S 和 B/S 架构的概念
使用 MyEclipse(Eclipse) 创建 Web 项目
使用 Tomcat 部署静态网站
使用 page 指令设置页面属性
掌握 JSP 声明和使用变量
使用 JSP 表达式和 out 实现页面输出
理解 JSP 执行原理

C/S 和 B/S 架构

C/S:

客户端完成数据处理,数据表示以及用户接口功能;服务器端完成 DBMS(数据库管理系统)的核心功能。将任务合理分配到 Client 端 和 Server 端来实现,降低了系统的通讯开销。
例如:淘宝网

B/S:

B/S结构(Browser/Server,浏览器/服务器模式),统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,服务器安装 MYSQL 等数据库。浏览器通过 Web Server 同数据库进行数据交互(请求-响应模式)。它可看作是一种由传统的二层模式 Client/Server 结构发展而来的三层模式结构在 Web 上应用的特例。
例如:QQ 客户端

在互联网上如何实现资源访问——URL

计算机通过统一资源定位符实现资源访问,URL(Uniform Resource Locator)统一资源定位符,唯一能识别 Internet 上具体的计算机、目录或文件夹位置的命名约定。

语法:protocol://hostname[:port]/path/[;parameters][?query]#fragment
= 协议部分://主机地址/目标资源地址?传递的参数

实例:https://github.com/FatliTalk/blog/issues?31

Web 服务器

是可以向发出请求的浏览器提供文档的程序
提供网上的信息浏览服务

常用的Web服务器

  • Microsoft:IIS
  • Apache:Tomcat
  • Oracle:WebLogic
  • IBM:WebSphere
  • Nginx
  • ...

Tomcat 及其作用

Apache Jakarta的开源项目
轻量级应用服务器
开源、稳定、资源占用小

Tomcat 是一个 JSP/Servlet 容器,主要用以解释和运行 JSP 。
例如:客户端浏览器第一次请求一个 Demo.jsp 文件后,会在 Tomcat 的 work 目录下生成 Demo_jsp.java 和 Demo_jsp.class 文件(参考下面的 JSP 执行过程)。
而在本地的诸如 Eclipse 等 IDE 工具 / 编译器中部署项目并启动配置好的本地 Tomcat ,同样也会在 Tomcat 的 work 目录下生成 Demo_jsp.java 和 Demo_jsp.class 文件。

通俗说,Tomcat 是 JSP 网站的服务器之一,就像 ASP 网站要用到微软的 IIS 服务器,PHP 网站用 Apache 服务器一样,因为 JSP 动态网站使用脚本语言、Java(解释性语言,​不进行预先编译,以文本方式存储代码。必须先解释再运行)等写的,需要有 Web 服务器来解释,Tomcat 6.0开始自带 JDK 。
如果网页是纯 HTML 的,浏览器就可以直接解释查看效果,但是网页一但是 JSP、ASP、PHP 等的动态网页时,浏览器自己就无法解释了,需要上面说到的服务器。Tomcat 便可以解释 JSP 等 Java 编写的网站。

Tomcat 安装及启动(windows)

  • 启动Tomcat :bin\startup.bat
  • 访问 http://localhost:8080 查看 Tomcat 主页
  • 停止Tomcat :bin\shutdown.bat

注意:

  1. 安装 Tomcat 。免安装版的 Tomcat 不用配置环境变量,只需到 Tomcat 的 bin 目录下执行 service.bat install
  2. 启动 Tomcat 。打开 tomcat7w.exe 报错:指定的服务未安装。解决方法:命令行窗口 → 进入 Tomcat 安装目录的 bin 目录 → 输入 service.bat install

Tomcat 目录结构

  • /bin :存放各种平台下用于启动和停止 Tomcat 的脚本文件
  • /conf :存放 Tomcat 服务器的各种配置文件
  • /lib :存放 Tomcat 服务器所需的各种 JAR 文件
  • /logs :存放 Tomcat 的日志文件
  • /temp :Tomcat 运行时用于存放临时文件
  • /webapps :当发布 Web 应用时,默认情况下会将 Web 应用的文件存放于此目录中
  • /work :Tomcat 把由 JSP 生成的 Servlet 放于此目录下

Tomcat 配置及项目部署

默认端口号:8080
通过配置文件 server.xml 修改 Tomcat 端口号

  • 实际开发中,在 IDE 工具导出 war 包到 Tomcat 的 webapps 文件下
  • 实际开发中,使 Tomcat 指向一个统一位置并且不用重复部署:
    企业级开发中一个 Tomcat 对应一个工程项目, Tomcat 须指向一个统一位置并且设置不用重复部署,方法:
    修改 Tomcat 的 conf 目录下的 server.xml 文件:在 <host>...</host> 目录里,加入以下代码:
<Context path="" docBase="服务器的工程目录位置" reloadable="true"/>

此时路径不用写工程名:localhost:8080/fatlitalk/index.html → localhost:8080/index.html
参考:http://bbs.csdn.net/topics/310246256

MyEclipse 配置 Tomcat

  1. preferences → tomcat 选择本机安装的 Tomcat 版本,选择本机的 tomcat 安装目录
  2. 选择已选 Tomcat 版本下的 JDK ,选择本机安装的 JDK (即使显示 jre environment)
  3. Deploy MyEclipse J2EE Project to Sercer... 按钮,添加本地配置的 Tomcat ,之后即可进行 Project Deployments
  4. Run MyEclipse Servers 之后即可访问 JSP 页面



JSP 概述

Java Server Pages ,运行在服务器端的 Java 页面,使用 HTML 嵌套 Java 代码实现

<html>
    <head>
           <title>第一个JSP程序</title>
    </head>
    <body>
           <%out.println("Hello World!");%>
    </body>
</html>

JSP 执行过程 / 工作原理

*.jsp → 翻译 *_jsp.java → 编译 *_jsp.class → 执行

          请求demo.jsp                 { 调用demo.jsp
客户端==========应用服务器{ 生成demo_jsp.java  ↓编
          返回响应页面                 { 执行demo_jsp.class ↓译

  1. 首先,客户端浏览器发出请求(request),请求访问 JSP 网页
  2. 接着,JSP Container(如 Web 容器/服务器 Tomcat)调用 .JSP 文件 翻译生成 Servlet 的源代码( .java 文件)
  3. 然后,将产生的 Servlet 的源代码( .java 文件)编译成可执行的 .class 字节码文件,进行解释执行
  4. 最后把结果响应(response)给客户端浏览器
    执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。
    转译时期:JSP转译成Servlet类(.class文件)。
    请求时期:Servlet类(.class文件)执行后,响应结果至客户端。

附:

  • Tomcat作为一个 JSP/Servlet 容器,主要用以解释和运行 JSP ,并且 Tomcat 6.0 开始自带 JDK (参考上面的 Tomca 及其作用
  • JDK(Java SE Development Kit) 是开发工具包,相当于是一个编译器,把 .java 文件编译成 .class 文件,装载到 JVM (Java Virtual Machines)中解释执行
  • JRE(Java SE Runtime Environment) 是运行环境,相当于 jvm 虚拟机。jdk 开发出来的 java 程序必须在 jvm 中运行,jre就提供了这么一个环境

解决 JSP 中文乱码

  • 设置请求和响应的编码方式(method="post"):
    • request.setCharacterEncoding("UTF-8");
    • <%@page language="java" contentType="text/html";charset="utf-8"%>
      • response.setCharacterEncoding("UTF-8"); (等同上面的 charset="utf-8"
  • method="get"(通过 url 传参)提交表单出现乱码,copy 上面的 method="post" 的代码后:
    • 治标的方法:new String(s.getBytes("iso-8859"),"utf-8");
      eg : String username = request.getParameter("username");
      String un = new String(username.getBytes("iso-8859-1"),"utf-8");
    • 治本的方法:配置 tomcat\conf\server.xml 文件
      • ①URIEncoding="UTF-8"
      • ②useBodyEncodingForURI="true"(使用响应页面中设置的 request.setCharacterEncoding(""); 请求的编码格式,比①灵活):
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true"/>
  • Eclipse 新建 JSP 默认字符编码格式为 UTF-8 :Window → Preference → Web → JSP Files(默认 ISO-8859-1(ISO Latin-1) )
  • MyEclipse 新建 JSP 默认字符编码格式为 UTF-8 :Window → Preference → MyEclipse → Files and Editors → JSP

附:常见的支持中文的编码方式
参考: https://www.zhihu.com/question/23374078

  • gb2312 常用简体汉字
  • gbk 简体和繁体汉字
  • utf-8 所有国家需要的字符

附:Eclipse设置字符编码格式:

  1. 工作空间: Window->Preferences->General->Workspace->Text file Encoding ,默认是 GBK ( Windows 中文版编码格式), GBK 向下兼容国家标准 GB2312 及其扩容后的 GB2312 。 PS:可以设置不同的工作空间储存不同编码格式的项目。此时需为 UTF-8 格式的项目才能放进此 Workspace。
  2. 单个工程: 右击工程, Properties->Resource->Text file Encoding。默认继承容器编码,若单独设置编码勾选 “Other”,
    勾选 Store the encoding of derived resources separately :分別存儲派生資源的編碼,即为这个工程设置单独的编码格式。
  3. 一类文件:假设要将 js 文件编码方式设为 UTF-8 ,则应该 Window->General->Content Types 在 Content Types 中选择 JavaScript Source File ,在 File associations 栏中选中 *.js ,然后在 Default Encoding 栏中输入 UTF-8 ,单击 Update 。 PS :以后新建的文件都为 UTF-8 。
  4. 单个文件:右击要修改的文件,在弹出的菜单中选择最后一项 “Properties” ,修改方法类似。

使用JSP实现输出

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jspDemo</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址" + request.getRemoteAddr());
%>
</body>
</html>

page 指令

通过属性定义了 JSP 的特性,实现与 JSP 容器的通信

语法:

<%@ page language="属性值" import="属性值" contentType="属性值"%>
属性 说明
language 指定 JSP 页面使用的脚本语言
import 通过该属性来引用脚本语言中使用到的类文件
contentType 用来指定页面的MIME类型,以及(服务器响应给客户端的)字符编码方式

out 对象

  • out 对象是 JSP 的内置对象
    • 无需实例化即可使用
  • 实现数据的输出显示

out对象的方法:
<%out.print();%><%out.println();%> ( ln 换行实际上是 Java 代码的 \n )实现页面输出,括号中的内容相当于 HTML 内容。 out.flush() 刷新流。

属性 说明
print 向页面输出显示
println 向页面输出显示,在结尾处添加换行

JSP 中添加注释

  • HTML注释:<!--HTML注释--> (在网页源代码中显示
  • JSP 注释:<%--JSP注释--%> (在网页源代码中不显示,注释内容不会被发送至浏览器甚至不会被编译,在翻译后的 _jsp.java 文件中也不显示
  • JSP 脚本中注释:<%//单行注释%><%/*多行注释*/%> (在网页源代码中不显示,相当于 Java 注释)

转义字符

  • JSP 注释<%// <% %> %>中使用 <% %><% %\>
  • <% :<\%
  • %> : %\>
  • 单引号: \'
  • 双引号: \"

JSP 中声明和使用变量

为什么使用变量:

  • 使用 <%out.println();%> 实现显示页面的全部内容, Java 代码与 HTML 标签混在一起,可读性不好,不利于修改
  • 显示数据来自于数据库

使用变量:

  • JSP 中声明和使用变量。如: <%String title="FatliTalk";%>
  • <%=%> 实现页面输出。如: <%=title%> 。常见错误:<%=title;%>
  • 使用 <%@page%> 导包。如: <%@page import="java.util.Date"/>
  • 输出转义字符。如: <%="What is \"FatliTalk\""%>

局部变量和全局变量:

  • 使用 <% %> 声明局部变量
  • 使用 <%! %> 声明全局变量

Web 程序调试和排错

Web程序常见错误:

  • 404错误:找不到访问的页面或资源
    • 运行时, URL 输入错误
    • 将页面放在 WEB-INF 下
    • 外部启动 Tomcat ,未部署项目
  • 500错误: JSP 页面代码有误
    • JSP 页面代码有错误
  • 页面无法显示
    • 未启动 Tomcat
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant