Servlet 服务器端小程序
1.tomcat安装及目录介绍
JAVA_HOME
CATALINA_HOME
PATH=%JAVA_HOME%/bin;
2.静态web项目、动态web项目
WEB-INF
lib
classes
web.xml
3.外部动态web项目
server.xml
<host>
<Context path="" docBase="" />
</host>
4.tomcat和eclipse的整合!tomcat镜像!
5.http协议介绍及get与post请求、响应状态码
格式:
报文首部
报文首行
报文头部
空行
报文体
请求报文:get请求、post请求
响应报文
get请求和post请求的区别:
1)get请求是通过url地址栏来传递参数的,而post请求通过报文体来传递参数的
2)get请求可以在浏览器地址栏中看到请求参数,而post请求看不到
3)get请求对传递的参数有限制,最多允许255个字符,所以数据比较大的话我们使用post请求!
4.在表单中一般我们都使用post请求,除了在表单中,页面中的其它地方基本上都是使用get请求!
6.servlet快速入门
1)servlet是web的三大组件之一;web的三大组件是指:Servlet、Filter、Listener
2)狭义的servlet:servlet
3)广义的servlet:凡是实现了servlet接口的类都称之为servlet
7.如何快速定义一个servlet?
1)自定义实现类,实现servlet接口,实现接口就意味着实现servlet中的方法
2)去web.xml中注册一下
问题点:
1)创建动态web项目的时候没有选择tomcat
2)复制类的全路径的时候
3)项目名书写:不要8.x
servlet的配置
<!-- 向服务器注册servlet -->
<servlet>
<!-- servlet-name是给我们使用的,我们使用这个servlet-name对servlet进行配置! -->
<servlet-name>AServlet</servlet-name>
<!-- servlet-class指定全类名,给服务器使用,服务器使用这个全类名创建一个servlet实例【对象】 -->
<servlet-class>com.neuedu.servlet.AServlet</servlet-class>
</servlet>
<!-- servlet-mapping做请求映射 -->
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<!-- 请求映射是通过这个url-pattern来实现的! -->
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
注意点:
1.<url-pattern>标签中指定的映射路径不必和<servlet-name>标签指定的内容保持一致!
2.只有你浏览器地址栏中请求的url和我们这里<url-pattern>标签中的映射一致的时候,我们自定义的servlet类才会处理这个请求!
生命周期
servlet是由tomcat服务器来管理的!
servlet生命周期:是指servlet对象由产生到销毁的过程!
servlet生命周期涉及的几个方法:
1.构造器方法:只会在第一次访问这个servlet的时候调用一次,调用一次就说明servlet是单例的,但是servlet是多线程的,非线程安全的,也就是说在servlet中我们尽量不要在service方法中操作全局变量!
2.init方法:init方法只会在第一次访问servlet的时候调用一次,对servlet对象进行初始化操作!
3.service:service方法会在每次访问这个servlet的时候都调用一次,而且我们的业务逻辑也是写在这个service方法!
4.destroy方法::destroy方法只会在我们的项目卸载的时候调用一次,也就是说在服务器关闭的时候会在服务器关闭的时候调用一次!
servletConfig
ServletConfig:是一个接口,一个ServletConfig对象只代表当前的servlet类的配置信息。
1) represent:
* <servlet>
<!-- servlet-name是给我们使用的,我们使用这个servlet-name对servlet进行配置! -->
<servlet-name>AServlet</servlet-name>
<!-- servlet-class指定全类名,给服务器使用,服务器使用这个全类名创建一个servlet实例【对象】 -->
<servlet-class>com.neuedu.servlet.AServlet</servlet-class>
</servlet>
2).如何获取:
由服务器创建,通过init方法的参数直接传递给我们,我们直接在init方法使用就可以了!
3)功能:
getServletName():获取当前servlet-name值,也就是获取servletname
getInitParameter("password"):获取servlet的初始化参数!
getServletContext():获取当前web应用!
ServletContext
1) 代表:代表的是当前web应用,也就是指的web.xml文件中的信息!
2)获取:通过ServletConfig对象的getServletContext()获取!
3) 功能:
getInitParameter:获取整个web应用的初始化参数,也就是如下:
<context-param>
<param-name>user</param-name>
<param-value>lisi</param-value>
</context-param>
获取资源的真实路径:getRealPath()
虚拟路径:http://localhost:8080/servlet-demo1/index.html
真实路径:E:\LHF teacher\marsworkspace\servlet-demo1\WebContent\index.html
MyGenericServlet
1.定义一个抽象类实现servlet接口,保留service方法不去实现,其余方法都实现了!
2.自定义抽象类子类,在web.xml文件中注册一下这个子类!
HttpServlet
public class AServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
HttpServletRequest
1)代表:代表浏览器向服务器发送的请求报文
2) 获取:由tomcat服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法
3) 功能:
getParameter()获取请求参数
getContextPath():获取当前项目名
setAttribute/getAttribute:本身就是一个域对象!
request.getRequestDispatcher("1.html").forward(request, response);可以实现转发功能
HttpServletResponse
1)代表:服务器响应给浏览器的响应报文
2)获取:由服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
3)功能:
response.getWriter().println("<h3>hello world!</h3>");可以返回给浏览器一个页面或者一个页面片段!
response.sendRedirect("/servlet1/1.html"); :可以做请求的重定向
转发和重定向
转发:当浏览器向服务器发送请求的时候,服务器自己不处理,而是调用其它的web资源进行处理!
重定向:当浏览器向服务器发送请求的时候,服务器返回给浏览器一个特殊的响应,这个特殊的响应告诉浏览器再向另一个地址发送一个请求!
转发和重定向的区别:
发生在浏览器端还是服务器 浏览器的请求次数 浏览器地址栏是否发生变化 浏览器是否能够感知到
转发[request] 发生在服务器端 1 不发生变化 感知不到
重定向[response] 发生在浏览器端 2 发生变化 能感知到
编码问题分析
通信双方在进行通信的时候,实际上是将通信的内容【信息】是按照一定的规则转化为二进制进行通讯的
而这个一定的规则就是字符的编码:ascii,gb2312,gbk,iso8859-1,utf-8;
在请求到达的时候,另一方就需要解码!
乱码原因:
通信双方的编码方式和解码方式不一致造成的,
解决办法:
统一通信双方的编码方式和解码方式,都使用utf-8编码!
编码分类:
请求编码
浏览器编码---》服务器解码iso8859-1
响应编码
服务器编码----》浏览器解码
服务器端默认使用的是iso8859-1编码,而浏览器默认使用的是gb2312,当然我们也可以在页面中告诉浏览器用什么编码方式!
请求编码
get请求:
统一浏览器和服务器端的编码格式为utf-8编码:在server.xml文件的connector标签中指定编码格式为utf-8编码:URIEncoding="utf8"
post请求:
我们可以在post方法中在第一次获取请求参数之前通过request.setCharacterEncoding("utf-8");来设置解码格式!
响应编码
可以通过response.setContentType("text/html;charset=utf-8");设置服务器和浏览器的编码和解码格式!
路径问题:
绝对路径:绝对路径是以/开头的路径!
相对于当前服务器的绝对路径:如果是服务器解析,那么/就代表当前服务器的绝对路径:http://localhost:8080
相对于当前web应用的绝对路径:代表的是http://localhost:8080/项目名/
如果是服务器端解析,代表的是:http://localhost:8080/项目名/
如果是浏览器端解析,代表的是:http://localhost:8080
相对路径:不是以/开头的路径是相对路径,相对的是当前web资源目录的路径!
常见的路径:
url-pattern:
转发的路径:
这两个的绝对路径由服务器解析,相对于项目的根目录 http://主机地址:端口号/项目名/
重定向的路径:
在实际开发中,我们使用的是绝对路径,不使用相对路径!开发中尽量不要使用硬编码的方式!
页面中的路径:
这两个路径由浏览器解析,相对于服务器的根目录
http://主机地址:端口号/
base标签
base标签里面有一个href属性,这个属性允许我们用使用相对路径的方式使用绝对路径!
我们再使用相对路径的时候,相对路径会以这个href属性值作为前缀!
Servlet 服务器端小程序的更多相关文章
- Python UDP小程序
为了做UDP的测试,采用了nc和Python的服务器端. nc的安装和使用: yum install -y nc nc -vuz Python的UDP服务器端小程序: # -*- coding: UT ...
- 实现一个servlet的helloworld小程序(不适用Eclipse)
实现一个servlet的helloworld小程序(不适用Eclipse) 1. 在tomcat中的webapps下建一个应用程序FirstServlet(C:\tomcat\webapps\Firs ...
- 微信小程序 用户登录 服务器端(TP5.1)实现
先来看官方提供的流程图: 客户端: 小程序客户端通过 wx.login() 获取登录code , 然后将code当做参数传递到服务器. getToken(){ var that = this; wx. ...
- Java Servlet:服务器小程序
servlet:服务器小程序 servlet是一个接口,接口是一种规范,因此servlet是一种规范 一个类声明为抽象类的原因: 不包含抽象方法,不想被实例化 包含抽象方法,子类有对抽象方法的不同实现 ...
- 第一个servlet小程序
第一个servlet小程序 com.fry.servlet.HelloServlet package com.fry.servlet; import javax.servlet.ServletExce ...
- IDEA使用技巧,如何在JSP中创建Servlet“小程序”
步骤 1.新建一个java类,实现Servlet接口 2.实现接口中的抽象方法: 3.在web.xml文件中配置好servlet <web-app ......> <servlet& ...
- 微信小程序 服务器端生成用户登陆环节的 3rd_session
一.环境: CentOS 6.8 nginx 1.8.0 php 7.0.10 二.背景 最近在开发一个微信小程序,不可避免的涉及到登陆的环节,登录时序图如下: 通过 wx.login() 获取到用户 ...
- 微信小程序基于第三方websocket的服务器端部署
微信小程序后台请求越来越严格 1.request要求用https 2.websocket要求用wss 3.测试后发现websocket只能走433端口 作为.net开发,websocket又是使用的第 ...
- 微信小程序 支付功能 服务器端(TP5.1)实现
首先下载微信支付SDK ,将整个目录的文件放在 /application/extend/WxPay 目录下 在使用SDK之前我们需要对 WxPay.Config.php 进行配置 <?php n ...
随机推荐
- Python之编写登陆接口
1.输入用户名密码: 2.认证成功后显示欢迎信息: 3.错误三次后,账号被锁定. 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- ...
- java 网络编程 UDP TCP
网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...
- Django学习(一)---基本配置及创建项目、应用
安装:在Django官网下载最新版Django然后通过pip安装即可 一.创建项目 进入文件夹,打开cmd窗口,输入django-admin startproject myblog(项目名) 二.创建 ...
- 如何用快速傅里叶变换实现DFT
[目标] 如何以 \(O(N \log N)\) 的效率将系数多项式转换为点值多项式. [前置技能] 众所周知,\(x^n=1\)的根有n个,而且它们分别是\(e^{\frac{2*π*i}{ ...
- 单片机C语言基础编程源码六则2
1.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直 ...
- ZooKeeper快速学习
"一入Java深似海",过去自身对于分布式的接触,始终处于使用别人构建的框架的水平,最多就是在nginx配置一下第4层的负载均衡(最后有介绍).随着java使用深入,本文将重点理解 ...
- kali ssh服务连接问题,无法远程管理
1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 2.将#PasswordAuthentication no的注释去掉,并且将NO修改为YES 3.将#Per ...
- 线程高级.md
例题,哲学家用餐: 在一张餐桌上坐着五个哲学家,但是却只有五根筷子,每个哲学家只有一根筷子,所以当一个哲学家要夹菜的时候需要用他旁边那个哲学家的筷子,被拿走筷子的哲学家则只能等待那个哲学家吃完放下筷子 ...
- LVS服务原理以及搭建(理论+干货)
LVS服务原理以及搭建(理论+干货) 版权声明:本文为yunshuxueyuan原创文章 如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blog QQ ...
- Java虚拟机:类加载机制详解
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 大家知道,我们的Java程序被编译器编译成class文件,在class文件中描述的各种信息,最终都需要加载到虚拟机内存才能运行和使用,那么 ...