JavaEE、Servlet

JavaEE介绍

web概述

资源分类

系统结构

CS结构:Client-Server,客户端-服务端,需要用户安装客户端,资源、网络占用小,但是维护成本大。

BS结构:Browser-Server,浏览器-服务端,不需要安装客户端,只需要浏览器,维护成本小。

JavaWeb服务器介绍

重量级服务器:实现了全部的JavaEE规范;轻量级服务器:实现了一部分JavaEE规范,安装使用比较简单。

Tomcat基本使用

如在webapps下有hello/index.html就输入localhost:8080/hello/index.html。

Tomcat启动后cmd乱码

启动Tomcat后如果命令行输出的日志是乱码,是字符集的问题,Tomcat字符集是UTF-8,cmd的字符集是GBK。

要么把系统的字符集改了:

控制面板——区域——管理——更改系统区域设置——勾选Beta版:

要么把Tomcat日志的字符集改成GBK:

Tomcat安装目录——conf——logging.properties——把字符集改成GBK:

    

Tomcat安装版有个端口是-1,改成8005。

IDEA集成Tomcat

点Configure——选择Tomcat安装目录——OK(注意:路径不能有“-”,apache-tomcat不行)

创建JavaEE项目

File——New——Project或Module——选择JavaEnterprise(Java企业)——选择JDK版本、Web application和Tomcat

用IDEA发布项目

On 'Update' action手动点击更新按钮:更新class文件和静态文件,On frame deactivation:IDEA失去焦点时:啥都不做。

当修改代码后,点击更新按钮,在浏览器刷新,就能看到效果。

更新按钮:

war包的形式发布,XXX:war exploded是自己的项目,下面Application context是访问路径,为空是/,只能配置一个/。

配置项目访问路径为/,则输入ip和端口号就能访问到WebDemo项目的webapp目录,还要继续指定访问该项目下的哪个文件,如果不指定,默认访问index.jsp。

手动发布项目

进入项目的webapp目录:

cmd进入,打war包:

生成war包:

拷贝到Tomcat/webapps/下:

启动Tomcat:(先把IDEA的Tomcat服务关掉)

访问ip:端口/项目名/文件

启动后自动解包,生成项目的文件夹。

Tomcat配置文件

主配置文件server.xml

http协议的端口是80,当访问一个网址,输入http:则默认使用80端口不需要手动写。

我们开发时使用8080端口,上线后使用80端口。

Tomcat虚拟目录

配置之前只能把my项目目录放在webapps下,访问ip:port/my/xxx,配置后可以不把my项目目录放在webapps下也能访问。

Tomcat虚拟主机

hosts文件:

当访问name:port/path时,找appBase/docBase项目

HTTP协议

HTTP介绍:

HTTP请求:

总结:

HTTP响应:

总结:

Servlet

修改默认主页

把前端项目目录全部拷到JavaEE项目的webapp目录下。

设置默认主页:(不修改默认访问webapp/index.jsp)

<!--修改默认主页-->
<welcome-file-list>
	<welcome-file>/addStudent.html</welcome-file>
</welcome-file-list>

文件名是相对路径,相对于webapp目录。

Servlet介绍:

Servlet实现方式:

实现Servlet接口的方式发布动态资源:

创建JavaEE项目,把静态资源拷到webapp目录下,

src/java/包/下创建StudentServlet实现Servlet接口,重写service方法。

webapp/WEB-INF/web.xml中配置Servlet的声明和映射:

<!--Servlet声明-->
<servlet>
	<servlet-name>studentServlet</servlet-name>
	<servlet-class>com.itheima.servlet.StudentServlet</servlet-class>
</servlet>
<!--Servlet映射-->
<servlet-mapping>
	<servlet-name>studentServlet</servlet-name>
	<url-pattern>/studentServlet</url-pattern>
</servlet-mapping>

启动Tomcat服务后,可以访问项目路径/studentServlet,(项目路径 + <url-pattern>里的url)。

当请求到<url-pattern>里的url时,会根据<servlet-name>里的名称找到<servlet-class>里的类名,调用service方法。

Servlet执行流程:

Servlet关系视图:

继承HttpServlet的方式

为什么要重写doGet和doPost方法:

HttpServlet重写了父类的service()方法,参数是ServletRequest,ServletResponse,在这个方法里把参数转换成HttpServletRequest,HttpServletResponse,传给重载的service方法,重载方法里判断,请求方式是get就调用doGet,请求方式是post就调用doPost,其他请求方式也调用对应的方法。

Servlet生命周期

对象的生命周期:对象创建到销毁的过程。

创建:init()方法;服务:service()方法;销毁:destroy()方法。

Servlet对象只有一个,来一个请求就会调用他的doGet或doPost等方法。

Servlet线程安全问题

一个客户端浏览器就是一个线程,而Servlet对象只有一个,成员变量也只有一份,因此多个用户访问同一个成员变量就会涉及到线程安全问题。

定义一个成员变量username,get请求根据url里的用户名给成员变量赋值,睡(把执行权交给另一个线程),睡醒后返回用户名:

果然会出现线程安全问题,用户aaa访问,username= aaa,交出执行权,用户bbb访问,username = bbb,交出执行权,向aaa响应username=bbb,向bbb响应username=bbb。

解决方式:

①把变量定义成局部变量,放在doGet方法内,这样每来一个请求就会创建一个变量,不会有线程安全问题:

②同步,锁对象可以用当前Servlet对象(唯一)

Servlet的三种映射方式

/开头+通配符:/servlet/*表示只要路径以servlet/开头就会访问这个Servlet:

通配符+固定格式:*.do表示只要路径以.do结尾就会访问这个Servlet:

Servlet多路径访问:

就是利用上述通配符方式实现多种路径都能映射到这个Servlet对象,再通过不同的路径做不同处理。

Servlet创建时机

默认的Servlet

Tomcat显示错误信息的页面也是经过一个Servlet处理返回的,因为Tomcat也是Java写的,所以都是Servlet。

ServletConfig

ServletConfig的配置方式:

在web.xml—<web-app>—<servlet>中配置

ServletConfig的常用方法:

ServletConfig的使用方式:

域对象

ServletContext

ServletContext的配置方式:

在web.xml—<web-app>中配置

ServletContex常用方法:

 

获取ServletContext对象用的方法继承自HttpServlet的父类GenericServlet。

获取到的绝对路径是out目录下的,是项目编译的结果:

getRealPath方法通常用来获取资源文件的绝对路径,如a、b、c三个资源文件的位置如图:

用虚拟路径访问绝对路径如下:

src目录中的内容编译之后位于/WEB-INF/class/目录下,编译之后没有arc目录。

Servlet之间共享数据:

在一个Servlet中的添加数据:

在另一个Servlet中获取数据:

Servlet注解开发

Servlet3.0版本:

注解参数是路径:

注解的本质是接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值