• 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>
热点新闻