技术帮
 

Servlet初识

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

1472955908895017376.png说两句


JSP和Servlet从根本上是一种东西,因为我们知道jsp最终编译后生成一个java类,这个类就是继承自HttpServlet类的。

虽然一奶同胞,但程序员在开发的感觉完全不同。编写jsp更像是普通html文件,而Servlet则明显是java代码;访问jsp文件就好像访问项目中的静态文件,文件放在哪里对应的在浏览器中输入url即可,但Servlet根本无法直接访问,必须通过配置web.xml文件才可以访问。

1473058358717068189.png Servlet是一个Java类

之所以它如此与众不同,之所以它可以处理网页请求,因为它实现了Servlet接口。该接口是SUN公司定义的,该公司规定只要实现了Servlet接口就可以实现HTTP服务。

不过Servlet接口有点儿复杂,有好多方法需要实现,因此我们一般都是继承HttpServlet类,而不直接实现Servlet接口。代码如下:

public class MyServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 做一些有意义的事儿,譬如处理一下get到的数据

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 做一些有意义的事儿,譬如处理一下Post来的数据
		
	}

}

这段代码实现了一个最简单的Servlet类,其中有两个方法doGet和doPost,都是处理浏览器端的请求的,当浏览器端是通过get方式的请求,会调用doGet方法;doPost则是处理Post方式提交的请求。

不过,一般我们会写一个私有方法统一处理doGet和doPost方法,代码如下:

public class MyServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doAll(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doAll(request, response);
	}
	
	private void doAll(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 做一些有意义的事儿,譬如把doGet和doPost的工作都做了。
		PrintWriter out = response.getWriter();
		out.println("可把我累死了,把doGet和doPost的事儿都干了。");
		out.close();
	}
	
}

通过这样的手段,我们就获得了一个统一处理所有信息的方法。在这个例子中我们输出了一行文字在浏览器上。


 在web.xml配置Servlet

第一步我们创建了一个Servlet,但好歹动动脑子就能想到,这个Servlet不可能直接被浏览器访问,毕竟!没听说过哪个Java类可以被浏览器调用执行的!

如何做到MyServlet类可以被浏览器调用呢?这就需要再web.xml中配置该Servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	version="2.4"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<!-- servlet 定义  -->
	<servlet>
		<servlet-name>MyServlet</servlet-name>
		<servlet-class>com.jiisb.app.servlet.MyServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>MyServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	

</web-app>

这个web.xml文件定义了Servlet。

第2行:声明当前的servlet的版本为2.4,具体的Servlet版本在前文有说明。

第7行:定义了servlet

第8行:定义了该servlet的名字

第9行:定义了该servlet执行的servlet类的完整的包和类名

第12行:定义了该servlet的uri映射,符合该定义规则的uri都会被指向到该servlet类。

第13行:表示映射哪个servlet

第14行:描述了uri匹配规则,具体的servlet-map匹配规则在后文说明。