Servlet快速入门
一. Servlet由来
Servlet示意图 可以查阅JavaEE手册(帮助文档)阅读Servlet规范。 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 {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
}
2、启动服务器,测试
地址栏:http://localhost:8888/javaee/first
三. Servlet的生命周期
3.1 构造方法,实例化 3.2 init(ServletConfig)方法 或 init()方法 3.3 提供服务 doXXX方法 3.4 销毁 destroy方法
四. 获取请求数据
若创建的jsp页面编码集不是utf-8,可以修改jsp页面的模版:
1.创建注册页面regist.jsp
<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
2. 获得请求参数
发送请求,要接收请求参数,对于提交上了的用户名,爱好,我们必须获取后,才能处理,那么请求参数如何获取? 使用服务器给我提供的一个对象Request对象:
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 {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FirstServlet doPost()");
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FirstServlet doGet()");
System.out.println("getParameter:"+request.getParameter("username"));
System.out.println("===============");
String[] values = request.getParameterValues("hobby");
for (String string : values) {
System.out.println("getParameterValues:"+string);
}
System.out.println("===============");
Map<String, String[]> map = request.getParameterMap();
for(String key : map.keySet()){
for (String value : map.get(key)) {
System.out.println("getParameterMap:"+value);
}
}
}
2.3 效果
FirstServlet doGet()
getParameter:李四
getParameterValues:football
getParameterValues:basketball
getParameterMap:李四 getParameterMap:football getParameterMap:basketball
五. 发送响应
1.使用方法
这个Response对象,用于向浏览器发出响应,要使用的方法为: java.io.PrintWriter getWriter () 返回可将字符文本发送到客户端的 PrintWriter 对象 这个PrintWriter对象,用于写入字符串,要使用的方法为: void write(String s)
2.发送请求
@WebServlet(name = “FirstServlet” , urlPatterns = {“/first”}) public class FirstServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FirstServlet doPost()");
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FirstServlet doGet()");
System.out.println("getParameter:"+request.getParameter("username"));
System.out.println("===============");
String[] values = request.getParameterValues("hobby");
for (String string : values) {
System.out.println("getParameterValues:"+string);
}
System.out.println("===============");
Map<String, String[]> map = request.getParameterMap();
for(String key : map.keySet()){
for (String value : map.get(key)) {
System.out.println("getParameterMap:"+value);
}
}
System.out.println("========发出响应===========");
response.getWriter().write("yes OK!");
}
3.效果
六.跳转组件
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方法