JavaWeb

1.2.1 系统结构简介

在我们前面课程的学习中,开发的都是Java工程。这些工程在企业中称之为项目或者产品。项目也好,产品也罢,它是有系统架构的,系统架构的划分有很多种方式。我们今天讨论的是基础结构上的划分。除此之外,还有技术选型划分,部署方式划分等等。

1.2.2 C/S结构

它指的是客户端——服务器的方式。其中C代表着Client,S代表着服务器。

1.3.3 B/S结构

它指的是浏览器——服务器的方式。其中B代表着Browser,S代表着服务器。

1.3.4 两种结构的区别及优略

两种结构的区别

第一:硬件环境不同,C/S通常是建立在专用的网络或小范围的网络环境上(即局域网),且必须要安装客户端。而B/S是建立在广域网上的,适应范围强,通常有操作系统和浏览器就行。

第二:C/S结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强。

第三:B/S结构维护升级比较简单,而C/S结构维护升级相对困难。

优略

1 C/S:是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。

2 B/S:总体拥有成本低、维护方便、 分布性强、开发简单,可以不用安装任何专门的软件就能 实现在任何地方进行操作,客户端零维护,系统的扩展非常容易,只要有一台能上网的电脑就能使用。

关于课程中结构的选择

我们的课程中涉及的系统结构都是是基于B/S结构。

2 Tomcat

2.1 Tomcat介绍

2.1.1 关于服务器

服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),也可以指代用于部署网站的应用。我们这里说的服务器,其实是web服务器,或者应用服务器。它本质就是一个软件,一个应用。作用就是发布我们的应用(工程),让用户可以通过浏览器访问我们的应用。

常见的应用服务器,请看下表:

服务器名称说明
weblogic实现了javaEE规范,重量级服务器,又称为javaEE容器
websphere实现了javaEE规范,重量级服务器。
JBOSS实现了JavaEE规范,重量级服务器。免费的。
Tomcat实现了jsp/servlet规范,是一个轻量级服务器,开源免费。

png&pos_id=img-jh6pcTz4-1694432212975)

2.2 Tomcat基本使用

Tomcat服务器的启动文件在二进制文件目录中:,这两个文件就是Tomcat的启动文件。

Tomcat服务器的停止文件也在二进制文件目录中:,这两个文件就是Tomcat的停止文件。

其中.bat文件是针对windows系统的运行程序,.sh文件是针对linux系统的运行程序。

2)启动问题

第一个问题:启动一闪而过

原因:没有配置环境变量。

解决办法:配置上JAVA_HOME环境变量

第二个:Address already in use : JVM_Bind

原因:端口被占用

解决办法:找到占用该端口的应用

​ 进程不重要:使用cmd命令:netstat -a -o 查看pid 在任务管理器中结束占用端口的进程。

​ 进程很重要:修改自己的端口号。修改的是Tomcat目录下\conf\server.xml中的配置。

​ 1694432212977)

netstat -aon|findstr “8888”

第三个:启动产生很多异常,但能正常启动

原因:Tomcat中部署着很多项目,每次启动这些项目都会启动。而这些项目中有启动报异常的。

解决办法:

​ 能找到报异常的项目,就把它从发布目录中移除。

​ 不能确定报异常的项目,就重新解压一个新的Tomcat。

第四个:其它问题

例如:启动产生异常,但是不能正常启动。此时就需要解压一个新的Tomcat启动,来确定是系统问题,还是Tomcat的问题。

所以,此时就需要具体问题,具体分析,然后再对症解决。

第五个问题: 乱码

​ 1 找到Tomcat目录下conf文件夹中的logging.properties文件

​ 2 找到文件中的**java.util.logging.ConsoleHandler.encoding = UTF-8,**修改成GBK

1 概述

通过阅读API,我们得到如下信息:

第一:Servlet是一个运行在web服务端的java小程序

第二:它可以用于接收和响应客户端的请求

第三:要想实现Servlet功能,可以实现Servlet接口,继承GenericServlet或者HttpServlet

第四:每次请求都会执行service方法

第五:Servlet还支持配置

2 servlet编写步骤,继承GenericServlet方式

1)编码步骤

第一步:前期准备-创建JavaWeb工程

第二步:编写一个普通类继承GenericServlet并重写service方法

第三步:在web.xml配置Servlet

public class FirstServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet的方法执行了");
    }
}
   <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>cn.xinzhi.servlet.FirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>firstServlet</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>

启动程序:访问 localhost:8080/虚拟路径/first,最终执行了UserServlet的service方法

3 Servlet执行过程分析

我们通过浏览器发送请求,请求首先到达Tomcat服务器,由服务器解析请求URL,然后在部署的应用列表中找到我们的应用。接下来,在我们的应用中找应用里的web.xml配置文件,在web.xml中找到FirstServlet的配置,找到后执行service方法,最后由FirstServlet响应客户浏览器。整个过程如下图所示:

)

一句话总结执行过程:

浏览器——>Tomcat服务器——>我们的应用——>应用中的web.xml——>FirstServlet——>响应浏览器

4 Servlet类视图

在Servlet的API介绍中,它提出了我们除了继承GenericServlet外还可以继承HttpServlet,通过查阅servlet的类视图,我们看到GenericServlet还有一个子类HttpServlet。同时,在service方法中还有参数ServletRequest和ServletResponse

5 Servlet的编写方式

第一种:实现Servlet接口,接口中的方法必须全部实现。 使用此种方式,表示接口中的所有方法在需求方面都有重写的必要。此种方式支持最大程度的自定义。

第二种:继承GenericServlet,service方法必须重写,其他方可根据需求,选择性重写。 使用此种方式,表示只在接收和响应客户端请求这方面有重写的需求,而其他方法可根据实际需求选择性重写,使我们的开发Servlet变得简单。但是,此种方式是和HTTP协议无关的。

第三种:继承HttpServlet,它是javax.servlet.http包下的一个抽象类,是GenericServlet的子类。如果我们选择继承HttpServlet时,只需要重写doGet和doPost方法,不要覆盖service方法。使用此种方式,表示我们的请求和响应需要和HTTP协议相关。也就是说,我们是通过HTTP协议来访问的。那么每次请求和响应都符合HTTP协议的规范。请求的方式就是HTTP协议所支持的方式(目前我们只知道GET和POST,而实际HTTP协议支持7种请求方式,GET POST PUT DELETE TRACE OPTIONS HEAD )。

6 HttpServlet的使用

第一步:在工程中创建一个Servlet继承HttpServlet

)

第二步: 配置web.xml文件

第三步: 访问localhost:8080/虚拟路径/second

解决办法:在servlet中添加doGet() 或者doPost()方法

7 servlet的方法和生命周期

  • 方法

1

  • 生命周期
# 被创建:执行init方法,只执行一次
	– 在标签下配置
	1. 第一次被访问时,创建
		<load-on-startup>的值为负数,默认的是第一次访问的时候创建
	2. 在服务器启动时,创建
		<load-on-startup>的值为0或正整数,随着tomcat的启动创建
# 提供服务:执行service方法,执行多次
  
# 被销毁:执行destroy方法,只执行一次
	– Servlet被销毁时执行。服务器关闭时,Servlet被销毁
	– 只有服务器正常关闭时,才会执行destroy方法。
	– destroy方法在Servlet被销毁之前执行,一般用于释放资源
# 注意事项:
	Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
	多个用户同时访问时,可能存在线程安全问题。
	解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

8 分层开发

  • JSP Model1开发

  • JSP Model2

  • MVC设计模式

视图(View)- JSP、HTML等:负责与用户交互

控制器(Controller)- Servlet:负责流程控制

模型(Model)- JavaBean:负责业务逻辑处理、数据库访问

  • 分层开发

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

分层开发优缺点

优点:

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、利于各层逻辑的复用。

缺点:

1、降低了系统的性能

2、增加了程序的复杂度

3、有时会导致级联的修改。

9 服务器向浏览器写数据的步骤

  1. 服务器获取字符/字节输出流
  2. 输出数据
	    response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>首页</TITLE>");
        out.println("</HEAD>");
        out.println("  <BODY>");
        out.print("<p style='color: red'>");
        out.print("这是个段落");
        out.print("</p>");
        out.println("  </BODY>");
        out.println("</HTML>");
        // flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满
        out.flush();
        out.close();

10 servlet改写jsp

  • 改写注册逻辑
  • 改写登录逻辑
  • 改写展示逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值