servlet的生命周期,servlet时多线程单实例的对象
在TOMCAT中每个servlet都只有一个唯一的实例,该实例可以被多个线程之间进行同时访问!
- publicinterfaceServlet{
- void init(ServletConfig var1)throwsServletException;
- ServletConfig getServletConfig();
- void service(ServletRequest var1,ServletResponse var2)throwsServletException,IOException;
- String getServletInfo();
- void destroy();
- }
servlet生命周期:编译—加载—实例化—初始化—服务化—销毁
(1)、实例化,由Tomcat完成,并且只实例化一次!
(2)、初始化,Tomcat调用每个Servlet实例上的init(),完成一次初始化!
(3)、服务化,可以接收用户的请求,调用Servet实例上的service(),服务多次!
(4)、当停止Tomcat时,调用Servlet实例上destroy()该方法,销毁实例!
URL地址匹配规则
web-xml配置方式:
注解配置方式:@webservlet(urlPatterns={“”})
精准配置,非常明确的地址,使用最多
@webServlet(name=”ls”,urlPatterns=”/login”)
Servlet的核心API
web.xml配置用法
ac com.woniuxy.web01.servlet.AddClassServlet encoding utf-8 ac /addClass
———————————————————————————————————————————————-
编码集
- privateString encoding;
- @Override
- publicvoid init(ServletConfig config)throwsServletException{
- // TODO Auto-generated method stub
- encoding = config.getInitParameter(“encoding”);
- System.out.println(encoding);
- }
注解配置
- @WebServlet(name=”ac”,urlPatterns=”/addClass”,initParams={
- @WebInitParam(name =”encoding”, value =”utf-8”)
- })
二、ServletContext
概念:Servlet的上下文对象,由TOMCAT提供,每一个JavaWeb都有一个独立的ServletContext,他的生命周期和TOMCAT同步,作用范围有限,也叫作“作用域对象”
作用:1、用于servlet之间数据的交互
2、用于设置一些全局参数
1、用于Servlet的数据交互
在某一个Servlet中,添加如下内容:
//班级名字,转交给老师的ServletServletContext context = req.getServletContext();context.setAttribute(“className”, className);
在另外一个Servlet中,获得对应的内容:
//获得到上下文对象ServletContext context = req.getServletContext();String className = (String)context.getAttribute(“className”);System.out.println(className);
2、用于设置一些全局参数
1)、在web.xml中添加如下内容
(2)、在所有Servlet中使用上下文对象获取参数
ServletContext context = req.getServletContext();String encoding = context.getInitParameter(“encoding”);req.setCharacterEncoding(encoding);
API方法
- ServletContext context = req.getServletContext();
- System.out.println(context.getServletContextName());//项目名称
- System.out.println(context.getServerInfo());//服务器的信息
- System.out.println(context.getRealPath(“files”));//得到files目录的真实路径
- Properties props =newProperties();
- InputStream is = context.getResourceAsStream(“WEB-INF/db.properties”);
- props.load(is);
- System.out.println(props.get(“jdbc.url”));
HttpServletRequest:实际上TOMCAT针对Http请求,封装的请求对象!
作用:代表用户发起的Http请求
二、接收页面数据
方法中的name,就代表时页面表单踢脚线中name属性
- @Override
- protectedvoid doPost(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{
- // TODO Auto-generated method stub
- ServletContext context = req.getServletContext();
- String encoding = context.getInitParameter(“encoding”);
req.setCharacterEncoding(encoding);
Map
params = req.getParameterMap(); - System.out.println(params.get(“userName”)[0]);
- System.out.println(params.get(“gender”)[0]);
- System.out.println(Arrays.toString(params.get(“hobbies”)));
乱码处理
前后端交互的过程中可能出现中文乱码
post乱码:多半时前后端不是同一编码集
解决方法:req.setCharacterEncoding(utf-8);
get的乱码,几乎都是TOMCAT服务器造成的
req.setCharacterEncoding(encoding);//第一种方(如果不能解决:使用第二种)String userName = req.getParameter(“userName”);userName = new String(userName.getBytes(“ISO-8859-1”),”UTF-8”);//第二种方案
四、获得HTTP头数据
业务需求:统计下 系统中不同浏览器的使用人群比例!
String userAgent = req.getHeader(“User-Agent”);//根据请求头名称,获得对应的值// System.out.println(userAgent); //获得所有请求头
Enumeration
while(enums.hasMoreElements()) {
System.out.println(enums.nextElement()); }
五、获得URL地址信息
- @Override
- protectedvoid doGet(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException{
- // TODO Auto-generated method stub
- System.out.println(req.getRequestURL());//返回请求的完整路径 URL
- System.out.println(req.getRequestURI());//返回请求的资源路径 URI
- System.out.println(req.getQueryString());//返回请求路径中的请求参数
- System.out.println(req.getRemoteAddr());//远程地址
- System.out.println(req.getRemoteHost());//远程IP
- System.out.println(req.getRemotePort());//远程的端口
- System.out.println(req.getRemoteUser());//远程的用户信息
- }
六、跳转界面
Request也是一个作用域
作用范围:只在当次的HTTP请求范围内有效!
HttpServletResponse
Response是响应对象,每个HTTP请求都有独立的HttpServletResponse对象
1、响应文本
响应网页信息
请求转发和重定向
请求转发;服务器只发送一次请求,请求转发共享同一个request对象
重定向:重定向是当某个路径无法实现功能时,可以请求在服务器外部完成重定向,重定向到另外一个地址去处理该请求,特点是浏览器发起了两次请求
三、响应添加响应头
默认的响应头:https://www.runoob.com/http/http-header-fields.html
- /添加一个头/
- resp.addHeader(“author”,”shenzhen second class!”);
- /修改一个头/
- resp.setHeader(“Server”,”Jetty”);