Servlet重点笔记

一.Servlet是什么?

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

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

3.单词释意ServletServer Applet缩写(参照百度翻译)

Servlet重点笔记_第1张图片

 Servlet重点笔记_第2张图片

 二.接口中的方法

1.Servlet中一共有五个方法

package javax.servlet;

import java.io.IOException;
public interface Servlet {
    public void init(ServletConfig config) throws ServletException;

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

    public String getServletInfo();

    public void destroy();

)

1.1  init()

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

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

1.2  getServletConfig()

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

ServletConfig为一个接口

/**
 * A servlet configuration object used by a servlet container to pass
 * information to a servlet during initialization.
 */
public interface ServletConfig {

    /**
     * Returns the name of this servlet instance. The name may be provided via
     * server administration, assigned in the web application deployment
     * descriptor, or for an unregistered (and thus unnamed) servlet instance it
     * will be the servlet's class name.
     *
     * @return the name of the servlet instance
     */
    public String getServletName();

    /**
     * Returns a reference to the {@link ServletContext} in which the caller is
     * executing.
     *
     * @return a {@link ServletContext} object, used by the caller to interact
     *         with its servlet container
     * @see ServletContext
     */
    public ServletContext getServletContext();

    /**
     * Returns a String containing the value of the named
     * initialization parameter, or null if the parameter does not
     * exist.
     *
     * @param name
     *            a String specifying the name of the
     *            initialization parameter
     * @return a String containing the value of the initialization
     *         parameter
     */
    public String getInitParameter(String name);

    /**
     * Returns the names of the servlet's initialization parameters as an
     * Enumeration of String objects, or an empty
     * Enumeration if the servlet has no initialization parameters.
     *
     * @return an Enumeration of String objects
     *         containing the names of the servlet's initialization parameters
     */
    public Enumeration getInitParameterNames();
}

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

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

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

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

常用的有

1获取环境路径

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

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

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

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

   1 public String getContextPath();
   2 public Object getAttribute(String name);
   3 public void setAttribute(String name, Object object);
   4 public void removeAttribute(String name);
   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的方法的重写例子

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

从请求中获取会话的对象

关闭会话

重定向到登录页面

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

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

三.xml中的配置

xml文件需放在WEB-INF下

Servlet重点笔记_第3张图片

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

 
    AddAction
    contactsSystem.servlet.AddAction
  
  
    AddAction
    /admin/AddAction
  

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

                                                      |                                             |

                                               项目名                    +              URL-pattern         

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

 

 此servlet代码

public class AddAction extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		String name = request.getParameter("name");
		String mobile = request.getParameter("mobile");
		String telphone = request.getParameter("tel");
		String email = request.getParameter("email");
		String city = request.getParameter("city");
		String birth = request.getParameter("birth");

		// 3 调用service业务功能
		PersonServiceImpl pImpl = new PersonServiceImpl();
		try {
			pImpl.regist(name, mobile, telphone, email, city, birth);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 4 跳转
		response.sendRedirect(request.getContextPath()+"/admin/FindByPageAction?pageId=1");
		
		
		//request.getRequestDispatcher("/admin/FindAllAction").forward(request, response);
	}

}

四.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开发中格式一般为 /       项目名     /    资源相对路径

                                                                                                                                             |                         |

                                                                                                                                  /   Java工程名  /      url-pattern

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

五.请求Servlet的几种方式

地址栏请求:URL请求

超链接请求:URI请求

HTML页面表单请求:URI请求

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

 GET : 地址栏拼接

POST :表单的method=POST

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

Servlet重点笔记_第4张图片

 七.请求转发与重定向

自己的理解:

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);

举例:

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

特点:

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

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

使用场景:

  1. 请求转发:

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

  1. 请求重定向:

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

八.cookie技术

什么是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都会受到影响

Servlet重点笔记_第5张图片

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

4.Session的钝化与活化

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

 

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

 

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

 

 

你可能感兴趣的:(Java)