DRP之旅(1)——Servlet初探

本文介绍Servlet的基本概念,包括其在服务器端的应用、生命周期及其核心接口。通过一个简单的登录示例,详细展示了如何创建、配置及部署Servlet,并解析了请求处理和服务调用流程。


【什么是Servlet】


  Servlet全称Java Servlet,未有中文译文。是用Java编写的服务器端程序,用来完成B/S架构下,客户端请求的响应的处理是跨平台的,通常以多线程方式运行。Servlet API为Servlet提供了统一的编程接口。Servlet一般在容器中运行,Servlet的生命周期由容器管理。常见的Servlet容器Tomcat、Resin、Jetty。本文主要使用的是tomcat服务器来





  Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口.在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的声明周期:

  • init方法,负责初始化Servlet对象
  • service方法,负责相应客户的请求,当请求一个Servlet首先到达该方法,该方法再分发到相应的处理方法
  • destory方法,当Servlet对象退出声明周期时,负责释放占有的资源




【第一个servlet程序】


  建立FirstSerlvet并继承HttpServlet,覆盖doGet或doPost方法。将建立好的FirstServlet程序编译后,拷贝到web application中的classes目录中。在web.xml配置文件中进行配置。

HttpServlet主要方法

请求处理方法:(分别对应http协议的7种请求)

1、doGet        响应Get请求,常用

2、doPost        响应Post请求,常用

3、doPut        用于http1.1协议

4、doDelete        用于http1.1协议

5、doHead          仅响应Get请求的头部

6、doOptions        用于http1.1协议

7、doTrace          用于http1.1协议


web目录结构:

-tomcat

--webapps

---test_servlet

----WEB-INF

-----classes

-----lib

-----web.xml

----login.html


代码展示:

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

<servlet>
	<servlet-name>MyServlet</servlet-name>
	<servlet-class>LoginServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>MyServlet</servlet-name>
	<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>

login.html

<html>
	<head>
		<title>登录</title>
	</head>
	<body>
		<!--
		<form action="http://127.0.0.1:8080/test_servlet/loginServlet">
		-->
		<!--
		<form action="loginServlet">
		-->
		<!--
		<form action="exam/loginServlet" method="get">
		-->
		<form action="loginServlet" method="get">
			用户:<input type="text" name="username"><br>
			密码:<input type="password" name="password"><br>
			<input type="submit" value="登录">
		</form>
	</body>
</html>


LoginServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request,
                     HttpServletResponse response)
              throws ServletException,
                     IOException {
        String username = request.getParameter("username");   
        String password = request.getParameter("password");          	
        
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        
        response.setContentType("text/html;charset=GB18030");
        
        response.getWriter().println("Login Success!!!");
       
    }                 	
  
	public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
              throws ServletException,
                     IOException {
      doGet(request, response);               	
	}                     
}

第一步,单击登陆之后,web请求就到达tomcat了,在访问的时候用web项目的名称,根据URL截取项目名称test_servlet,这个文件夹下面都是sun定义的规范,自己就会去读取里面的内容分类的。下一步,根据URL截取servlet的访问名称:loginServlet,在web.xml文件中,通过servlet-name标签可以找到对应的classLoginServlet,在这个xml文件中,url-pattern是你给它取得一个虚拟路径。这样一个顺序:url-pattern到servlet-name,从servlet-name到servlet-class。

第二步,通过根据找到的class反射对LoginServlet进行实例化,之后会调用servlet中的service方法。通过req.Method方法调用到doPost或者doGet方法,将具体的实现委托给自己写的方法里面。实际上就是通过service进行分发。

第三步,解析取得参数值request.getParameter("username");,调用业务逻辑层。

第四步,response,将html字符串发送给web,进行渲染页面。





【采用UML分析调用流程】






【遇到的问题解决】

       

问题一:找不到jar包,如下图




import javax.servlet.*;这句话在导入jar包的时候,代码找不到。解决的方法是手动的在环境变量下配置classpath。





问题二:tomcat运行启动批处理文件的时候,一闪而过


       解决:通过java_home这个变量,拿到相关的类库。然后,如果这样配置,startup.bat还是一闪而过,可以右键点击startup.bat,编辑,在文本的最后敲上pause,保存后重新运行startup.bat,这时候窗口不会再一闪而过,而是停留在桌面上(调试成功,把pause去掉即可)。




【总结】


     4.1 经常画图可以帮助你理解代码之间的调用关系。

     4.2 复杂的事情一定有简单的入口,终于进入状态,加油







评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值