servlet

11 篇文章 0 订阅
1 篇文章 0 订阅

servlet:是java Servlet的简称,称为小服务程序或服务连接器,用java编写的服务器程序,主要功能在于交互式地浏览的修改数据,生成动态web内容。狭义的servlet是指java语言实现的一个接口,广义的servlet是指任何实现了这个servlet接口的类,一般情况下,人们将servlet理解为后者,servlet运行于支持java的应用服务器中,从原理上讲,servlet可以响应任何类型的请求,但绝大多数情况下Servelt只是用来扩展基于HTTP协议的Web服务器,最早支持Servlet标准的是javaSoft的java Web Servlet,以后,一些其它的基于java的Web服务器开始支持标准的Servlet

简而言之:是一种请求响应的技术

servlet:生命周期

而Servlet的生命周期即阐述Servlet从产生到毁灭的整个过程在servlet产生到消亡的过程,有三个生命周期函数,初始化方法init(),处理客户请求的方法service(),终止方法destroy().

1.1 init():

​ 在一个Servlet的生命周期中,init方法只会被执行一次,之后无论用户执行多少次请求,都不会在调用该方法。关于init(方法的执行时机,有两种方式可选,一般的是在服务器启动后第一个用户请求该Servlet时调用,你也可以设置该servlet在服务器启动后自动执行。) — 使用场景:init()负责预加载一些数据,这些数据将用于该Servlet的整个生命周期中

1.2 Service():

​ Service方法

​ 当一个客户请求该Servlet时,实际的处理工作全部由service方法来完成,service方法用来处理客户端的请求,并生成格式化数据返回给客户端

1.3 destroy():

​ 该方法在整个生命周期中,也是只会被调用一次,在Servlet对象被被销毁时调用,在servlet中我们可以做一些释放资源等操作,执行destory方法之后servlet对象,会等待jvm虚拟机的垃圾回收机制择时回收 备注:当修改servlet中内容的时候,就会触发destory()方法

getServletConfig()

在servlet初始化时,容器传递进来一个ServletConfig对象并保存在servlet实例中,该对象允许访问两项内容:初始化参数和

ServletContext对象,前者通常由容器在文件中指定,

允许在运行时向sevrlet传递有关调度信息,比如说getServletConfig().getInitParameter(“debug”)后者为servlet提供有关容器的信息。

此方法可以让servlet在任何时候获得该对象及配置信息。

getServletContext()

一个servlet可以使用getServletContext()方法得到web应用的servletContext
即而使用getServletContext的一些方法来获得一些值
比如说getServletContext().getRealPath("/")来获得系统绝对路径
getServletContext().getResource(“WEB-INF/web.xml”)来获得xml文件的内容

getServletContext()与getServletConfig()的区别?

1: getServletContext()取得的是 配置的参数

getServletConfig()取得的是 配置的参数

2: getServletConfig:表示servlet的配置信息,一个servlet对象对应一个servletconfig对象

	getServletContext:表示servlet的全局配置信息,一个WebApplication只有一个ServletContext对象,该对象		 被所有Servlet共用 
java servletcontext和servletconfig作用的对象:

ServletConfig:表示servlet的配置信息,一个servlet对象对应一个servletconfig对象

ServletContext:表示servlet的全局配置信息,一个WebApplication只有一个ServletContext对象,该对象被所有Servlet共用

点击学习 ServletConfig、ServletContext_作用域对象https://www.cnblogs.com/aknife/p/10852092.html

servlet与JSP的关系

1.JSP执行之后的本质就是一个servlet

为什么既然有了JSP还要有Servlet呢?

答案:因为使用场景不同,JSP更多的偏重于页面的展示,而Servlet更多的是偏重于后台的处理程序

PS:HttpJspBase的父类是HttpServlet

2.JSP的执行效率/速度比Servlet慢

创建传参的方式:

从页面向后台传递参数:

非中文:String name=request.getParameter(String name ):

​ String password=request.getParameter(String password);

中文: 1.如果是以url传参的形式:例如<a href=<%=request.getContext()%>/user.do?name=“杨过”> </a>

​ 此时再UserServlet中接受中文会出现乱码?

​ 怎么修改呢:再tomcat(6.0)/conf/server.xml中大概67行连接端口的位置添加属性:URIEncoding=“utf-8”

​ PS: 在tomcat7.x和tomcat8.x开始对请求的url实现安全验证,所以在通过url传参的时候出现错误,

​ 错误信息:Invalid character found in the erquest target(目标请求无效),为什么会出现这样的错误呢,是 因为在tomcat7.x和8.x的conf/catalina.propertise中199行写到允许为: |{},其实Tomcat7.x/8.x这样做的目 的是为了增加安全性,但是如果用户是通过rul传递中文参数的话,不修改可能会出现错误,己变修改了也有 可能不好使,那么有没有更好的方法呢,其实是有的 ,就是通过form表单提交或者更改为tomcat9.x

​ 解决的方法:

​ 1.换成form表单提交,

​ 2.或者改用高版本的tomcat9.x

​ 3.或者使用低版本的tomcat6.x且更改在tomcat (6.0) /conf/server.xml中大概67行连接端口的位置添 加属性:URIEncoding=“utf-8”

​ 2.如果是以form表单提交中文的时候,也会在LoginServlet中出现乱码,那么怎么修改呢?

​ 1.首先将当前的form表单的method设置为:method=“post”

​ 2.在LoginServlet类中的service()方法中设定编码

request.setCharacterEncoding("utf-8");

responset.setCharacterEncoding("utf-8 ");			

小结:

1.URL:例如</a href=“url”>URL 传参,js…,但是如果本次传递的参数中有中文不建议使用

2.通过form表达传参:可以传递中文,也可以传递其他的例如英文字符串,日期

从后台传递数据给页面:

1.先准备2行的假数据

List\<Map\<String,Object>> list=new ArrayList\<Map\<String,Object>>();Map\<String,Object> map=new HashMap\<String,Object>();

​	map.put("sno","s001");

​	map.put("name","王大锤");

​	map.put("age","22");

​	list.add(map);

​	list.add(map2);

2.将数据存入到request对象中,且别名为list

request.setAttribute("list",list);

3.转向:将程序转向到查询展示页面

requst.getRequestDispatcher("/jsps/student/list_student.jsp").forward(request,response);

在JSP页面中获取路径的3种方法

1.<%=request.gatContextPath();%>

2.公告页面

​ 1)创建一个/jsps/commons/commons.jsp,且里面的内容为<%String path=request.getContextPath();%>

​ 2) 在需要用到的页面(login.jsp) 引入这个公共页面:<%@ include file="/jsps/commins/commins.jsp"%>

​ 3)将原理的方式1那种写法修改为:<%=path%>

3.公共页面+<base>标签的方式:

​ 1)将common.jap中的内容修改为:

<%String path=request.getContextPath();

StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

​	

​		%>

​ 2) 在需要用到的页面例如index.jsp中使用:<base href="<%=basePath%>"> 且是写在<head>标签中的

​ 3)将原来写的<%=request.getContextPath();%>或者<%=path%>删掉

提示:第三种方法看似是最人性化的,但是IE浏览器对<dase>标签支持的不是很友好,故此在开发商业的项目的时候谨慎使用

​ 第一种方法看似是最笨的,但是往往是最有效的,且用的也是比较多的

​ 第二种方法可以看出在编写大型项目的时候才使用的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值