servlet:
运行在服务器端的小程序 Servlet是一个接口,定义自己的servlet实现接口入门: 1、创建一个Myservlet 实现servlet接口 复写方法 2、在init(),service(),destroy()方法中添加输出语句 3、在web.xml中注册我们创建的servlet
<servlet>
<servlet-name>MyServlet</servlet-name> <servlet-class>com.xmcc.servlet.MyServlet</servlet-class> </servlet><servlet-mapping>
<servlet-name>MyServlet</servlet-name> <url-pattern>/myServlet</url-pattern> </servlet-mapping>servlet的生命周期:
init(), 第一次访问servlet的时候调用(初始化) service(),每一个访问都会调用,(处理请求和响应) destroy(),服务器关闭执行原理:
1、当服务器接收到客户端浏览器的请求后,会解析URL路径,获取到访问的Servlet的资源路径 2、拿到资源路径通过web.xml文件进行查找,是否有对应的url-pattern 3、如果有,则查找对应的servlet-class 获取全路径名 4、tomcat会将字节码文件加载进内容,并创建对象 5、调用方法 注意:通过web.xml方式配置servlet是web3.0版本以前 常用的方式 那么在3.0版本后,使用注解的方式 代替 配置文件servlet注解方式:
@WebServlet(value="/myServlet1",name = "MyServlet1")String name() default ""; 名字
String[] value() default {}; 访问路径String[] urlPatterns() default {}; 访问路径
int loadOnStartup() default -1; 启动时机WebInitParam[] initParams() default {}; 初始化参数
loadOnStartup:servlet初始化时机 默认是第一次访问servlet的时候初始化 这个时候loadOnStartup值为-1servlet重要的对象:
ServletConfig:servlet配置对象 1、获取取当前servlet的名字 2、获取当前servlet的初始化数据 3、获取servletContext对象 (域对象)ServletContext: 上下文对象(全局管理者,整个项目共享的对象) 每个web项目启动的时候,都会创建一个servletContext对象, servletContext会随着web的启动而创建 销毁则销毁1、数据共享
setAttribute() getAttribute() removeAttribute() 2、获取文件的真实路径 getRealPath() 3、以流的形式返回文件 getResourceAsStream() 4、获取web的初始化参数 在web.xml的根目录下面进行配置 <context-param> <param-name></param-name> <param-value></param-value> </context-param> context.getInitParameter()request:请求:处理请求相关
response:响应:处理响应相关什么是请求
浏览器,访问服务器, 什么是响应 服务器,反馈浏览器request:域对象(一次请求)
getParameter():获取单个数据(input框) getParameterValues();获取多个数据(checkedbox) getParameterMap():获取所有的参数 key:name值 value:name对应的value值获取请求头信息:
request.getHeader("") 获取请求方式: request.getMethod(); 获取项目路径: getContextPath();//请求转发:
request.getRequestDispatcher("/hello.html").forward(request,response ); 地址栏不变,页面发生跳转 如果发生了请求转发,还是一次请求路径相关;
内部路径;直接写资源 相对:./ ../ 绝对: 带主机和协议的路径(访问站外资源) 不带主机和协议的路径(最常用的) /项目名/资源路径 response对象: 响应码(状态码):200 成功 404:访问的资源不存在 500:服务器代码有问题 304:读缓存 302:重定向常用方法:
//设置编码 response.setContentType("text/html;charset=utf-8"); //回写数据 response.getWriter().print("我已收到请求!!!");getOutputStream():获取字节流
注意:两个流是互斥的 不能同时存在 自己写的:字符流 其他所有:字节流sendRedirect():重定向 页面发生跳转
地址栏要发生改变,两次请求请求转发和重定向的区别:
1、重定向2次请求,请求转发1次请求 2、重定向地址栏变化,请求转发地址栏不变 3、重定向转发通过浏览器,请求转发通过服务器内部 4、重定向可以访问站外资源(除开当前服务器以外),请求转发不能访问站外资源 了解: setHeader(); 设置响应头 addHeader();添加响应头,如果有就覆盖 ,没有就添加 响应头: location:配合状态码 实现重定向 refresh:刷新 cookie:小饼干 Content-Disposition:下载相关//重定向
方式一: sendRedirect(): 方式二: response.setStatus(302); response.setHeader("location", "/myServlet6");//定时刷新
response.setHeader("refresh", "3;url=http://www.baidu.com");