文章目录

  • Servlet基础
  • 1.Servlet基础
    • 1.1.什么是Servlet
    • 1.2.如何开发一个Servlet
    • 1.3.Servlet执行流程
    • 1.4.Servlet生命周期
    • 1.5.ServletConfig
    • 1.6.Get请求与Post请求的区别
    • 1.7.处理请求的方式
    • 1.8.HttpServletRequest对象
    • 1.9.HttpServletResponse对象
    • 1.10.乱码问题
  • 2.课程总结
    • 2.1.重点
    • 2.2.难点
    • 2.3.如何掌握
    • 2.4.排错技巧
  • 3.常见问题
  • 4.课后练习
  • 5.扩展知识或课外阅读推荐(可选)
    • 5.1.扩展知识

Servlet基础

课程介绍

Servlet基础; (掌握)
基本结构
生命周期
执行流程
接收参数
响应数据

1.Servlet基础

1.1.什么是Servlet

1.这是一个接口,一个规范(sun公司并没有去实现它),它的实现就是由各大服务器厂商(Tomcat)去实现;
2.Tomcat是一个javaweb服务器,也是一个Servlet容器;
3.Servlet容器是管理所有Servlet对象的创建,运行,销毁的容器。而Servlet对象也只有在Servlet容器中才能使用。所以如果我们写了一个Servlet, 那么一定要记住,把这个Servlet交给Tomcat去管理;
4.Servlet接受web请求

1.2.如何开发一个Servlet

1.创建一个web项目;
2.导入Servlet的jar (servlet-api.jar)包,可以去Tomcat目录的lib目录中复制:

3.新建一个类去实现Servlet接口或者去继承HttpServlet类(建议),并实现或重写service业务方法:

4.在web.xml中注册Servlet,即让Tomcat知道有这么一个Servlet要交给它去管理:

5.匹配请求

6.配置完成后,我们可以进行访问,浏览器中输入地址:
http://ip地址<:端口>/<上下文路径>/我们自己映射的路径
http://localhost:80/servlet/hello
注意:常见错误
1.部署web项目后启动Tomcat时会加载项目中的web.xml文件,如果部署会问题,说明web.xml中出现问题;
2.自定义的Servlet一定要提供一个公共无参的构造方法;
3.web.xml中url-pattern这里一定要有/;
4.自定义的Servlet一定要写完全限定名;
5.Tomcat服务配置文件server.xml中的配置中docBase路径不要写错;
6.classes(eclipse生成的.class文件路径)配置正确;

1.3.Servlet执行流程

注:访问之前一定要确保Tomcat服务要开启,并且要将项目部署到Tomcat,否则出现404错误;
1.用户在浏览器端输入地址。例如:http://localhost:80/servlet/hello
2.这个请求访问的是本地(localhost)端口号为80的程序,即tomcat;
3.Tomcat会到webapps中去找到servlet这个程序或者到server.xml中根据上下文路径()中的找到对应的项目:

这个对应的就是我们路径中的:http://localhost:80/servlet/hello
4.然后Tomcat会去找到该项目的配置文件web.xml,然后查看有没有hello这个请求;

5.请求:http://localhost:80/servlet/hello

注意:当我们找到这个 /hello的时候,也就相应的找到了Servlet的名字(servlet-name) : hello
6.Tomcat会根据请求hello去匹配web.xml中的中的值:
(1)如果没有匹配上就去找这个项目默认web路径下有没有hello这个页面(html或jsp):
①如果没有,404;
②如果有这个页面,显示页面的内容;
(2)如果匹配上了会根据标签找到相应的Servlet类:

7.找到相应的类之后,到缓存区里面去看这个类有没有相应的实例:
(1)如果没有,通过反射创建一个实例,并将这个实例放到缓存区:
①执行构造方法
②执行初始化方法
(2)如果有,直接拿到这个实例;
8.调用实例的service方法执行业务逻辑处理;
9.如果正常关闭的话,会执行destroy方法;

1.4.Servlet生命周期

人的生命周期:出生 – 取名上户(初始化) – 为人民服务 – 死亡
Servlet生命周期:
1.Servlet容器调用无参构造创建对象 – 第一次访问 或 项目部署的时候
2.Servlet容器调用初始化方法(init()) – 第一次访问 或 项目部署的时候
3.Servlet容器调用服务方法(service()、doGet()、doPost()) – 第n次访问
4.对于Tomcat来说,Servlet只有一个(它是单例的,每次创建的Servlet实例都会缓存起来)
5.当我们正常关闭Tomcat的时候,Servlet容器会自动调用销毁方法(destory())
构造方法 --> init方法 --> service【每次请求都会执行】 --> destory【正常关闭才执行】

注意:也可以将Servlet实例化和初始化的时机提前到项目部署或服务器开启的时候,只需要加上标签即可:

1.5.ServletConfig

1.ServletConfig这个对象是由Tomcat为我们创建好的,我们可以在init中可以拿到它。它是Servlet的配置对象;
2.API:
config.getServletContext():拿到的上下文对象(先不管)
config.getServletName():拿到Servlet的名字

config.getInitParameter(String name): 根据名称拿到初始化参数

1.6.Get请求与Post请求的区别

1.get请求时,请求参数放在请求地址url后面,而post提交方式时,请求参数是放在请求数据包中的实体内容中传递;
2.由于地址栏的数据有长度限制,所以Get请求传输的数据量小,一般不能大于2kb,Post请求传输的数据大小没有限制。所以一般文件上传下载使用的是Post请求;
3.Post安全性相对Get较高;
注意:
1.什么时候发get请求?
(1)直接输入网址
(2)点击链接
(3)设置表单的提交方式为get或表单的默认提交
2.什么时候发post请求?
(1)设置表单提交方式为post(method=“post”)

1.7.处理请求的方式

前言:之前学过请求方式或方法有很多,主要掌握:get和post两种,下面的这种写法太麻烦:

为了提高开发效率,一般采用下面的几种方式处理不同的请求方式:
第一种:在doGet中调用doPost

第二种:在doPost中调用doGet

第三种:service方法(底层会判断是get还是post调用相应的方法处理)

1.8.HttpServletRequest对象

1.HttpServletRequest对象是Servlet的请求对象,可以获取请求数据包/报文中的所有信息;
2.常用方法:

(1)String getContextPath():获取上下文路径,<Context path="上下文" ../>;
(2)String getHeader(String headName):根据指定的请求头获取对应的请求头的值;
(3)String getRequestURI():返回当期请求的资源路径URI(上下文路径/资源名);
(4)StringBuffer getRequestURL():返回浏览器请求地址URL;
(5)String getRemoteAddr():返回请求服务器的客户端的IP;
(6)String getServletPath():返回请求,<url-pattern>中的值;
(7)==String getParameter(String name):==根据参数名称,获取对应参数的值;
(8)String[] getParameterValues(String name):根据参数名称,获取该参数的多个值;
(9)Map<String,String[]> getParameterMap():返回请求参数组成的Map集合;
(10)void req.setCharacterEncoding("UTF-8"):能够正确获取post请求的中文参数而不出现乱码;
(11)String getProtocol()):获取协议版本HTTP/1.1
(12)String getMethod()):获取请求方式(GET or POST)
(13)int getServerPort():获取端口号

1.9.HttpServletResponse对象

1.HttpServletResponse对象是Servlet的响应对象,可以设置响应的文件格式和编码格式,还可以获取输出流;
2.常用方法:
(1)获取流:
①方法1:OutputStream getOutputStream(); 获取字节输出流(上传下载用)
②方法2:resp.getWriter(); 获取字符输出流
(2)响应页面的文件格式和编码格式:resp.setContextType(“text/html;charset=UTF-8”);

1.10.乱码问题

1.向页面输出中文
(1)resp.setContentType(“text/html;charset=utf-8”);//能够向页面输出中文
(2)注意:""中的内容不要写错,否则浏览器不认识响应的类型,就会将问题抛给用户;
2.获取表单提交的中文数据
(1)针对post请求(请求参数是在实体内容中)
①第一种:req.setCharacterEncoding(“utf-8”);
②第二种:转码:name = new String(name.getBytes(“iso-8859-1”), “utf-8”);//转码缺点:太麻烦,每个数据都要转
③注意:两种只能用其一;
3.针对get请求(请求参数是在地址栏上),tomcat8不做处理,如果是tomcat7及其以前:
(1)第一种:转码:name = new String(name.getBytes(“iso-8859-1”), “utf-8”);
(2)第二种:修改服务器中的配置conf – server.xml – 标签中最后加上属性URIEncoding=“utf-8”
(3)注意:两种只能用其一 ,以后服务器换了,还需重新配置一次;
4.注意:
(1)tomcat8.x之前的默认编码集为ISO-8859-1,tomcat8.x之后默认编码集为UTF-8;
(2)对于tomcat8.x以及之后的get请求不需要转码或配置,而Tomcat7需要配置;

2.课程总结

2.1.重点

1.get和post区别;
2.Sevlet开发;
3.Servlet生命周期;

2.2.难点

1.Web项目搭建和部署;
2.Servlet开发;
3.乱码问题;
4.Servlet生命周期理解;

2.3.如何掌握

1.课上认真听课;
2.完成课后练习;
3.抓住课程重点;

2.4.排错技巧

1.通过异常和错误找出问题,分析问题,解决问题;
2.如果tomcat点了没有反应,可能是在eclipse 里面配置有问题;
3.如果已经启动了tomcat,再次启动会报错端口号被占用;
4.不熟悉Servlet开发流程;

3.常见问题

1.错误信息:A child container failed during start
(1)原因1:请求的写法不规范
(2)原因2:请求重复了,Servlet的请求不能重复
2.错误信息:ClassNotFoundException - 我们自己写的类找不到
(1)原因1:类的完全限定名写错
(2)原因2:eclipse自动编译出问题,切换到navigator视图发现classes中没有字节码文件 – 解决,重启eclipse,有可能eclipse在执行其他任务时卡住了
3.Tomcat启动时进入Debug模式
(1)如果Javaweb项目运行时,设置了断点【有时候并不是自己设置的,tomcat自动设置的】,那么启动时就会停止 – 解决,清除所有的断点,然后重新启动tomcat
4.Tomcat启动时报错
(1)包含第一个错误
(2)找配置【web.xml or server.xml】找注解@WebServlet

4.课后练习

1.课堂代码1-2遍;
2.完成一个页面输入账号和密码,后台连接数据库查询是否有该用户
如果有返回登陆成功
如果没有返回 亲,账号和密码错误

5.扩展知识或课外阅读推荐(可选)

5.1.扩展知识

@WebServlet注解
@WebServlet(name="", urlPatterns={""}, loadOnStartup=1,initParams={@WebInitParam(name="",value="")})
public class FirstServlet extends HttpServlet{ … }
注:如果添加了web.xml,需要设置metadata-complete=”false”或者说不写这个属性,那么上述注解才有用:

javaweb实训第三天上午——Servlet相关推荐

  1. javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用

    1.课程介绍 Servlet三大职责: (掌握) Servlet重定向和请求转发: (掌握) JSP介绍: (了解) JSP语法: (掌握) JSP三大指令: (掌握)) JSP九大内置对象: (了解 ...

  2. javaweb实训第五天上午——Spring基础

    Spring基础 1.课程介绍 2.为什么需要Spring 3.初识Spring 3.1.什么是Spring 3.2.Spring框架的好处 3.3.Spring框架的模块化 4.Spring入门 4 ...

  3. javaweb实训第四天上午——员工管理系统-JavaBeanELJSTLMVC思想

    目录 1.课程介绍 2.项目需求分析 3.JavaBean 3.1.什么是JavaBean 3.2.JavaBean的规范 3.3.Bean属性与对象属性 3.4.BeanUtils的使用(主要进行属 ...

  4. javaweb实训第四天上午——MySQL基础

    目录 1 课程介绍 2 数据库概述 2.1 数据库概念 2.2 数据库的由来和发展 2.3 常见的==关系型数据==库服务器(DBMS) 2.4 SQL概述 2.5 表的概念(table) 3 数据库 ...

  5. java-web实训项目:simonshop(3)Servlet层

    控制层 在src里创建net.hw.shop.servlet包,在里面创建各种控制处理类. 1.登录处理类Loginservlet 修改登录页面信息 运行一下首页 运行Tomcat到网页输入login ...

  6. [JavaWeb实训Day4]__jsoup爬虫(爬新闻页面)词云的生成( kumo库)

    目录 一.本次实验分析过程 二.Jee连接MySQL数据库 三.异步传值及界面设计 四.jsoup爬虫爬取新闻网页 五.新闻词云的生成( kumo库) 六.存入数据库 快速链接:[JavaWeb项目实 ...

  7. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

    JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...

  8. 计算机基础与应用23页思考与实训,《计算机基础与应用》实训作业三

    <计算机基础与应用>实训作业(三) 实训练习一.数据库技术基础综合应用 [实训要求] 1.能够建立和维护Access数据库 2.能够使用SQL中的四条基本语句:INSERT.UPDATE. ...

  9. 东北大学oj平台python答案_东北大学大数据班R实训第三次作业

    title: "R实训第三次作业" output: html_notebook 1.通过读取文件death rate.csv获取数据保存到df中:简单分析数据,获取共 有数据多少条 ...

最新文章

  1. 如何手动的用jigloo设计器关联java界面文件 jigloo 设计器失去关联解决
  2. php 上传加水印,php 图片上传加水印(自动增加水印)
  3. 欢迎来怼---作业要求 20171015 beta冲刺贡献分分配规则
  4. html(4)标签form表单——基础
  5. 如何将h5网页改成微信网页
  6. 对象在内存中的存储布局
  7. 一年Java经验应该会些什么
  8. 当自动化遇见数字化——德资企业儒拉玛特的数字化实践
  9. vijos1153猫狗大战
  10. Java基础-控制流程-5. 中断控制流程语句
  11. 进程篇—进程整理(转)
  12. Selenium 三种等待
  13. python爬取网易云音乐歌词_python3爬取网易云音乐歌单里的歌词(含源码)
  14. Java类加载机制由浅入深
  15. cruzer php sandisk 闪迪u盘量产工具_sandisk量产工具(闪迪U盘量产工具)
  16. TE银令契约,2019颠覆行业模式,造就大批巨富
  17. 性能测试实战(七):数据驱动
  18. vscode配置python环境以及使用json文件配置默认解释器、代码自动保存、pydesigner、kite
  19. 我的世界服务器清垃圾文件,我的世界:五大处理“垃圾”方法,我选择懒人方法,你会如何选?...
  20. 弹幕 mysql_3、Flask构建弹幕微电影网站-安装mysql数据库及配置

热门文章

  1. Flutter进阶—实现动画效果(一)
  2. Dart基础-运算符
  3. 2021年中国中频等离子体激发市场趋势报告、技术动态创新及2027年市场预测
  4. 2021年中国床上用品市场趋势报告、技术动态创新及2027年市场预测
  5. python 路径拼接字符串_anaconda环境变量添加 python笔记
  6. 中奖名单出炉,本期“开发者大调查”的奖品花落谁家?
  7. 中国互联网大会首届智能网联论坛举行 数字技术驱动交通出行行业创新发展
  8. 英特尔新任CEO的“开挂”人生
  9. 快速攻克机器学习图像异常检测
  10. 线程与进程,你真的清楚吗?