Servlet快速入门

一. Servlet由来

Servlet示意图 2.Servlet快速入门 - 图1 可以查阅JavaEE手册(帮助文档)阅读Servlet规范。 2.Servlet快速入门 - 图2 1). 什么是servlet? 处理请求和响应的java程序。

2). 怎么创建servlet? 继承HttpServlet类,在web.xml中配置或者使用注解配置

二. Servlet开发的步骤

1、创建一个类,继承HttpServlet 类

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;

@WebServlet(name = “FirstServlet” , urlPatterns = {“/first”}) public class FirstServlet extends HttpServlet {

  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. System.out.println("doPost()");
  3. }
  4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5. System.out.println("doGet()");
  6. }

}

2、启动服务器,测试

地址栏:http://localhost:8888/javaee/first

三. Servlet的生命周期

3.1 构造方法,实例化 3.2 init(ServletConfig)方法 或 init()方法 3.3 提供服务 doXXX方法 3.4 销毁 destroy方法

四. 获取请求数据

若创建的jsp页面编码集不是utf-8,可以修改jsp页面的模版: 2.Servlet快速入门 - 图3

1.创建注册页面regist.jsp

<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

用户名:
爱 好: 足球 篮球

2. 获得请求参数

发送请求,要接收请求参数,对于提交上了的用户名,爱好,我们必须获取后,才能处理,那么请求参数如何获取? 使用服务器给我提供的一个对象Request对象: 2.Servlet快速入门 - 图4

2.1 获取参数的方法

String getParameter)(String name) 根据name 获取对应的值
Map getParameterMap)() 参数名作为key,参数值作为value,封装到map中。
String[] getParameterValues)(String name) 获取name相同的所有value 例如复选框。

2.2 获取注册页面的值

@WebServlet(name = “FirstServlet” , urlPatterns = {“/first”}) public class FirstServlet extends HttpServlet {

  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. System.out.println("FirstServlet doPost()");
  3. this.doGet(request, response);
  4. }
  5. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  6. System.out.println("FirstServlet doGet()");
  7. System.out.println("getParameter:"+request.getParameter("username"));
  8. System.out.println("===============");
  9. String[] values = request.getParameterValues("hobby");
  10. for (String string : values) {
  11. System.out.println("getParameterValues:"+string);
  12. }
  13. System.out.println("===============");
  14. Map<String, String[]> map = request.getParameterMap();
  15. for(String key : map.keySet()){
  16. for (String value : map.get(key)) {
  17. System.out.println("getParameterMap:"+value);
  18. }
  19. }
  20. }

}

2.3 效果

FirstServlet doGet()

getParameter:李四

getParameterValues:football

getParameterValues:basketball

getParameterMap:李四 getParameterMap:football getParameterMap:basketball

五. 发送响应

发送响应的对象Response对象: 2.Servlet快速入门 - 图5

1.使用方法

这个Response对象,用于向浏览器发出响应,要使用的方法为: java.io.PrintWriter getWriter () 返回可将字符文本发送到客户端的 PrintWriter 对象 这个PrintWriter对象,用于写入字符串,要使用的方法为: void write(String s)

2.发送请求

@WebServlet(name = “FirstServlet” , urlPatterns = {“/first”}) public class FirstServlet extends HttpServlet {

  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. System.out.println("FirstServlet doPost()");
  3. this.doGet(request, response);
  4. }
  5. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  6. System.out.println("FirstServlet doGet()");
  7. System.out.println("getParameter:"+request.getParameter("username"));
  8. System.out.println("===============");
  9. String[] values = request.getParameterValues("hobby");
  10. for (String string : values) {
  11. System.out.println("getParameterValues:"+string);
  12. }
  13. System.out.println("===============");
  14. Map<String, String[]> map = request.getParameterMap();
  15. for(String key : map.keySet()){
  16. for (String value : map.get(key)) {
  17. System.out.println("getParameterMap:"+value);
  18. }
  19. }
  20. System.out.println("========发出响应===========");
  21. response.getWriter().write("yes OK!");
  22. }

}

3.效果

2.Servlet快速入门 - 图6

六.跳转组件

1.响应重定向

HttpServletResponse中定义了响应重定向的方法 sendRedirect(String path) 响应重定向是向目标资源重新发送请求,生成新的请求,所以当前请求中的数据不会再传到目标资源中

2.请求转发

HttpServletResquest中定义了请求转发的方法 先使用请求中getRequestDispatcher(String path)方法获得请求转发器对象RequestDispatcher 然后调用RequestDispatcher的forward(request,response)方法进行跳转

3.响应重定向和请求转发的区别

3.1 请求转发前后转发的请求是相同的;响应重定向是重新发送请求; 3.2 请求转发可以传递值,但是重定向不可以; 3.3 请求转发之后地址栏中显示的地址任然是请求页面的地址,但是重定向地址栏发生变化,会变成目标页面的地址; 3.4 请求转发只能转发至本项目内的页面,重定向可以至任何页面;

七.总结

1.什么是Servlet?

1.1 Servlet是一个运行在服务器端的组件。 1.2 Servlet是一个Java类,该类遵守规范,继承HttpServlet,覆盖其中的方法。

2.Servlet的作用

2.1 在JSP出现之前,Servlet用来生成动态页面 2.2 在JSP出现之后,JSP用来生成动态页面,Servlet主要用来接收请求并处理,根据处理结果,跳转到不同页面。

3.Servlet的访问

3.1 使用地址栏输入URL访问 get方式 3.2 通过超级链接访问 get方式 first?username=李四&password=111 3.2 使用表单提交访问 method指定是get就是get方式,指定是post就是post方式,不指定默认是get方式 使用submit按钮提交 使用JS提交

4.Servlet获得请求参数

使用请求中的方法获得请求参数 getParameter getParameterValues

5.Servlet跳转

5.1 响应重定向 HttpResponse接口中的方法 response.sendRedirect(String path) 5.2 请求转发 RequestDispatcher接口中的方法 request.getRequestDispatcher(String path).forward(request,response); 5.3 响应重定向和请求转发的区别

6.Servlet的生命周期

Servlet是单实例,多线程的 调用顺序 构造方法 init方法 doXXX方法 destroy方法