Servlet重点笔记

忘是亡心i 2022-05-13 12:46 283阅读 0赞

一.Servlet是什么?

1.百度百科解释:https://baike.baidu.com/item/servlet/477555?fr=aladdin

2.自己的见解:是一个Java程序,运行在服务器端,为客户端的操作做出不同的响应,实现不同功能的一段代码。在Java中为一个能实现的接口。

3.单词释意:Servlet为Server Applet缩写(参照百度翻译)

70

70 1

二.接口中的方法

1.Servlet中一共有五个方法

  1. package javax.servlet;
  2. import java.io.IOException;
  3. public interface Servlet {
  4. public void init(ServletConfig config) throws ServletException;
  5. public ServletConfig getServletConfig();
  6. public void service(ServletRequest req, ServletResponse res)
  7. throws ServletException, IOException;
  8. public String getServletInfo();
  9. public void destroy();

1.1 init()

init方法用于服务器载入 Servlet 时执行的。可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时载入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init(),init()只执行一次。一个Servlet只创建一次,属于单例的对象。

在并发的场景下,Servlet属于线程不安全的对象, 不建议定义成员变量

1.2 getServletConfig()

getServletConfig()用来返回初始化参数和ServletConfig。

ServletConfig为一个接口

  1. /**
  2. * A servlet configuration object used by a servlet container to pass
  3. * information to a servlet during initialization.
  4. */
  5. public interface ServletConfig {
  6. /**
  7. * Returns the name of this servlet instance. The name may be provided via
  8. * server administration, assigned in the web application deployment
  9. * descriptor, or for an unregistered (and thus unnamed) servlet instance it
  10. * will be the servlet's class name.
  11. *
  12. * @return the name of the servlet instance
  13. */
  14. public String getServletName();
  15. /**
  16. * Returns a reference to the {@link ServletContext} in which the caller is
  17. * executing.
  18. *
  19. * @return a {@link ServletContext} object, used by the caller to interact
  20. * with its servlet container
  21. * @see ServletContext
  22. */
  23. public ServletContext getServletContext();
  24. /**
  25. * Returns a <code>String</code> containing the value of the named
  26. * initialization parameter, or <code>null</code> if the parameter does not
  27. * exist.
  28. *
  29. * @param name
  30. * a <code>String</code> specifying the name of the
  31. * initialization parameter
  32. * @return a <code>String</code> containing the value of the initialization
  33. * parameter
  34. */
  35. public String getInitParameter(String name);
  36. /**
  37. * Returns the names of the servlet's initialization parameters as an
  38. * <code>Enumeration</code> of <code>String</code> objects, or an empty
  39. * <code>Enumeration</code> if the servlet has no initialization parameters.
  40. *
  41. * @return an <code>Enumeration</code> of <code>String</code> objects
  42. * containing the names of the servlet's initialization parameters
  43. */
  44. public Enumeration<String> getInitParameterNames();
  45. }

此接口主要是在servlet初始化时提供一些环境信息

此接口的此方法 public ServletContext getServletContext();主要 用来获取一个servlet环境(ServletContext),此环境可以用来存储一些全局信息。如下:

ServletContext用法(ServletContext也是一个接口,此环境有非常多的方法

  1. //获取ServletContext
  2. HttpSession session = request.getSession();
  3. ServletContext application = session.getServletContext();
  4. //存值 注意第一个为String,第二个为Object
  5. application.setAttribute(String name,Object value);
  6. //取值
  7. Object obj = application.getAttribute(String name);
  8. //移除属性
  9. application.removeAttribute(name);

常用的有

1获取环境路径

2获取资源:根据名字获取资源

3设置资源:设置资源对象并设置相关名字

4移除资源:根据名字移除资源

5获取转发跳转器(RequestDispatcher也是一个接口其中有forword和include方法)

  1. 1 public String getContextPath();
  2. 2 public Object getAttribute(String name);
  3. 3 public void setAttribute(String name, Object object);
  4. 4 public void removeAttribute(String name);
  5. 5 public RequestDispatcher getRequestDispatcher(String path);

1.3 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

最常用的方法:用于接受请求**req和响应请求res**

通常是使用其抽象类GenericServlet(此类继承了Servlet, ServletConfig)的子类HttpServlet**中的**

service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}方法

使用此方法操作使用http协议传输的请求和响应

1.4 public String getServletInfo();

返回servlet的一些信息,比如作者版本和版权信息。

1.5 public void destroy();

此方法只在所有线程都退出此servlet的使用后才能调用,调用之后,servlet容器不会在调用此servlet的service方法。

一个service的方法的重写例子

  1. public class LogOut extends HttpServlet {
  2. protected void service(HttpServletRequest request, HttpServletResponse response)
  3. throws ServletException, IOException {
  4. HttpSession session = request.getSession(false);
  5. session.invalidate();
  6. response.sendRedirect(request.getContextPath() + "/JSPCON/Login.jsp");
  7. }
  8. }

从请求中获取会话的对象

关闭会话

重定向到登录页面

service方法就是servlet中用来处理请求和响应的最关键的方法。

编写不同的servlet中的service方法从而为客户实现不同的请求和响应功能。提供不同的服务(service)。

三.xml中的配置

xml文件需放在WEB-INF下

70 2

lib里则放一些外部的jar包,lib和xml并列放在WEB-INF下

  1. <servlet>
  2. <servlet-name>AddAction</servlet-name>
  3. <servlet-class>contactsSystem.servlet.AddAction</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>AddAction</servlet-name>
  7. <url-pattern>/admin/AddAction</url-pattern>
  8. </servlet-mapping>

配置好后可通过${pageContext.request.contextPath}/admin/AddAction跳转到此servlet执行相关操作

  1. | |
  2. ** 项目名 ** + **URL-pattern **

例如表单操作 ,向此servlet提交数据

  1. <form action="${pageContext.request.contextPath}/admin/AddAction" method="post">

此servlet代码

  1. public class AddAction extends HttpServlet {
  2. protected void service(HttpServletRequest request, HttpServletResponse response)
  3. throws ServletException, IOException {
  4. response.setContentType("text/html");
  5. String name = request.getParameter("name");
  6. String mobile = request.getParameter("mobile");
  7. String telphone = request.getParameter("tel");
  8. String email = request.getParameter("email");
  9. String city = request.getParameter("city");
  10. String birth = request.getParameter("birth");
  11. // 3 调用service业务功能
  12. PersonServiceImpl pImpl = new PersonServiceImpl();
  13. try {
  14. pImpl.regist(name, mobile, telphone, email, city, birth);
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. // 4 跳转
  19. response.sendRedirect(request.getContextPath()+"/admin/FindByPageAction?pageId=1");
  20. //request.getRequestDispatcher("/admin/FindAllAction").forward(request, response);
  21. }
  22. }

四.URI和URL的区别,以及url-pattern

URI = Universal Resource Identifier

统一资源标识符

URL = Universal Resource Locator

统一资源定位符

可参考博客https://blog.csdn.net/qq_26975307/article/details/54429760

自己的理解:

URL:常用到浏览器的地址 https://mp.csdn.net/postedit/82670519 一个链接就是一个URL。

URI:大多用在访问web资源,image,html,js,jsp,在javaweb开发中格式一般为 / 项目名 / 资源相对路径

  1. | |
  2. / Java工程名 / url-pattern

url-pattern:**用在一个项目中替换掉资源的真实路径的地址,也就是相对路径,浏览器通过访问这个相对路径(虚假的路径)去访问真实路径下的资源,浏览器地址栏显示的就是此相对路径。**

五.请求Servlet的几种方式

地址栏请求:URL请求

超链接请求:URI请求

HTML页面表单请求:URI请求

六.客户端与服务器传输数据的方式

GET : 地址栏拼接

POST :表单的method=POST

服务器端程序如何获取请求参数

70 3

七.请求转发与重定向

自己的理解:

1.请求转发:(用法)**request.getRequestDispatcher(目标Servlet的url-pattern).forward(request,response);**

举例:

客户机像服务器发出请求,服务器当前servlet解决不了,把请求转发给其他servlet其他servlet亲自(返回数据时不再通过第一个被请求的servlet)把请求结果反馈给客户机。

客户机地址栏不变,因此不知道是当前servlet解决的问题还是转发给其他servlet解决的。

特点:

1.1 地址栏不变 | 因为转发动作发生在服务器内部,用户并不知道

1.2 请求转发连接的两个Servlet处于一次请求中

1.3 请求转发连接的两个Servlet只有最后一个有权利响应结果 .

2.重定向:(用法)response**.sendRedirect(目标的URI);**

举例:

当客户机向服务器发出请求,服务器直接返回一个能解决此问题的servlet的URL,让客户机自己去通过URL去寻找能解决此请求的servlet

特点:

2.1 地址栏改变。 动作发生在服务器外部。

2.2 重定向连接的两个Servlet,处于两次请求。 | 重定向连接的两个Servlet不能使用request作用域传递数据。

使用场景:

  1. 请求转发:

两个Servlet之间,需要传递大量的数据。

  1. 请求重定向:

两个 Servlet之间,没有大量的数据需要传递。

什么是Cookie : Cookie是客户端浏览器上的一小段字符串信息, 以key-value的形式存储。

Cookie的基本使用:

1 向客户端浏览器设置Cookie

- 创建: Cookie cookie = new Cookie(String name,String value);

- 设置到客户端浏览器: response.addCookie(cookie);

2 服务器端如何获取客户端浏览器的cookie:

- Cookie[] cookies = request.getCookies();

PS: 网站只能获取到自己服务器设置到客户端浏览器上的Cookie .

3 基本的方法:

- 获取Cookie名字:String name = cookie.getName();

- 获取 Cookie的值:String value = cookie.getValue();

- 手动设置Cookie存活时间:

cookie.setMaxAge(大于0整数); — 代表存活时间/秒

cookie.setMaxAge(0); -- 代表删除指定cookie

cookie.setMaxAge(负数); — 不会设置cookie

4 Cookie的生命周期:

- 默认: 关闭浏览器Cookie销毁。

- 可以手动设置Cookie存活时间:cookie.setMaxAge(时间/秒);

5.Cookie的缺陷:

5.1 Cookie明文存储信息,不安全

5.2 默认存储的数据量下,最多大概4KB

5.3 默认不支持中文

5.4 Cookie存在被禁用的风险

九.Session技术【重点】

什么是**Session: 是HttpSession对象功能的简称, 一个session对象代表用户的一个会话,同时HttpSession也是一个作用域(session作用域)。 Session是在服务器端记录用户的信息**。

Session的基本使用:

1 .创建:**HttpSession session = request.getSession(true) | request.getSession();**

- request.getSession(true) : 如果没有当前用户的会话对象,创建一个新的session. 如果有则直接返回给用户使用

- request.getSession(false) : 如果没有当前用户的会话对象,不会创建session. 如果有则直接返回给用户使用。

2.常用的方法:

- 存数据:session.setAttribute(String name,Object value);

- 取数据:Object value = session.getAttribute(String name);

- 返回sessionid:session.getId();

- 移除指定命名属性: session.removeAttribute(String name);

PS: session作用域中数据共享范围是 一次会话有效。

3.Session作用域的生命周期

创建: 用户开启一次会话, 第一次请求服务器 request.getSession(true);

销毁

- 手动销毁: session.invalidate();

- 超时策略: 从用户最后一次向服务器发起的请求结束,开始计时, 到了指定的session存活时间,session会自动销毁。

- Tomcat服务器默认 30分钟销毁session.

- 手动配置session销毁时间

全局的配置: 当前服务器中所有web应用中的 session都会受到影响

70 4

PS: 局部的配置会覆盖全局的。建议配置时间为正数。

4.Session的钝化与活化

钝化: 当服务器重启或关闭时,将服务器中没有超时的session序列化到磁盘上保存起来。

活化: 服务器正常运行后, 对应的用户请求服务器时,服务器会将其没有到时的session反序列化到内存中,给用户使用。

目的: 确保服务器关闭或重启是,用户的会话对象不丢失。

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读

    相关 生理学重点笔记

    第二部分 生理学 第一章 绪论 第一节 生命的基本特征 1、兴奋性:是指可兴奋的组织细胞对刺激产生兴奋(即产生动作电位)的能力或特性 2、刺激:能引起机体或细胞发生反应

    相关 口腔医学重点笔记

    3第一章 口腔颌面部解剖 1.口腔分为固有口腔和口腔前庭两部分。 2.口腔前庭:为牙列外围间隙,位于唇、颊与牙列、牙龈及牙槽粘膜之间马蹄形的潜在腔隙。 3.固有口腔的范围

    相关 伤寒论重点笔记

    一、太阳病伤寒,金匮,张仲景1 \\9 B& \{0 y/ w8 h\ o (一)提纲 1、太阳病:太阳之为病,脉浮,头项强痛而恶寒。(1) 2、太阳中风证:太阳病

    相关 vuex重点笔记

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 这个状态自管理应