1.web开发入门
1.1 引入
软件结构分类:
CS结构:客户端和服务器端
特点:
1)必须安装特点的客户端程序
2)服务器端升级,客户端同步升级
BS结构:浏览器和服务器端
特点:
1)不需要安装特点的客户端(只需要浏览器)
2)服务器端升级,客户端不需要升级的。
1.2 服务器
从物理上一台PC机器,配置比较高。
- web服务器:在PC机器安装web服务软件,提供web服务
- 数据库服务器:在PC机器安装了数据库软件,提供数据管理服务
- 邮件服务器:在PC机器上安装了可以收发邮件服务软件
1.3 web服务软件
web服务软件作用: 把本地资源文件共享给外部访问
package cn.jxufe.java.chapter03;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* socket服务器端程序
*/
public class Server {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// 1)创建ServerSocket对象,监听某个端口
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服务器正在启动....");
while (true) {
// 2)接收客户端连接
Socket socket = serverSocket.accept();
// 3)把本地的hello.html文件内容发送给socket客户端
// 3.1 构建数据发送通道
OutputStream out = socket.getOutputStream();
// 3.2 读取本地hello.html文件内容
FileInputStream fis = new FileInputStream("e:/hello.html");
/**
* 输入流 输入字节流: InputStream FileInputStream BufferedInputStream
*
* 方法: read(): 读取一个字节 read(byte[] data): 读取多个字节 如何判断文件结束? 返回的长度等于-1
*
* 输入字符流: Reader FileReader BufferedReader
*
* 方法: read(): 读取一个字符 read(char[] data): 读取多个字符
*/
// 边读边写
/*int len=0;
while( (len = fis.read())!=-1 ){
out.write(len);
}*/
// 使用字节数组形式
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);// 写出指定的buf数组内容,从0开始写,写到len位置
}
// 4.关闭资源
fis.close();
out.close();
}
}
}
1.4 市面上常见的web服务软件
WebSphere: 是IBM公司。是支持JavaEE规范的。收费的。
IIS:是微软公司。收费的。和net语言兼容性最好。
WebLogic:是BEA公司。收费的。支持JavaEE规范的。
Tomcat: 免费的。和java语言兼容性最好。不完全支持javaEE规范的。支持servlet,jsp.jdbc,javamail,但是不支持ejb
2.tomcat服务器基本使用
2.1 基本使用
1)到apache开源组织下的官网下载
2)下载的版本:
安装版: EXE msi
压缩版: zip rar tag.gz
3)启动软件
3.1 找到%tomcat%/bin/startup.bat。双击。
验证是否成功,打开浏览器:
3.2 看到一只猫的页面,证明ok了!
4)关闭软件
4.1 找打%tomcat%/bin/shutdown.bat.双击
2.2 体验tomcat服务器如何共享文件
规则:把文件拷贝到webappps目录下,不能单独共享文件,必须以目录(网站)形式共享
2.3 URL
http://localhost:8080/web/hello.html 统一资源定位符
http:// 协议。http协议
执行流程:
1) 本地hosts文件, ip地址 域名 (c:/windows/System32/drivers/etc/hosts)
2)在hosts文件中找不到,到网络运营商的DNS服务器中找域名对应的IP地址。
3)找到,访问对应的ip地址的PC机器.
localhost 域名。
本地域名: localhost
外部域名: www.baidu.com
8080 端口。软件监听端口
qq: 5555
tomcat: 8080
mysql: 3306
oracle: 1521
系统默认端口: 80
注意: 一个软件监听了默认端口,那么访问这个软件不需要写80.
web 网站名称。(web应用的名称)
hello.html 网站中的资源名称。
2.4 tomcat启动常见的问题
1)闪退
原因: tomcat软件使用java语言开发,需要jvm运行。tomcat软件在启动时寻找JAVA_HOME环境变量,JAVA_HOME配置的是jdk的目录。
解决办法:配置JAVA_HOME环境变量
2)端口占用的问题
原因:其他软件在占用端口
解决办法:
a)关闭其他软件
b)修改tomcat软件监听的端口
3)CATALINA_HOME变量的问题
4)tomcat启动出现乱码
原因:Tomcat编码和电脑系统编码不一致
解决办法:F:\apache-tomcat-7.0.94\conf\logging.properties文件中指定编码方式
java.util.logging.ConsoleHandler.encoding = GBK(本来是UTF-8)
3.Tomcat服务器目录结构
|-bin目录: 存在tomcat软件操作指令。
startup.bat catalina.bat start
shutdown.bat catalina.bat stop
|-conf目录: 存在tomcat软件的配置文件
|-lib目录: 支持tomcat软件运行的jar包,因为tomcat使用java语言开发的。
|-logs目录: 存放tomcat运行的日志信息
|-temp目录: 存放临时文件
|-webapps目录: 存放web应用(网站)的目录
|-work目录: tomcat运行目录,存放jsp页面运行过程中产生的临时文件。
4.网站(web应用)目录结构
|-WebRoot 根目录
|- 普通文件(html,css,js,images)
|- WEB-INF 目录。固定写法
|-classes 目录。固定写法。存放class文件
|-lib 目录。固定写法。存放jar包。
|-web.xml 文件。
注意 :
1)WEB-INF外面的文件是可以直接通过浏览器访问的。
2)但是WEB-INF里面的文件是不可以通过浏览器直接访问的。如果想让WEB-INF里面的内容提供给外部访问,那么需要在web.xml文件中配置。
5.如何发布网站(web应用)
5.1 把整个网站拷贝到webapps目录下
ROOT是默认网站,访问默认网站是不需要名称的。
配置首页
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- 配置网站的首页 -->
<welcome-file-list>
<welcome-file>hello.html</welcome-file>
</welcome-file-list>
</web-app>
访问首页不需要名称的!
弊端: tomcat软件和发布的网站是在一起的。
5.2 配置虚拟网站
<!--
#server.xml
配置虚拟网站
docBase:网站绝对路径
path:访问网站的名称
-->
<Context docBase="C:\web" path="/jxufe"/>
好处:软件和网站是分离的。
注意: path可以不写内容,表示当前网站是默认网站,优先于ROOT的网站。
弊端:修改server.xml文件,风险比较大
5.3 通过添加xml文件的方式配置虚拟网站(推荐)
1)在conf/Catalina/localhost 添加jxufe.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:\web" />
6.站点配置
name: 表示站点名称。访问站点就是使用站点名称。
appBases: 表示站点根目录
站点和网站的关系?
一个站点可以包含多个网站。
一个网站就在一个站点中。
1)在server.xml文件中添加host标签
2)在本地的hosts文件,中添加一个站点和ip地址的映射
3)访问站点的百度音乐项目
7.动态网站的开发
html/css/javascript 前端(静态网页)
静态网站: 只包含静态网页
动态网站: 既有静态网页,可以有动态网页
静态网页:用户多个访问这个网页时,网页的源码是不会改变的。
动态网页:用户多个访问这个网页时,网页的源码是有可能改变的。
使用servlet技术开发动态网页
Servlet特点:
1)servlet就是一个普通java类,继承HttpServlet类
2)servlet交给tomcat服务器运行(web服务器软件)!!!
手动开发一个servlet
1)编写一个普通的java类,继承HttpServlet类,覆盖doGet方法(
注意: 到tomcat的lib目录下拷贝servlet-api.jar导入到你的项目中
public class HelloServlet extends HttpServlet{
//覆盖doGet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//向浏览器输出内容
resp.getWriter().write("当前时间为:"+new Date());
}
}
2)把servlet交给tomcat服务器运行!!!!!!
2.1 把servlet对应的class文件拷贝到tomcat的某个项目(bbs)的WEB-INF/classes目录下
2.2 在bbs项目的WEB-INF/web.xml文件配置servlet
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!--配置servlet -->
<servlet>
<!-- servlet名称,自定义-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet类的全名:包名+类名 -->
<servlet-class>gz.itcast.b_servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet名称,和上面的名称保持一致 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 公开给外部访问这个servlet的名称(路径) -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
3.通过URl访问这个servlet
http://localhost:8080/bbs/hello
用工具开发一个servlet
1)创建一个bbs的web project
2)在WebRoot下编写静态网页
3)在src下编写动态网页
3.1 在src右键选择 “servlet”
3.2 写上servlet的包,名,选择覆盖doGet方法 -> next
3.3 修改servlet的名称,修改访问servlet的url -> finished
4)myecplise关联tomcat服务器
4.1 window-> preferences -》 搜索“tomcat” -> 找到“tomcat6.x”
4.2 选择 tomcat的根目录
4.3 把disable -> enable
5)部署网站
5.1 点击发布图标 -> 选择网站- 》 选择发布的tomcat服务器
-> ok
6)访问:
静态文件: http://localhost:8080/bbs/index.html
动态文件: http://locahost:8080/bbs/hello