Servlet
- Servlet(Server Applet)是Java Servlet的简称,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
- Servlet本质是一个实现了Servlet接口的实现类
Servlet的结构体系
新建第一个Servlet
- 自定义一个类 继承自HttpServelt
- 覆盖业务方法中具体的某个(doGet()/doPost() 分别代表了get提交/post提交(常用的))
- 需要在web工程核心配置文件–web.xml 去配置这个servlet
- 地址栏输入访问地址:
http://localhost:8080/项目名称/url-pattern名称
注意,如果不行的话,可能是没有设置上下文路径,及输入http://localhost:8080/url-pattern名称 即可
示例
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//向浏览器响应内容
//设置响应浏览器时候的中文乱码问题
response.setContentType("text/html;charset=utf-8");
//response.getWriter().write("hello,this is myFirst Servlet!");
response.getWriter().write("hello,我来了Servlet!");
/**
* 本地工作环境:GBK格式---->将内容输出浏览器总(UTF-8:一个中文对应3个字节)
*
*/
}
}
结果
Servlet的生命周期
- 对象的创建(单例):默认LifeServlet类对象的创建–是在访问的时候创建这个对象—服务器完成的!
- init(ServletConfig config):初始化 只初始化一次
- service(HttpServletRequest request,HttpServletResponse resposne) :服务方法
- destroy():销毁 服务器关闭的,servlet销毁了!
正常关闭 (在本地启动的:shutdown.bat eclipse工具中:点击tomcat服务器启动的红色运行组状态)
Servlet的执行流程
- 用户输入请求地址 :http://localhost:8080/web application/url-pattern
- tomcat服务器就会解析用户请求的地址
2.1解析url-pattern地址—在整个web.xml 是否存在这个路径
2.2进入servlet基本配置(servlet-name–先找到这个名字,servlet-class 当前servlet的全限定名称 包名.类名)
2.3通过全限定名称:反射的方式创建该类的实例, 通过获取当前Servlet中doXXX()所在Method
2.4Method m = 字节码文件对象.getDeclaredMethod(“doGet”,HttpServletRequest.class,HttpServletResponse.class) ;
2.5m.inovke(实例,request,response) ; - 将信息进行展示–向浏览器输出内容----
Servlet获取前端页面的数据
例如,登录是获取前端输入的用户名和密码
//如何获取前台页面中的参数数据
//表单中必须指定name属性----属性值="xxx"
//public String getParameter(String name) 通用方法
request.setCharacterEncoding("utf-8"); //解决post提交中文乱码
//String getParameter(String name):获取单个参数信息
// //用户名
String username = request.getParameter("username") ;
//密码
String password = request.getParameter("password") ;
//输出
System.out.println(username+"----"+password);
//通过用户名和密码查询用户----判断用户是存在!
前端界面
ServletContext的作用
获取上下文路径
//public ServletContext getServletContext() :获取全局对象
ServletContext context = this.getServletContext() ;
String path = context.getContextPath() ;
作为域对象去使用
给当前域对象中设置属性以及绑定的属性值
ServletContext servletContext = this.getServletContext() ;
//public void setAttribute(String name, Object object):
//给当前域对象中设置属性以及绑定的属性值
servletContext.setAttribute("name", "张三");
System.out.println("数据已经存储到域对象中了!");
从ServletContext域对象中获取数据
//获取全局对象
ServletContext context = this.getServletContext() ;
//public Object getAttribute(String name)
//通过域对象中设置的属性名称获取绑定的内容
String s = (String) context.getAttribute("name") ;
System.out.println("内容是:"+s);
System.out.println("获取数据成功!");
请求转发
//获取servletContext对象
/*ServletContext servletContext = this.getServletContext() ;
// public RequestDispatcher getRequestDispatcher(String path)
//获取请求转发(分发)对象
RequestDispatcher rd = servletContext.getRequestDispatcher("/adv.html") ;
//public RequestDispatcher getRequestDispatcher(String path)
//从后台servlet将请求转发到工程资源路径下
rd.forward(request, response);
System.out.println("请求转发成功");*/
//简写方式
//request---->域对象 HttpServletRequest
request.setAttribute("name","lisi");
request.getRequestDispatcher("/hello.jsp").forward(request, response);
四个域对象
- PageContext----page域-----在当前jsp页面中有效
- HttpServletRequest----request域-----在一次请求中有效(请求转发的时候会携带数据)
- HttpSession----session域-----在一次会话(用户(客户端:浏览器)–服务器端)中有效
- ServletContext----全局对象-----整个web工程 (web application)
Servlet获取相关的Servlet的配置信息(了解)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletConfig
//HttpServlet的父类--->getServletConfig()---->ServletConfig
ServletConfig servletConfig = this.getServletConfig() ;
//配置对象---servlet配置信息
//获取servlet名称
String name = servletConfig.getServletName() ;
System.out.println(name);
//获取全局对象: ServletContext:
ServletContext context = servletConfig.getServletContext() ;
String path = context.getContextPath() ;//获取web工程的上下文路径
System.out.println(path);
//获取servlet中的配置参数
//init-param
String value = servletConfig.getInitParameter("path") ;
System.out.println(value);
//..IO流读写操作:value---->D//a.txt 内容复制到当前项目下
}