servlet学习2.0||Java web开发学习【老杜】

1.servlet不建议自定义构造方法,不安全,可能时无参数构造方法消失,导致无法实例化。把一些初始化操作写在service()中。

servlet对象不能自己来new,自己new的servlet对象不受tomcat管理。 可能不会被回收

地址栏上提交请求,才执行doget()方法:要在地址栏填写xx=xxx

2.http请求报文有多种类型,最常用的是get,post请求

到目前为止,只有一种情况可以发送POST请求:使用form表单,并且form标签中的method属性值为:method="post"。

其他所有情况一律都是get请求:
    - 在浏览器地址栏上直接输入URL,敲回车,属于get请求。
    - 在浏览器上直接点击超链接,属于get请求。
    - 使用form表单提交数据时,form标签中没有写method属性,默认就是get
    - 或者使用form的时候,form标签中method属性值为:method="get"
    - ....

3.get和post请求选择

无论是get还是post请求,都遵循了http协议,都被封装在HTTPServletRequest中,由tomcat来解析。服务器把解析的对象封装在HTTPServletRequest对象中。 coder可以直接使用HTTPServletRequest对象的方法。

4.HttpServlet源码分析

继承关系: servlet-->genericServlet --> HttpServlet--> (我们自己的写的myServlet)

  • servlet接口中5个方法:init(), service(), destroy()
  • genericServlet覆写: init(ServletContext 参数){   ;init()},init()
  • HttpServlet:

service(ServletRequest rq, ServletResponse rp){把ServletRequest类型强转成HttpServletRequest 类型}

service(HttpServletRequest rq, HttpServletResponse rp){ 对request类型进行判定,是get/post/...方法,分别执行doget()/ dopost() }

doGet(显示错误).   doPost()...

myservlet中传入Request请求:

  1. 执行init(),genericServlet中的init(ServletContext 参数)方法
  2. 执行service(),HttpServlet中的service(ServletRequest rq, ServletResponse rp)方法,该方法会ServletRequest类型强转成HttpServletRequest 类型,然后执行service(HttpServletRequest rq, HttpServletResponse rp)方法。
  3. 判定Requst请求的类型,假设get请求,如果myservlet中没有覆写doget(),会去调用父类HttpServlet的doget(),父类的doget()执行会显示错误
  4. 因此我们必须在myservlet中覆写doget()或dopost(),根据请求类型来判定重写哪个方法。

5. servlet开发步骤

6.欢迎页面

a.CATALINA_HOME/conf/web.xml文件中进行配置(全局配置)。默认index.html/index.jsp/ index.htm 是欢迎页面

b.webapp内部的web.xml文件中自己配置欢迎页面

  • 如果自己在web.xml中配置了,则全局配置失效
  • 可以同时设置多个欢迎页面,按照顺序排优先级
  • 欢迎页面设置路径 一定不要以“/”开始, 默认从webapp的根路径下寻找。
  • 也可以设置动态的欢迎页面,路径对应<mapping>中类的url

7.Request对象的方法

a.parameter 4兄弟

  • 一次请求对应一个request对象
  • request对象存储前端传来的数据的方式: map(String ,[ ]String)
  • 因为可能有复选框,同一个name对应好几个value
  • 浏览器往服务器提交的是字符串。即使穿的是数字110,也是以String类型传递。
  • String getparameter(String name)最常用  是获得每个name的第一个value (大部分都只有1个value,只有少数复选框有多个value)
  • 4兄弟都是获取前端浏览器提交的数据

实现request的几个方法  servlet类编写  获取页面传入的数据

 

 

  b.attribute3兄弟

这3个方法servletContext也有

void setAttribute(String name, Object obj); // 向域当中绑定数据。
Object getAttribute(String name); // 从域当中根据name获取数据。
void removeAttribute(String name); // 将域当中绑定的数据移除

如何从一个servlet绑定的数据,在另一个servlet使用?  请求转发机制

c.设置字符编码utf-8   解决乱码问题

只作用于请求体(post请求中数据所在的位置),不作用于请求行(get请求)

d.其他方法

8. ServletContext应用域对象|| request请求域对象

1个servlet只创建一个ServletContext对象

服务器启动的时候,就创建了应用域对象。 所有用户共享  

1次请求对应一个request对象。只有发起请求的时候才会创建request对象

9.请求转发  2个servlet贡献数据   RequestDispatcher

不可以,因为servlet不允许程序员自己创建,(会不受tomcat的管理)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,在哔哩哔哩上有一个叫老杜的人分享了他的Servlet笔记。他在2020年5月5日开始学习Servlet,并在接下来的几天继续学习和记录笔记。他的学习内容包括Tomcat服务器配置、UML以及一些关于Servlet的知识。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [servlet 笔记](https://download.csdn.net/download/Deeppool/2957499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [servlet笔记](https://blog.csdn.net/weixin_45691546/article/details/114703902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [老杜Servlet笔记.zip](https://download.csdn.net/download/qq_44755403/12506214)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值