JSP学习笔记(三)--------Servlet相关及Servlet路径跳转

JSP学习笔记(三)

一、什么是Servlet

先有JSP还是先有Servlet?我可以很负责任的告诉大家现有Servlet。没错,JSP的前身就是Servlet。

Servlet是在服务器上运行的小程序。一个Servlet就是一个Java、类,并且通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。


二、Tomcat容器等级

Tomcate的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。


三、Servlet生命周期

1、初始化阶段,调用init()方法。

2、响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法。

3、销毁阶段(终止阶段),调用destroy()方法。

注意:在Servlet的整个生命周期内,init()方法只被调用一次。


四、在下列时刻Servlet容器装载Servlet

1、Servler容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码:

<loadon-startup>1</loadon-startup>,数字越小表示级别越高。

2、在Servlet容器启动后,客户首次向Servlet发送请求。

3、在Servlet类文件被更新后,重新装载Servlet。


五、Servlet获取九大内置对象

Servlet与九大内置对象

JPS对象

怎样获得

out

resp.getWriter

request

service方法中的req参数

response

service方法中的resp参数

session

req.getSession()函数

application

getServletContext()函数

exception

Throwable

page

this

pageContext

pageContext

config

getServletConfig函数

 

六、Servlet与表单

通过表单的post或get方式,提交到action指向的servlet,然后再servlet中使用request.getParameter(参数)来获取表单传递过来的值,当表单中有复选框等多个值的情况,使用request.getParameterValues(参数)来获取复选框按钮的值。

 

七、Servlet中service()方法

在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看API时我们会发现Servlet接口,GenericSevlet抽象类 以及HttpServlet类中都有service方法,那么为什么我们继承HttpSevlet类时不要重写service 而要重写doGet doPost呢?service的作用是什么捏?

正如上文中所说的,Servlet中,service方法是一直存在的,因为最高层的接口Servlet(像HttpServlet等具体的servlet都是直接或者间接实现了这个接口)里面就有这个方法,所以不管是怎样的servlet类,都有service方法,没有service就不能称为一个Servlet了。
而对于service方法,一般来说这个方法是不需要重写的,因为在HttpServlet中已经有了很好的实现,它会根据请求的方式,调用doGet,doPos以及其他的doXXXt方法,也就是说service是用来转向的,所以我们一般写一个servlet,只需要重写doGet或者doPost就可以了。如果重写了service方法,那么servlet容器就会把请求交给这个方法来处理,倘若你重写的service方法没有调用doXXX,即使你在Servlet中又重写了其他doGet doPost等也是不会被调用的,因为Servlet的service被自动调用(就像init destory一样),所以如果你由于某种需要,需要重写service方法,并且更具不同的method调用doPost doGet等时,就要在末尾加上一句super.service(),这样就可以解决问题了。

通过API可以看到在HttpServlet类中的两个service方法:service(ServletRequest, ServletResponse)方法是重写的其父类GenericServlet类的方法,这个方法是公共的(public),其作用是接受客户端的请求并将其传递给service(HttpServletRequest, HttpServletResponse)方法;service(HttpServletRequest, HttpServletResponse)方法是HttpServlet类定义的方法,是受保护的(protected),主要作用是接受标准的Http请求(HttpServletRequest),并根据请求方式不同分发到不同的doXXX(HttpServletRequest, HttpServletResponse)方法。 这就是HttpServlet有两个service方法的原因了。一般情况下我们的Servlet只需重写受保护的service方法就够了。


八、Servlet路径跳转

1、绝对路径:放之四海而皆准的路径

2、相对路径:相对当前资源的路径

在超链接的跳转路径中,/servlet/HelloServlet这样写的话是错误的,第一个/代表的是服务器的根目录应该为<ahref="servlet/HelloServlet">访问HelloServlet</a>否则页面会返回404状态码。表单中action的URL地址写法,与超链接方式完全相同。

而在web.xml中的<url-pattern>/servlet/HelloServlet</url-pattern>必须以/开头,这里的/表示的是当前项目的根目录。如下:

<servlet-mapping>

<servlet-name> HelloServlet</servlet-name>

<url-pattern>/servlet/HelloServlet</url-pattern>

</servlet-mapping>

在Servlet跳转到页面是,有两种方法,一种是请求重定向,还有一种是请求转发

a、如请求重定向跳转到test.jsp(在WebRoot目录下)可以写成如下形式:

response.sendRedirect(request.getContextPath()+"/test.jsp");

其中request.getContextPath()是获得上下文对象

b、如服务器内部跳转(请求转发)可以写成如下形式:

request.getRequestDispatcher("../test.jsp").forward(request,response);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wal1314520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值