- servlet简介
- servlet+applet :服务器端小程序,
- 一个特殊的Java类
- 通过“请求-响应”来访问这个程序
- 与HTTP紧密联系,通过servler几乎可以处理HTTP所有问题
- Tomcat容器等级
Tomcat容器分为四个等级
Container
Engine
Host
Servlet
一个Context对于一个web工程 - 实现一个Servlet
- 继承HttpServlet类
- 重写doGet()或doPost() 取决于用户提交请求的方式
- 在web.xml中注册Servlet
1 <servlet> 2 <servlet-name>ServletName</servlet-name> 3 <servlet-class>Servlet完全限定名</servlet-class> 4 </servlet> 5 <servlet-mapping> 6 <servlet-name>ServletName</servlet-name> 7 <url-pattern>/.../...</url-pattern> 8 </servlet-mapping>
- Servlet处理流程
- Servlet生命周期
- 初始化,init(),整个生命周期中,init()方法只会执行一次
- 响应客户端请求,调用service(),由service()根据请求方式选择执行doGet()还是doPost()
- 终止阶段,调用destory()
- Tomcat装载Servlet的三种情况
- web.xml的<servlet>中加入<load-on-startup>1</load-on-startup>标签,数值越小 优先级越高
- 客户端首次请求Servlet
Servlet的构造函数——>init()——>service()——>doGet()或doPost(),关闭服务器才会执行destory() - Servlet类被修改以后,重新装载Servlet
- Servlet与JSP九大内置对象对应关系
- 一个注册页面,Servlet获取表单信息
- 注册页面register.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme() + "://" 5 + request.getServerName() + ":" + request.getServerPort() 6 + path + "/"; 7 %> 8 9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 10 <html> 11 <head> 12 <base href="<%=basePath%>"> 13 14 <title>My JSP 'index.jsp' starting page</title> 15 <meta http-equiv="pragma" content="no-cache"> 16 <meta http-equiv="cache-control" content="no-cache"> 17 <meta http-equiv="expires" content="0"> 18 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 19 <meta http-equiv="description" content="This is my page"> 20 <!-- 21 <link rel="stylesheet" type="text/css" href="styles.css"> 22 --> 23 <style type="text/css"> 24 .label { 25 width: 20% 26 } 27 28 .controler { 29 width: 80% 30 } 31 </style> 32 <script type="text/javascript" src="js/Calendar3.js"></script> 33 </head> 34 35 <body> 36 <form name="regform" action="servlet/LoginServlet" method="post"> 37 <table border="1" width="800"> 38 <tr> 39 <td class="lable">用户名</td> 40 <td class="controler"><input type="text" name="username"></td> 41 </tr> 42 43 <tr> 44 <td class="lable">密码</td> 45 <td class="controler"><input type="password" name="mypassword"></td> 46 </tr> 47 48 <tr> 49 <td class="lable">确认密码</td> 50 <td class="controler"><input type="password"name="confirmpassward"></td> 51 </tr> 52 53 <tr> 54 <td class="lable">性别</td> 55 <td class="controler"> 56 <input type="radio" name="gender"value="Male" checked="checked">男 57 <input type="radio"name="gender" value="Female">女 58 </td> 59 </tr> 60 61 <tr> 62 <td class="label">出生日期:</td> 63 <td class="controler"><input name="birthday" type="text" 64 id="control_date" size="10" maxlength="10" 65 onclick="new Calendar().show(this);" readonly="readonly" /></td> 66 </tr> 67 68 <tr> 69 <td class="lable">电子邮箱</td> 70 <td class="controler"><input type="text" name="email"></td> 71 </tr> 72 73 <tr> 74 <td class="lable">爱好</td> 75 <td class="controler"> 76 <input type="checkbox" name="favorite"value="nba">NBA 77 <input type="checkbox" name="favorite"value="music">音乐 78 <input type="checkbox" name="favorite"value="movie">电影 79 </td> 80 </tr> 81 82 </table> 83 <input type="submit" value="注册" /> <input type="reset" 84 value="取消"> 85 </form> 86 87 </body> 88 </html>
action指定提交给哪个Servlet处理 - 用户信息类UserInfo和LoginServlet
UserInfo类中封装用户的属性,并生成set get方法
1 private String username;//用户名 2 private String password;//密码 3 private String gender;//性别 4 private Date birthdar;//出生日期 5 private String email;//邮箱 6 private String[] favorates;//爱好
1 package servlet; 2 3 import java.io.IOException; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import entity.UserInfo; 13 14 public class LoginServlet extends HttpServlet { 15 16 /** 17 * 18 */ 19 private static final long serialVersionUID = 1L; 20 21 /** 22 * Constructor of the object. 23 */ 24 public LoginServlet() { 25 super(); 26 } 27 28 /** 29 * Destruction of the servlet. <br> 30 */ 31 public void destroy() { 32 super.destroy(); // Just puts "destroy" string in log 33 // Put your code here 34 } 35 36 /** 37 * The doGet method of the servlet. <br> 38 * 39 * This method is called when a form has its tag value method equals to get. 40 * 41 * @param request 42 * the request send by the client to the server 43 * @param response 44 * the response send by the server to the client 45 * @throws ServletException 46 * if an error occurred 47 * @throws IOException 48 * if an error occurred 49 */ 50 public void doGet(HttpServletRequest request, HttpServletResponse response) 51 throws ServletException, IOException { 52 53 doPost(request, response); 54 } 55 56 /** 57 * The doPost method of the servlet. <br> 58 * 59 * This method is called when a form has its tag value method equals to 60 * post. 61 * 62 * @param request 63 * the request send by the client to the server 64 * @param response 65 * the response send by the server to the client 66 * @throws ServletException 67 * if an error occurred 68 * @throws IOException 69 * if an error occurred 70 */ 71 public void doPost(HttpServletRequest request, HttpServletResponse response) 72 throws ServletException, IOException { 73 UserInfo user = new UserInfo(); 74 75 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 76 user.setUsername(request.getParameter("username")); 77 user.setPassword(request.getParameter("mypassword")); 78 try { 79 user.setBirthdar(sdf.parse(request.getParameter("birthday"))); 80 } catch (ParseException e) { 81 e.printStackTrace(); 82 } 83 user.setGender(request.getParameter("gender")); 84 user.setEmail(request.getParameter("email")); 85 86 //获取多个复选按钮的值getParameterValues() 87 user.setFavorates(request.getParameterValues("favorite")); 88 89 ///把注册成功的用户对象保存在session中session名为userinfo 90 request.getSession().setAttribute("userinfo", user); 91 92 //跳转到注册成功页面 93 request.getRequestDispatcher("../success.jsp").forward(request, 94 response); 95 96 } 97 98 /** 99 * Initialization of the servlet. <br> 100 * 101 * @throws ServletException 102 * if an error occurs 103 */ 104 public void init() throws ServletException { 105 // Put your code here 106 System.out.println("init执行了"); 107 } 108 109 }
<servlet> <servlet-name>LoginServlet</servlet-name> <display-name>This is the display name of my J2EE component</display-name> <description>This is the description of my J2EE component</description> <servlet-class>servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping>
- 注册成功页面
1 <%@page import="java.text.SimpleDateFormat"%> 2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme() + "://" 6 + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 11 <html> 12 <head> 13 <base href="<%=basePath%>"> 14 15 <title>My JSP 'success.jsp' starting page</title> 16 17 <meta http-equiv="pragma" content="no-cache"> 18 <meta http-equiv="cache-control" content="no-cache"> 19 <meta http-equiv="expires" content="0"> 20 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 21 <meta http-equiv="description" content="This is my page"> 22 <!-- 23 <link rel="stylesheet" type="text/css" href="styles.css"> 24 --> 25 26 </head> 27 28 <body> 29 <h1>用户信息</h1> 30 <hr> 31 <center> 32 <jsp:useBean id="userinfo" class="entity.UserInfo" scope="session" /> 33 <table width="600" cellpadding="0" cellspacing="0" border="1"> 34 <tr> 35 <td class="title">用户名:</td> 36 <td class="content"> 37 <jsp:getProperty name="userinfo"property="username" /> 38 </td> 39 </tr> 40 41 <tr> 42 <td class="title">密码:</td> 43 <td class="content"> 44 <jsp:getProperty name="userinfo"property="password" /> 45 </td> 46 </tr> 47 48 <tr> 49 <td class="title">性别:</td> 50 <td class="content"> 51 <jsp:getProperty name="userinfo"property="gender" /> 52 </td> 53 </tr> 54 55 <tr> 56 <td class="title">出生日期:</td> 57 <td class="content"> 58 59 <%SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); 60 String date = sdf.format(userinfo.getBirthdar()); %> 61 <%=date%> 62 </td> 63 </tr> 64 65 <tr> 66 <td class="title">E-mail:</td> 67 <td class="content"> 68 <jsp:getProperty name="userinfo"property="email" /> 69 </td> 70 </tr> 71 72 <tr> 73 <td class="title">爱好:</td> 74 <td class="content"> 75 <% 76 String[] favorites = userinfo.getFavorates(); 77 for (String f : favorites) { 78 %> 79 <%=f%> 80 <% 81 } 82 %> 83 </td> 84 </tr> 85 86 </table> 87 </center> 88 </body> 89 </html>
- 注册页面register.jsp
- Servlet路径跳转问题
绝对路径:放之四海而皆准的路径
相对路径:相对于当前资源的路径
“../”来表示上一级目录
“../../”表示上上级的目录,以此类推。
下级目录用“/..”表示
"./"代表目前所在的目录
以"/"开头:代表根目录。在web.xml的<url-pattern>/servlet/LoginServlet</url-pattern>必须以/开头,这里的/表示项目的更目录
根目录:最上一级目录,如双击D盘 就进入了D盘的根目录
内部跳转(请求转发) 和外部跳转(请求重定向)
-
- 内部跳转:服务器收到客户端请求后,将请求转发到另一个页面或servlet,这个时候跳转到的目标页面或者servlet可以获取到请求对象,也可以获取到请求中的属性和参数;浏览器的url地址栏不会改变;无法跳转到工程以外的jsp或servlet
实现方式: 1 request.getRequestDispatcher("XXX.jsp或者servlet").forward(request, response), - 外部跳转:第一次请求后,服务器端向客户端发送了一个指令,让客户端再次请求了一次服务器端,这个时候服务器第二次拿到的request对象已经不是第一次请求的request对象了,所以无法获取到第一次请求里的参数和属性;浏览器url地址栏会发生变化;可以跳转到工程以外的页面或servlet
实现方式: 1 response.sendRedirect("XXX.jsp或者servlet")
- 内部跳转:服务器收到客户端请求后,将请求转发到另一个页面或servlet,这个时候跳转到的目标页面或者servlet可以获取到请求对象,也可以获取到请求中的属性和参数;浏览器的url地址栏不会改变;无法跳转到工程以外的jsp或servlet
-
http请求的get方式和post方式区别