程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(2)

Servlet总结

发布于2021-06-08 12:52     阅读(625)     评论(0)     点赞(14)     收藏(4)


Servlet

B/S架构

B/S架构(Browser/Server)是指基于浏览器/服务器的架构

JavaEE

JavaEE是基于分布式和多层结构的企业级应用开发规范和标准

传统的JavaEE组件JDBC、Servlet、EJB(Enterprise Java Beans)等

轻量级的框架结构Struts、Hibernate和Spring

Servlet

简介

Servlet 是Web服务器端的Java应用程序。

  1. 浏览器发送一个请求到服务器,
  2. 服务器把请求送往一个特定的Servlet,
  3. Servlet处理请求并构造一个合适的响应返回给客户。

编写

编写Servlet需要遵循其规范:

  • 继承HttpServlet
  • 覆盖doGet()、doPost()方法之一或全部
  • 参数HttpServletRequest类型:表示客户端的请求从客户端获得发送过来的请求信息。
  • 参数HttpServletResponse类型:表示服务器端的响应。让服务器端对客户端做出响应。
  • 最常用的相应:向客户端发送信息。
  • 如果直接在浏览器中直接输入地址来访问Servlet资源,属于使用Get方式访问。
//创建一个Servlet类,继承HttpServlet  
public class HelloServlet extends HttpServlet {
	// 重写doGet()
	public void doGet(HttpServletRequest request, 
			 HttpServletResponse response)
	        throws ServletException, IOException {
		//设置响应到客户端的文本类型为HTML
		response.setContentType("text/html");
		//获取输出流
		PrintWriter out = response.getWriter();
		out.println("Hello World");
	}
}

配置

<servlet>
	<servlet-name>Hello</servlet-name>
	<servlet-class>
		com.haiersoft.ch01.HelloServlet
	</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>Hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

和元素通过name匹配
元素指定了访问地址 http://localhost:8080/ch01/hello

生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqDTQgVb-1622725122511)(C:\Users\MI\AppData\Roaming\Typora\typora-user-images\image-20210603194753750.png)]

HttpServletReques

方法说明
getParameter(String)单值读取,返回与指定参数相应的值。参数区分大小写,参数没有相应的值则返回空String,如果没有该参数则返回null。对于多个同一参数名则返回首次出现的值
getParameterValues(String)多个值的读取,返回字符串的数组,对于不存在的参数名,返回值为null,如果参数只有单一的值,则返回只有一个元素的数组
getPammeterNames()返回Enumeration的形式参数名列表,如果当前请求中没有参数,返回空的Enumeration(不是null)
getReader()/getInputStream()获得输入流,如果以这种方式读取数据,不能保证可以同时使用getParameter()。当数据来自于上载的文件时,可以用此方法

HTTP请求报头

请求报头名称说明
Accept浏览器可接受的MIME类型
Accept-Charset浏览器可接受的字符集
Accept-Encoding浏览器能够进行解码的数据编码方式
Accept-Language浏览器所希望的语言种类
Authorization授权信息
Connection表示是否需要持久连接
Content-Length表示请求消息正文的长度
Cookie向服务器返回服务器之前设置的cookie信息
Host初始URL中的主机和端口
Referer来源的URL
User-Agent浏览器相关信息

Servlet读取请求报头

方法名描述
getAuthType()描述了客户采用的身份验证方案
getContentLength()返回请求中Content-Length HTTP标题的值上下文长度
getContentType()返回请求中Content-Type HTTP标题的值上下文长度
getHeader()返回指定标题域的值
getHeaderNames()返回一个包含所请求头名称的Enumeration类型的值
getPathInfo()返回servlet路径以后的查询字符串以前的所有路径信息
getPathTranslated()检索servlet(不包括查询字符串)后面的路径信息并把它转交成一个真正的路径
getRequesURI()返回URL中主机和端口之后,表单数据之前的部分
getQueryString()返回一个URL查询字符串
getRemoteAddr()返回远程服务器地址
getRemoteHost()返回远程服务器名
getRemoteUser()返回由HTTP身份验证提交的用户名
getMethod()返回请求中使用的Http方法
getServerName()返回服务器名
getServerPort()返回服务器端口号
getProtocol()返回服务器协议名
getCookies()返回Cookie对象数组

HTTP响应报头

响应头说明
Content-Encoding用于标明页面在传输过程中的编码方式
Content-Type用于设置servlet输出的MIME(Multipurpose Internet Mail Extension)类型。在Tomcat安装目录下的conf目录下,有一个web.xml文件,里面列出了几乎所有的MIME类型和对应的文件扩展名。正式注册的MIME类型格式为maintype/subtype,如text/html、text/javascript等;而未正式注册的类型格式为maintype/x-subtype,如audio/x-mpeg等
Content-Language用于标明页面所使用的语言,例如en、en-us等
Expires用于标明页面的过期时间,可以使用这个来在指定的时间内取消页面缓存(cache)
Refresh这个报头表明浏览器自动重新调用最新的页面

Servlet设置响应报头

响应头说明
setContentType(String mime)该方法用于设置Content-Type报头。使用这个方法可以设置Servlet的MIME类型,甚至字符编码(Encoding),特别是在需要将Servlet的输出设置为非HTML格式的时候
setContentLength(int length)设置Content-Length报头
addCookie(Cookie c)设置Set-Cookie报头(有关Cookie的内容请参见第二章)
sendRedirect(String location)设置Location报头,让Servlet跳转到指定的url

重定向和请求转发

Servlet处理完数据后进行页面跳转的两种主要方式,重定向和请求转发

重定向

  • 重定向是指页面重新定位到某个新地址之前的请求Request失效,进入一个新的请求,跳转后浏览器地址栏内容将变为新的指定地址
  • 重定向是通过HttpServletResponse对象的**sendRedirect( )**来实现。
  • 该方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL,相当于浏览器重新发送一个请求
//代码
response.sendRedirect(request.getContextPath() + '/myservlet');

请求转发

  • 请求转发是指将请求再转发到另一资源(一般为JSPServlet)。
  • 此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变
  • 请求转发使用RequestDispatcher接口中的forward()方法来实现。
  • 该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应。
//代码
RequestDispatcher rd=request.getRequestDispatcher("/myservlet");
rd.forward(request,response);

重定向和请求转发的区别

  • forward()只能将请求转发给同一个Web应用中的组件,
    sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。

  • sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

  • forward()方法的调用者与被调用者之间共享相同的request对象和response对象;而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。

总结

  1. 动态网站开发技术有Servlet、JSP、PHP、ASP、ASP.NET和CGI等。
  2. Servlet是运行在服务器端的Java程序,内嵌HTML
    Servlet生命周期的三个方法分别是:init()、service()和destroy()。
  3. Servlet处理Get/Post请求时分别使用doGet()/doPost()方法进行处理。
  4. HttpServletRequest的getParameter(“参数名称”)获取表单、URL参数值。
  5. HttpServletResponse的getWriter()获取向客户端发送信息的输出流。
  6. HttpServletRequest的getHeader(“报头名称”)获取相关报头信息。
  7. 请求转发和重定向可以使浏览器获得另外一个URL所指向的资源。
  8. 重定向由HttpServletResponse接口的sendRedirect()方法实现,重定向不共享同一个请求对象。
  9. 请求转发通常由RequestDispatcher接口的forward()方法实现,转发前后共享同一个请求对象。

结语

如果你发现文章有什么问题,欢迎留言指正。
如果你觉得这篇文章还可以,别忘记点个赞加个关注再走哦。
如果你不嫌弃,还可以关注微信公众号———梦码城(持续更新中)。
梦码在这里感激不尽!!



所属网站分类: 技术文章 > 博客

作者:飞翔公园

链接:http://www.javaheidong.com/blog/article/219609/3a46fffb69ffbdec0f3d/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)