前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet技术2

Servlet技术2

作者头像
时间静止不是简史
发布2020-07-25 17:16:20
3860
发布2020-07-25 17:16:20
举报
文章被收录于专栏:Java探索之路

配置servlet

配置方式一:精确配置

代码语言:javascript
复制
 		<url-pattern>/别名</url-pattern>
 		
 		注意:
 			"/"是必须声明的,别名不可以为中文
 			此种配置方式可以配置多个

配置方式二:模糊配置

代码语言:javascript
复制
 		<url-pattern>*.后缀名</url-pattern>
 		注意:
 			*表示任意个数的任意字符
 			所有以指定的后缀名结尾的请求都会调用该servlet进行处理
 		作用:
 			进行模块化开发的划分等

配置方式三:拦截所有请求

代码语言:javascript
复制
 		<url-pattern>/*</url-pattern>
 		注意:
 			会拦截所有类型的请求,包括静态资源请求(css、js、图片等)和jsp请求。

配置方式四:

代码语言:javascript
复制
 		<url-pattern>/one/*</url-pattern>	
 		注意:
 			会拦截处理所有Servlet的别名以one开头的路径的请求

注意:

  • 一个Servlet可以配置多个url-pattern
  • 不同的Servlet不允许配置相同的url-pattern,如果配置了在服务器启动的时候就会报错。
  • 服务器启动的时候就会将部署的项目中的web.xml文件加载进内存。
  • 每次打开tomcat服务器后,服务器就会自动加载曾经部署过的项目(只要没在服务器中移除),会占用大量资源,拖慢启动时间,建议在用过以后移除。方法如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Servlet的生命周期:

从第一次被调用到服务器关闭

  • init方法 :servlet被初始化创建的时候调用(和service同时执行)
  • service方法:处理请求的时候
  • destory方法 :servlet被销毁的时候。
  • 当服务器关闭的时候销毁servlet,触发destroy方法的执行

注意:

我们可以在web.xml中配置load-on-startup来设置Servlet的加载时机为服务器启动。 生命周期就变为从服务器开启到服务器关闭(init在servlet加载时调用)

Get与Post方式区别:

doGet(HttpServletRequest req, HttpServletResponse resp)

特点:处理get方式的请求。

doPost(HttpServletRequest req, HttpServletResponse resp)

特点:处理post方式的请求

service(HttpServletRequest req, HttpServletResponse resp)

特点:无论是什么类型的请求方式,服务器都会优先执行service方法。

注意:

servlet中没有声明service方法,会根据请求方式调用对应的方法进行请求处理, 如果在servlet中没有声明对应的请求处理方法,则会报405错误。

特别注意

tomcat服务器其实只认识service方法,如果我们自己声明的servlet中没有覆写service方法,则会执行HttpServlet中的service方法,而HttpServlet中的service方法会根据请求方法调用对应的doXX()方法执行请求处理。

request对象之获取请求数据

请求数据:

代码语言:javascript
复制
	请求行:请求方式  请求URL 协议
		getMethod();		返回请求方式
		getRequestUrl();	返回请求url
		getRequestUri();	返回请求uri
		getQueryString();	返回get请求中的URL中的用户数据 注意:post请求中没有此方法。
		getSchema();		返回协议

请求头

代码语言:javascript
复制
getHeader(String name) 根据键名获取请求头信息
getHeaderNames()       返回存储了请求头键名的枚举集合。

注意:如果获取的请求头信息不存在返回null

请求实体

代码语言:javascript
复制
	getParameter(String name) 根据键名获取数据,一般来说是通过表单的name属性获取其值。

注意: 键名其实就是前端页面中的表单标签的name属性的值或者前端页面其他方式提交数据的键的名字。 如果请求中没有对应的请求数据,则返回null.

代码语言:javascript
复制
	getParameterValues(String name) 根据键名获取同名不同的值,返回数组

注意:如果没有对应的键名,则返回null

代码语言:javascript
复制
    getParameterNames()  返回实体数据中键名的枚举
	getRemoteAddr()		 获取客户端的IP地址
	getRemotePort()	 	 获取客户端端口号
    getLocalAddr()	 	 获取服务器端的ip
	getLocalPort()	 	 获取服务器端的端口号

response对象之处理响应:

设置响应行: 协议 状态码 状态消息

代码语言:javascript
复制
	resp.sendError(int status);

作用:可以自主的响应状态给浏览器

设置响应头

代码语言:javascript
复制
	addHeader(String name,String value) 添加响应头信息,同名数据不会覆盖
	setHeader(String nanme,String value) 设置响应头信息,会覆盖原有信息。如果没有此响应头则添加该信息。
设置响应实体(处理结果)
	resp.getWriter().write("实体内容");

注意: 实体内容可以分开进行响应。 一旦使用resp对象作出了请求响应,则意味着此次请求处理完毕。服务器在响应后会将此次请求相关的req对象和resp对象销毁。

请求乱码问题:服务器获取的请求数据乱码

post请求方式乱码:

代码语言:javascript
复制
		req.setCharacterEncoding("utf-8");

get请求方式乱码解决:

代码语言:javascript
复制
		方式一:每个数据都要单独的进行转换
			String uname=req.getParameter("uname");
			String uname2=new String(uname.getBytes("iso-8859-1"), "utf-8");
		方式二:
			req.setCharacterEncoding("utf-8");	
			在tomcat的server.xml文件中的Connector标签中增加属性:  useBodyEncodingForURI="true"			

响应乱码问题:浏览器中显示的服务器响应数据乱码

代码语言:javascript
复制
		resp.setContentType("text/html;charset=utf-8");

到此为止:service代码编写流程:

设置请求编码格式 设置响应编码格式 获取请求信息 处理请求信息 响应处理结果(三种方式不一定都需要) ------直接响应 ------请求转发 ------重定向

session学习:

代码语言:javascript
复制
	问题:
		用户不同的请求在处理的时候需要使用其他请求中的数据该怎么办?
	解决:
		session技术
	使用:
		创建session对象
		HttpSession session =req.getSession();
	    存储数据到session中
		session.setAttribute(String name, Object value);
		获取session对象
	    HttpSession session =req.getSession();
	    获取session中的数据
		session.getAttribute(String uname);注意:返回的object类型,需要强制转换
	    删除session中的数据
		session.removeAttribute(String uname);注意:如果有数据则删除,没有则什么都不做。

session创建过程:

1、 浏览器发起请求到A servlet,在A Servlet中使用req.getSession()获取Session对象,如果此次请求中没有SessionID,则创建一个新的Session对象,如果有SessionID则将其对应的Session对象返回(前提是该session对象没有到期),如果session对象到期销毁了,就算有sessionID也会重新创建一个Session。 2、 校验session是否失效,存储数据到session对象中或者获取session中的数据或者删除session中的数据

特点:

session解决了同一个用户不同请求的数据共享问题。 session的作用域:浏览器不关闭,session不失效,则同一用户的任意请求获取的都是同一个session中的对象

session的设置:

session默认有效时间为30分钟,如果需要修改可以在tomcat下的web.xml中进行配置

注意:

此种配置方式是所有的tomcat下的项目默认为30分钟,也可以在代码中使用

代码语言:javascript
复制
session.setMaxInactiveInterval(int seconds);//设置session的有效时间,参数为整数类型的秒
session.invalidate();//强制销毁session

ServletContext对象:

作用:

解决了不同用户之间的数据共享问题

使用:

代码语言:javascript
复制
		创建ServletContext对象
 				ServletContext sc1 = this.getServletContext();
				ServletContext sc2 =this.getServletConfig().getServletContext();
				ServletContext sc3=req.getSession().getServletContext();
		存储用户共享数据
			sc.setAttribute(String name,Object value);
		获取用户共享数据
			sc.getAttribute(String name);
		删除共享数据
			sc.removeAttribute(String name);
		获取web.xml中的全局配置属性,作用:将部分动作和源文件进行解耦,我们只需要在xml配置文件中进行相关配置就会改变代码的执行效果。
			sc.getInitParameter(String name);注意返回的是String类型数据
			
		获取webRoot下的资源流对象
			sc.getResourceAsStream(String path);
		注意:
			path为相对路径,写从webRoot开始查找资源的路径即可。
		获取webRoot下的资源绝对路径
	
		sc.getRealPath(String path);
		注意:
			path为相对路径,写从webRoot开始查找资源的路径即可。

特点:

服务器创建;所有用户共享

生命周期:

服务器开启到服务器关闭

ps:

1、通过web.xml配置全局属性(每个servlet都能使用)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、通过ServletConfig对象配置局部属性(专属每个servlet)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置servlet
    • 配置方式一:精确配置
      • 配置方式二:模糊配置
        • 配置方式三:拦截所有请求
          • 配置方式四:
            • 注意:
        • Servlet的生命周期:
          • 注意:
          • Get与Post方式区别:
            • doGet(HttpServletRequest req, HttpServletResponse resp)
              • doPost(HttpServletRequest req, HttpServletResponse resp)
                • service(HttpServletRequest req, HttpServletResponse resp)
                  • 注意:
                    • 特别注意
                    • request对象之获取请求数据
                      • 请求数据:
                        • 请求头
                          • 请求实体
                          • response对象之处理响应:
                            • 设置响应行: 协议 状态码 状态消息
                              • 设置响应头
                              • 请求乱码问题:服务器获取的请求数据乱码
                                • post请求方式乱码:
                                  • get请求方式乱码解决:
                                    • 响应乱码问题:浏览器中显示的服务器响应数据乱码
                                      • 到此为止:service代码编写流程:
                                      • session学习:
                                        • session创建过程:
                                          • 特点:
                                            • session的设置:
                                              • 注意:
                                          • ServletContext对象:
                                            • 作用:
                                              • 使用:
                                                • 特点:
                                                  • 生命周期:
                                                  • ps:
                                                  领券
                                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档