Servlet

本文详细介绍了Servlet的概念、生命周期及其在Web开发中的应用。包括如何通过继承HttpServlet处理GET和POST请求、配置虚拟路径、转发与重定向等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Servlet

  • Servlet(Server Applet)是Java Servlet 的简称,称为小服务程序或服务连接器,用Java编写的服务端程序,主要的功能在与交互式地浏览和修改数据,生成动态Web内容
  • 一个普通的类继承HttpServlet的类就是一个Servlet
  • 类中的 doGet() 以及 doPost() 分别用于处理网页的 get  和 pos t请求

 

在  web.xml  文件中可以为相应的 Servlet 配置对应的虚拟访问路径:

<web-app>


<!-- 给LoginServlet类配置一个对外访问的虚拟路径 -->

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.java.servlet.LoginServlet</servlet-class>    
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet<servlet-name>
    <url-pattern>/LoginSerlvet<url-pattern>
</servlet-mapping> 


<!--  这个配置的作用是可以通过指定的 url 来访问对应的Servlet -->

</web-app>

除了使用在 web.xml 文件中添加标签的方式来进行访问路径的设置,还可以通过直接在Java代码上添加注解的方式,如下:


@WebServlet("/LifeServlet")
public class aServlet extends HttpServlet {...}

 

 

通常在更换了发布的机器的时候,可能路径就会改变,为了适应这样的情况,可以在jsp页面中动态的获取项目的基本路径情况,如下:

在jsp页面中添加如下代码,在需要用到路径的地方添加basePath即可

<% 
    String basePath = request.getScheme() + ":" + "//" + request.getServerName() + ":" + request.getServerPort() + request.getServletContext().getContextPath();

%>

<!-- 在需要使用路径的时候 -->

<form action="<%=basePath%>LoginServlet" method="post">...</form>

 

Servlet的生命周期 :   三个阶段

  • 1、 初始化阶段调用init()方法  : 当Servlet第一次访问的时候会被调用
  • 2、 响应客户请求阶段调用service()方法 : 每次请求的时候都会被调用
  • 3、终止阶段调用destory()方法  : 当Servlet被销毁的时候调用(工程在tomcat中移除的时候)

 

jsp常用于动态的展示数据,而Servlet常用于处理逻辑的部分

 


 

请求与响应

  • 浏览器对服务器的一次访问称为一次请求,请求用HttpServletRequest对象来表示
  • 服务器给浏览器的一次反馈成文一次响应,响应用HttpServletResponse对象来表示

 

在浏览器提交了请求之后,可以通过以下方式来获取到请求中传向服务器的参数:(只要是表单提交的数据,在后台都是以str类型获取):

protected void doGet(HttpServletRequest request, HttpServletResponse response){
    //获取表单提交过来的数据
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");    
}

 

 


 

ServletContext 与 ServletConfig 

  • Java是一门面向对象的语言,万事万物接对象。整个JavaWeb工程也可以用一个对象来表示,这个对象就是ServletContext
  • 我们可以在web.xml文件中给摸一个Servlet配置一些配置信息,当服务器被其中的时候,这些配置信息就会被封装到某一个ServletConfig对象中去。因此,ServletConfig表示某一个Servlet对象的配置文件

 

在web项目中可以通过以下方式来获取到代表整个工程的ServletContext,因为获取到的对象是一个域对象,可以往其中添加内容,而且在同一个工程下的任意地方获取到的ServletContext是同一个(可能使用了单列模式)而且能够获取到在其他地方添加的内容:

//获取代表某一个JavaWeb工程的ServletContext对象
//并且往里面存放数据
ServletContext context = this.getServletContext();
context.setAttribute("username", "zhz");

//取出数据
Object result = context.getAttribute("username");

 


 

转发与重定向

 

  • 相同点: 都是用于页面的转换
  • 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
  • 转发是浏览器的url地址栏不会发生改变,重定向浏览器中的url地址会发生改变
  • 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
  • 转发的实现:  request.getRequestDispatcher("/sucess.jsp").forward(request, response);
  • 重定向的实现:   response.sendRedirect("/imooc/fali.jsp");

 

如果在页面转换的时候需要携带数据到指定的页面,有如下处理方法:

转发时携带数据: 通过给request对象添加数据

request.setAttribute("username", " bob" );
request.getRequestDispatcher("/demo.jsp").forward(request, response);

重定向写带数据: 通过向代表web项目的ServletContext中写入数据,在jsp中使用application(也是代表项目的)获取到数据:

//在Servlet代码中添加数据: 

//通过重定向携带数据


ServletContext sc = request.getServletContext();
sc.setAttribute("goods", "娃娃");
response.sendRedirect("/imooc/demo.jsp");



//在jsp中获取数据
<%
    String goods = (String) application.getAttribute("goods");
    out.print(goods);
%>

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值