Java打卡:第92天

javaWeb — Servlet

Java EE


Servlet


之前基本了解了Tomcat作为服务端软件,就是B/S结构中支持用户通过路径的形势访问服务器中的资源;而不是之前服务端开发人员自身不通过网络访问服务器的资源。这其中Servlet作为java EE的规范,规定了开发人员动态资源文件的写法,Tomcat也就遵守规范来解析动态资源

Web访问就是三协议四个角色 --协议就是约定和规范; 四个角色就是 浏览器,web服务器,服务器端程序和数据库系统 三个协议就是HTTP Servlet JDBC 都是一套接口,按照这套规范才能正常进行信息的交互

所谓的协议,就是规范、通信双方事先的约定

HTTP协议,应用层的协议,要求通信双方,浏览器和服务器双发,都需要按照格式发出请求和响应,对方按照协议进行解析

Servlet协议: web服务器和服务器端的程序的协议;programmer开发业务程序的时候,必须要事先Servler接口,使用servlet进行数据的传送,web服务器就按照servlet规范的格式进行解析【比如Tomcat服务器就是遵守的servlet协议来调用的服务端程序】

JDBC规范: 服务器端程序要操作连接数据库,则需要按照JDBC协议中规定的方式(接口)进行数据库连接、进行SQL的指向,结果获取【Driver,Connection Statement ResultSet】 ,而JDBC接口的实现都是由数据库厂家完成的,放在厂家提供的jar包中,所以连接不同的数据库就要导入不同的数据库驱动jar包

动态资源在WEB-INF中,这其中字节码存放在classes中,jar包存放在lib库中,因为不一定一定是固定的开发工具。同时web.xml中按照特定的格式将动态的资源也就是开发的程序和路径绑定在一起

但是如果我们不做处理,开发的程序的输出位置只能在控制台,这不是想要的效果,要将结果输出到浏览器才是正确的结果

之前在JS中提到了JSON对象,就是JavaScript object notation可以实现JS和java的交互,这里要想将信息输出到控制台九要使用特定的字符串

public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
    //解决响应的时候中文的乱码问题,设置响应的内容类型和字符编码方式 -- 要在获取响应流之前设置;并且不能设置错误
    response.setContentType("text/html;charser=UTF-8");
    //将信息输出到浏览器上,HTML字符串输出到浏览器,浏览器解释执行,获取输出流对象,直接指向特定的浏览器客户端
    PrintWriter out = response.getWriter();   //响应直接到浏览器
    out.print("<html>");
    out.print("<head>");
    out.print("<title>welcome servlet</title>");
    out.print("</head>");
    out.print("<body>");
    out.print("<h1 align=\"center\">你好,欢迎来到该页面"); //注意该字符串是输出到浏览器,双引号要加转义字符转成普通的字符
    out.print("</body>");
    out.print("</html>");
}

这里就是编译通过之后生成的class文件放在classes文件夹之下就可以运行了

使用Eclipse开发Web项目

首先就是进行Tomcat配置,直接点击window—>Preferences—>server---->Runtime environment—> add —> Tomcat 9.0 ----> browse就配置成功了

之后就是创建web项目;直接new dynamic web project dynamic就是动态的资源文件

这里简单一点,就在其中加一个index.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web项目</title>
</head>
<body>
	欢迎Welcome!
</body>
</html>

Run AS server就可以运行到浏览器了

修改显示的位置

Window->preferences->general->webbrowser

为什么可以访问?web工程的临时存放目录

或许你会有疑问,之前说过要运行服务器的资源,就要将项目给放到Tomcat的webapps下面,这样才可以. + 路径就可以访问了,这里我们为什么配置之后就可以直接通过

http://localhost:8080/proj1/

访问,这就是因为workspace中有一个Tomcat的副本

workspace[位置] --> .metadata ---> .plugins --> org.eclipse.wst.server.core --> tmp0

打开这个文件夹就可以发现和Tomcat的文件夹目录下十分相似,都有conf、logs、webapps;打开wtpwebapps里面就有我们创建的项目proj1;这就相当于部署,所以我们才可以在浏览器上直接运行

这里可以使用快捷键重命名,但是还有一个settings的位置就是项目正式发布的时候的名称

Eclipse 常用快捷键

  • Ctrl + N 新建一个工程,文件、文件夹等

  • Alt + 下划线字母 : 对话框中对应的快捷操作

  • Ctrl + M : 窗口最大化还原

  • ALT + Enter 打开被选中的工程、包、文件等

  • ctrl + F11 运行程序

  • F11 以调试模式运行程序

  • Alt + shift + R 重命名工程名、文件名、方法名、变量名

  • F2 重命名工程名、文件名

  • Ctrl + E 打开编辑串口查看目录,比如各个java文件

  • Ctrl + PageUP 切换到当前窗口的上一个窗口

  • Ctrl + PageDown 切换到当前窗口的下一个窗口

编写代码的时候常用的快捷键

  • Ctrl + alt + 下箭头 向下复制光标所在行的内容或者选中内容
  • Ctrl + Alt + 上箭头 向上复制光标所在行的内容或者选中内容
  • Alt + 上箭头 向上移动光标所在行的内容或者选中内容
  • Alt + 下箭头 向下移动光标所在行的内容或选中内容
  • Shift + Enter 在光标所在行的下一行加一个空行
  • Ctrl + 1 给出解决方案
  • alt + / 提示联想
  • shift + 箭头 向上或者向下选中内容
  • ctrl + / 加上注释或者取消注释
  • Ctrl + Alt + / 块注释 取消就是反斜杠

编写代码时的生成的快捷操作

  • 生成无参构造器或者带参数构造器
  • 生成带参数的构造器
Source ---> Generate Constructers from Superclass    //这是生成的无参的构造器

Source --> Generate  Constructers using fields   //然后选择相应的参数
  • 自动生成所有的get和set方法
Source ---> Generate Getters and Setters

//选择相应的get或者set就可以自动生成了
  • 生成toString方法
Source ---> Generate toString()

上面都是用的鼠标操作,其实可以使用快捷键

ALT + SHIFT + S 就可以打开source 然后对应的下划线字母就可以打开相应的界面

ALT + SHIFT +S F 格式化代码 — 让代码的布局更加的美观

package CfengLearn;

public class Test {
	private int empno;
	private int ename;
	private double sal;
	private int stock;

	public Test() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Test(int empno, int ename, double sal, int stock) {
		super();
		this.empno = empno;
		this.ename = ename;
		this.sal = sal;
		this.stock = stock;
	}

	public int getEmpno() {
		return empno;
	}

	public void setEmpno(int empno) {
		this.empno = empno;
	}

	public int getEname() {
		return ename;
	}

	public void setEname(int ename) {
		this.ename = ename;
	}

	public double getSal() {
		return sal;
	}

	public void setSal(double sal) {
		this.sal = sal;
	}

	public int getStock() {
		return stock;
	}

	public void setStock(int stock) {
		this.stock = stock;
	}

	@Override
	public String toString() {
		return "Test [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", stock=" + stock + ", getEmpno()="
				+ getEmpno() + ", getEname()=" + getEname() + ", getSal()=" + getSal() + ", getStock()=" + getStock()
				+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
				+ "]";
	}

}

像这里的一大段代码就只有上面的属性时打上去的;直接ALT + Shift + S ;打开菜单后,直接选择O,S,R等,当在对应的界面的时候Alt + shift + 下划线字母就可以选择;回车就出来了

之后再Alt + shift + s 加上F就可以格式化代码

  • ALT + SHIFT + M, 抽取出一段代码成为一个单独的方法
这里使用的时候就可以选中一段代码将其剥离出去形成一个函数
  • ALT + SHIFT + L 抽取出一个变量让其作为一个接收的容器
常用的情景是创建变量,直接写一个new Student()然后alt + shift + L就可以创建一个变量来接收这个对象
  • ALT + ? 可以对选中代码进行相关的操作,比如对其进行输出,就选择sys就可以

  • ctrl + 1 选择convert 和 分离 点击到对应的变量上,之后就可以实现局部变量转成员变量,变量的操作和赋值分开了

查看源码的时候常用的快捷键

  • F3 转到定义 将光标放在类或方法上
  • Ctrl + T 查看类的继承和实现关系
  • Ctrl + O 查看类的结构
  • Ctrl + Shift 打开查看类的窗口

JavaWeb项目结构

java EE 规范要求的javaWEB的结构是

  • 再当前应用的目录下可以直接存放资源文件,比如html等,也可以放在子目录中

查看源图像

  • 若当前web项目中包含servlet代码,则servlet的字节码必须存放再当前应用所在的子目录/WEB-INF/classes下
  • 在/WEB-INF/下可以包含web.xml配置文件,将资源绑定
  • 在/WEB-INF下包含子目录lib,存放当前web应用的所使用的外部的jar包
  • 在/WEB-INF/目录中的资源不能直接被访问

关于web.html介绍一点

==就是我们地址输入的webapp/==之后不输入具体的资源,出现的页面是欢迎页面,这个欢迎页面的设置需要设置

就在web.html中设置

默认情况下就是以index.html为欢迎界面,比如http://localhost:8080/imcfeng.com/的结果和http://localhost:8080/imcfeng.com/index.html的界面是相同的

<welcome-file-list>
	<welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

项目处理:打包war jar cvf

都知道jar包是压缩文件,有的时候一个web应用程序还是很大的,那为了方便转移,同时要方便运行部署;那就需要war命令

甲方开发人员开发后打成war包拷贝到乙方的服务器的webapps下就可以运行

>jar cvf d:app\myweb.war .      //当前目录下; .表示将当前目录下的所有资源打包 中间的是路径和打包后的名称

war包可以被tomcat自动解压,自动解压到tomcat的webapps下

而在eclipse中打包就更简单了,直接export选择war就可

tomcat的server.xml

这是tomcat配置文件中的一个很重要的文件,打开文件

 <Service name="Catalina">

这就是Tomcat所使用的服务Catalina;

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

这是连接器,指出tomcat的端口号,同时指定连接所遵守的协议是HTTP;指出了连接超时的时间

<Engine name="Catalina" defaultHost="localhost">

获取到连接对象之后,就可以使用这个服务了,提供的引擎就是Catalina;这里的默认主机就是localhost

引擎下面的内容由

 <Realm className="org.apache.catalina.realm.LockOutRealm">

这是安全管理的

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

这里的主机就是localhost;并且app的位置就是webapps;同时unpackWARs就是支持的自动解压;autoDeploy自动部署发布

在这里插入图片描述

比如这里就是一个Tomcat的核心结构图,一个server里面可能有多个service;每个service中要有连接connecter来获取到服务;HTTP 8080;一个引擎中可以包含多个主机;当然一个硬件服务器中只能一个localhost,但是可以虚拟很多主机;就是virtual host;一个域名对应的就是一个虚拟主机【租服务器一般都是虚拟的主机】context是主机中包含的应用

看了上面的结构,那么给一个问题? 如果不将应用放在course目录下,那该如何部署?

  • 第一种就是在server.xml中配置;在host下面配置一个context
<host ……>
	<context path="/myweb" docBase="路径"/>   docBase就是项目的路径 path就是加载的项目的路径
</host>

【这种方式是就是虚拟目录】这种方式需要重启服务器,弊端很大、

  • 第二种方式就是服务器启动后会自动创建一个文件Catlina,该文件下面由主机localhost;在该目录下面创建一个xml文件即可
<?xml version="1.0" ?>
<context docBase="路径"/>

这样我们创建的时候就会将项目自动发布;那这里的path就是该xml文件的名称;不需要xml后缀;其就相当于文件名

创建虚拟主机

域名解析服务DNS

Domain Name Service ,域名解析服务,将域名和IP进行一一映射的服务,提供域名解析的服务器,叫做DNS服务器;之所以能通过域名localhost访问本机,就是因为windows系统本身也充当了DNS服务器的角色;

打开C:/windows/system32/dirvers/etc中的hosts,就可以发现

# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

创建虚拟主机和创建虚拟目录类似;直接在conf中的server.xml中进行修改即可

<Host name="www.cfeng.com"  appBase="mywebapps"
            unpackWARs="true" autoDeploy="true">
</host>

这里的appBase最好换一个,这里的路径是相对路径,所以这里在Tomcat下新建一个文件夹为mywebapps;这样将应用就可以放在这个主机中,该主机解析文件都是在mywebapps中;

但是这样连接不成功;域名解析是从本机到供应商到全球的顺序寻找;因为没有配置www.cfeng.com;所以是找不到的;这里就可以将其配置到本机的hosts中

//这里不允许本地修改,那就拿出来修改之后替换
  127.0.0.1 www.cfeng.com

修改web.xml要注意不要写错了,不然会出现startup开启不了

在logs日志查看错误信息

分析第[171]行第[5]列处的致命错误
	org.xml.sax.SAXParseException; systemId: file:/D:/Tomcat%209.0/conf/server.xml; lineNumber: 171; columnNumber: 5; 元素类型 "Host" 必须由匹配的结束标记 "</Host>" 终止。

发现是写错了标签导致的

修改之后打开服务器,运行时
在这里插入图片描述

http://www.cfeng.com:8080/imcfeng.com/

这样就可以访问了:happy:完成了

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐