学习Servlet编程1

1、学习servlet前的必要的知识

1.1软件架构

1.1.1b/s软件架构

即浏览器/服务器模式,browser/server

特点:b/s架构相当于c/s来说开发简单,并且容易维护

页面相对于c/s来说比较简陋

基于Http协议的

1.1.2c/s架构

即客户端/服务器模式,client/server

特点:相对于b/s来说,开发维护起来比较困难

页面比较华丽,充分利用显卡资源

基于tcp协议之上自行创建了一个协议

1.2资源分类

1.2.1静态资源

不同的用户去访问同一个静态资源,得到的结果是一样的

浏览器内置静态资源的解析引擎

创建的静态资源:html、css、js、png、jpeg

1.2.2动态资源

不同的用户去访问同一个动态资源,得到的结果可能是不一样的

动态页面技术:php、asp、jsp、servlet

1.3网络通信三要素

IP地址:通过IP地址可以识别计算机网络中的一台主机,如192.168.2.184

端口号:通过端口号能够在一台计算机中唯一识别一个应用程序,范围:1~65535,如mysql服务器的默认端口:3306,web服务器http 默认端口号:80

通信协议:TCP传输层协议:给上层(应用层)协议提供可靠数据传输,三次握手建立连接

UDP传输层协议:不可靠,优点:速度较快

1.4web服务器

服务器:运行服务端软件的计算机

服务软件:提供软件服务,web服务软件,mysql数据库软件

文本服务器:提供web服务的计算机,可以在web服务器中,创建多个web项目,每个web项目可以组织一些资源,提供给浏览器访问

url:统一资源定位符

1.5tomcat web服务器软件

1.5.1常见的web服务器软件

WebLogic

WebSphere

JBOSS

tomcat

1.5.2tomcat软件

安装:解压到某个不带中文的目录

卸载:解压的目录删除掉即可

运行:tomcat有java开发的,运行依赖JDK或JRE,确保JAVA_HOME正确配置

双击bin\startup.bat

关闭:在tomcat运行的控制窗口中 ctrl+c或在命令行cmd.exe中,输入bin\shutdown.bat

非正常关闭:直接X掉tomcat运行的控制窗口

8080端口占用:通过命令 netstat -ano 查找哪个进程占用了8080端口,可以在Windows任务管理器中强制关闭该进程

tomcat日志输出乱码解决:conf\logging.properties中有5处utf-8修改为GBK

2、Servlet入门

2.1概念

servlet,server applet缩写,运行在服务器上的小程序

本质是一个接口,定义了一个Servlet对象如何被web服务器所能访问的规则

2.2Servlet入门程序

第一步,创建一个java类使其实现Servlet接口,空实现以后再service方法中打印hello

第二步,配置web.xml,定义该servlet能够被浏览器访问的url样式

servlet规范web3.0引入一个注解@WebServlet("所配置的uri"),代替web.xml的servlet相关的配置

2.3Servlet对象生命周期

创建:默认情况下,是在第一次被浏览器访问的时候创建,调用init()方法,标签load-on-startup可以使该servlet再web服务器启动时初始化

活着(提供服务):每次访问都会调用service()方法,多次访问,多次调用

销毁:当web服务器正常关闭时,会被web容器销毁,调用destroy()

2.4Servlet的继承体系

Servlet接口

GenericServlet抽象类:将service()做成抽象方法,其他Servlet接口中的方法做了一个空实现

HttpServlet抽象类:在web开发领域对Servlet做了一些相关Http协议的实现,根据请求方式,来复写doGet()方法和doPost()方法即可

2.5Servlet urlPatern写法

/xxxx:基础写法

/xxx/yyy:二级目录写法

{"/xxx","/yyy",......}:多个url的形式

*.do:匹配以.do结尾的,此处的do可以是自定义的

/:匹配所有(但是优先级低于已经存在的url),以 .jsp结尾的东西可以被访问到

/*:匹配所有(但是优先级低于已经存在的url),以.jsp结尾的东西无法被看见

3、Request对象

3.1Http协议

Hyper Text transfer Protocol:超文本传输协议

3.1.1特性

基于TCP协议的高层协议,应用层,可靠的

默认端口号 80

基于请求响应模型,一次请求,有且仅有一次响应

无状态,每次请求响应之间,协议本身不会记录相关的状态信息,多次请求与响应之家是无法共享数据

3.1.2请求信息

请求行:请求头部信息的第一行

GET /requestDemo1 Http/1.1

请求方式 请求的地址 协议/版本号

请求方式(有7种,我们只掌握两种):

GET:

  • 意味着找服务器拿数据,并不希望修改服务器的状态

  • 传递参数是直接放在请求url中(请求行中),格式是在请求url末尾以?开始

  • url长度有2k限制,传参不能传递大量的数据(文件)

  • 会浏览器的地址栏中显示传递的参数,相对不安全

  • GET方式没有请求体

POST:

  • 意味着给服务器放数据,意图希望改变服务器的某些状态

  • 传递参数放在请求体中,参数大小没有限制,用于给服务器上传文件

  • 传递参数相对安全

  • POST有请求体

请求头:格式一行显示一个 名:值 对(后端可以通过request对象得到)

请求空行:用于分割请求头和请求体

请求体:(按f12在payload中查看,post请求时为Form Data,get请求时为Query String Parameters)

  • 存放浏览器发送给服务器的实质数据

  • GET请求方式没有请求体,POST方式才有请求体

  • 如果是表单提交,那么请求体中的数据为该格式:name=zs&pwd=123

3.2request对象

在浏览器发送请求时,服务器都会创建一个request对象,并且把前端发送的请求数据封装到request中

3.2.1request中常用api

request.getParameter("请求参数名"):获取前端传过来的参数的值

request.getRequestURI():获取浏览器访问时的URI

request.getRequestURL()获取浏览器访问时的URL

request.getQueryString():获取使用get请求时url后面拼接的参数

使用URLDecoder.decode方法和URLEncoder.encoder方法可以实现类似的双向转换

3.2.2请求转发------内部资源的跳转

request.getRequestDispatcher("选择要进行跳转的资源").forward(request,response)

特点:浏览器并不知道请求转发,浏览器地址栏不会有任何变化

只能转发到服务器内部资源

只有一次请求和响应

3.3域对象

3.3.1概念

使用域对象可以在一定的作用范围内共享数据,不同的域对象其作用范围也会不同

3.2.2四个域对象

PageContext(PageContextImpl类):当前jsp页面范围内有效

request(HttpServletRequest类):一次请求内有效

session(HttpSession类):一整个会话中有效(打开浏览器到关闭浏览器)

application(ServletContext类):整个web工程范围内都有效(web工程不停止,数据都在)

3.2.3共享数据方法

request.setAttribute("数据名", 数据):设置一些共享数据

request.getAttribute("数据名"):获取共享的数据

request.removeAttribute("数据名"):删除共享的数据

3.3中文乱码问题

get请求发送中文没有乱码,tomcat帮我们处理了

post请求发送中文有乱码

原因:在发送请求时使用utf-8对中文编码,解码时,读请求体数据的流对象中的缓冲区编码默认使用IOS-8859-1,不一致导致乱码

解决:request.setCharacterEncoding("utf-8"),注意要在获取请求参数之前使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值