当前位置: 移动互联网学院 > Android开发 > JavaWeb之Servlet入门
JavaWeb之Servlet入门 时间:2017-05-26     来源:移动互联网学院

Servlet基础

使用Eclipse编写Servlet

Servlet生命周期

Servlet获取九大内置对象

Servlet请求转发

EL表达式

jsp页面访问Servlet方式

什么是Servlet

概念

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

Tomcat容器等级

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

使用Eclipse编写Servlet

继承HttpServlet

HttpServlet实现了http协议的Servlet

重写HttpServlet中的doGet()和doPost()两个方法

doGet(当浏览器用GET方式访问时,该方法被调用) 

doPost(当浏览器用POST方式访问时,该方法被调用) 

package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //继承于HttpServlet public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("处理Get请求"); PrintWriter out = response.getWriter(); out.println("<strong>HelloServlet</strong>"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 

创建index.jsp文件

<body> <h1>第一个 Servlet小程序</h1> <a href="servlet/HelloServlet">Get方式请求HelloServlet</a> </body> 

注意:需要把jsp文件编码改为UTF-8

在web.xml中注册Servlet

<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <!-- 该标签内容必须和上面的<servlet-name>标签内容一致 --> <servlet-name>HelloServlet</servlet-name> <!-- 用户创建的HelloServlet类的路径 --> <url-pattern>/servlet/HelloServlet</url-pattern> </servlet-mapping> 

注意:如果工程中没有web.xml文件,需要在新建工程的时候不要点“finish”,而是点“next”,勾选上“Gemerate web.xml deployment descriptor”

Servlet生命周期

Servlet生命周期

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

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

终止阶段,调用destroy()方法

在以下情况时Servlet容器装载Servlet对象

Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的之间添加如下代码:<loadon-startup>1</loadon-startup>数字越小表示优先级别越高。 

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

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

注意

Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet整个生命周期内,init()方法只被调用一次。

Servlet请求转发

转发原理描述 

游览器发出对组件1(Servlet1)的请求,请求先到的是Web服务器,Web服务器会创建请求对象request用于封装客户端请求信息;并创建响应对象response,响应对象主要是封装对游览器的输出流。 

Web服务器创建组件1对象(如果不存在组件1对象),然后调用组件1的doGet或doPost方法,方法中的两个形参会接收到上一步的两个对象request与response。 

组件1的doGet或doPost方法不响应游览器,而是把方法形参接收到的request和response对象作为实参,调用组件2的doGet或doPost方法,这样组件2的doGet或doPost方法中的形参就会接收到与组件1中doGet或doPost相同的两个对象,即request与response。 

组件2使用doGet或doPost方法中的response对游览器做出响应。 

响应后,request和response对象会被销毁。

请求Servlet传参

请求地址和信息

//localhost:8080/JavaServlet03/test.do?name=ivy&psw=111 

问号之前为请求服务器地址 

问号之后为请求的信息,封装在request对象中

Servlet的对请求信息的处理方式

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //获取req对象中的请求内容 String name = (String) req.getParameter("name"); String psw = (String) req.getParameter("psw"); } 

EL表达式

TestServlet

public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub req.setAttribute("name", "Ivy"); req.setAttribute("psw", "123456"); //转发到jsp req.getRequestDispatcher("/WEB-INF/test.jsp").forward(req, resp); } } 

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "//www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Hello Test.jsp</h1> 名字:${name}<br> 密码:${psw} </body> </html> 

jsp页面访问Servlet方式(四种)

表单提交

<form action="user.do" method="post"> 用户:<input type="text" name="name"><br> 密码:<input type="password" name="psw"><br> <input type="submit" value="提交"><br> </form> 

超链接访问

<a href="user.do?name=ivy&psw=123">游客登录</a> 

伪超链接+js访问

用户:<input type="text" name="name" id="name"><br> 密码:<input type="password" name="psw" id="psw"><br> <a href="javascript:login();">伪链接登录</a> <script type="text/javascript"> function login(){ var name = document.getElementById("name").value; var psw = document.getElementById("psw").value; window.location.href="user.do?name="+name+"&psw="+psw; //提交 } </script> 

点击事件+js访问

<button onclick="login()">按钮登录</button>