目录java
1.设置编码json
优势:浏览器
缺点:tomcat
3.servlet的继承关系session
4.Http协议ide
1.设置编码
在xml文件配置中,一个servlet能够对应多个mapping,意义在于,能够看到用户是采用何种路径访问
一个mapping 只能对应一个servlet
tomcat8以前:
(1.若是是post传递方法:
request.setCharacterEncoding("UTF-8");
(2.若是是get传递方法
1.先将数据转换成字节数组
String name = request.getParameter("name");
byte[] by = name.getBytes("ISO-8859-1");
2.将字节数组按照设定的编码格式转成成字符串
name = new String(by,"UTF-8");
tomcat8以后:
只针对post方法:request.setCharacterEncoding("UTF-8");
2.servlet的生命周期
服务器的开启到服务器的关闭
默认状况下:
第一次接受请求时,servlet会进行初始化(init()),实例化(servce())
然后每次刷新关闭网页等操做都是在调用servce()服务方法
直到服务器的关闭,servlet的生命周期结束,销毁方法(destory())
第一次请求时,tomcat会进行实例化,初始化,而后在服务,然后每次服务都是这个实例对象在执行
优势:
只建立一次对象,提升效率,减小服务器负担
缺点:
第一次服务时,耗时较长
-若是须要提升系统的启动速度,当前默认状态就能够,
-若是要提升servlet的响应速度,应该设置servlet的响应时机。
设置servlet的响应时机:
在xml中的servlet中设置<load-on-startup>1</load-on-startup>设置初始化和实例化的时间
时间越小,初始化和实例化的时间就越早,
采用此标签,初始化和实例化都是在tomcat启动时执行
当第一个用户访问时,就会直接服务不会在进行初始化和实例化,启动速度变慢,但服务响应速度变快,提升用户体验
Servlet在服务器中:单例的,线程不安全的
单例:只有一个servlet实例
线程不安全:当多个线程访问,若是一个线程修改了servlet中的一个变量,可能会致使其余线程的逻辑路径发生变化
所以,在servlet类中不要定义与逻辑有关的变量,而且不要修改变量
3.servlet的继承关系
HttpServlet抽象类 继称 ——> javax.servlet.GenericServlet抽象类 实现 ——> Servlet接口
1.Servlet接口中的三个抽象方法
init(ServletConfig var1);初始化方法
void service(ServletRequest var1, ServletResponse var2);服务方法
void destroy();销毁方法
2. javax.servlet.GenericServlet抽象类中的方法实现了了Servlet中的三个抽象方法,但任然是抽象的方法
3.HttpServlet抽象类中的实现了接口中的方法;
404:出错未找到相应的页面
405:method的方式默认为doget,若是继承HttpServlet却重写的方法不对,就会报错405,method亲求方式出错
500:服务器内部错误
200:正常响应
302:重定向
4.Http协议
http协议:超文本传输协议
http是无状态的
http包括请求和响应
1.请求:包括1).请求行 2).请求头 3).请求体
1).请求行:
1,请求方法
2.请求的url
3.请求的协议:(通常为http1.1)
2).请求头:
包括客户端想服务器发送的浏览器版本,端口号,请求内容等等
3).请求体:
1).get方式:没有请求体 有queryString
2).post方式:有请求体 form data
3).json方式:request payload
2.响应:
1).响应行
包括:协议,响应码(200),响应状态
2).响应头
包括:服务器的信息(版本信息,),响应内容的大小,格式,等
3).响应体
具体响应的内容及具体的页面信息。
5.会话
http是无状态的:
是指服务器没法区分请求是否来自于同一个客户端
无状态致使:可能会发生混乱,服务器将A客户端发来的请求响应到B客户端
解决http无状态的方法:会话跟踪
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
HttpSession id = req.getSession();
System.out.println("建立的session id为:"+id);
}
-服务器在客户端请求时,会给客户端分配会话ID,sessionId,每个客户端的id惟一,并将建立的id返回给客户端
-客户端下次访问服务器时,就会经过sessionId将响应的结果返回给响应的客户端,以此就解决了混乱问题。
session保存做用域:
不一样session之间不能够互相访问其余session保存的内容
session的做用域:从session建立到浏览器关闭。
6.服务器内部转发和重定向
1.服务器内部转发:
//测试内部请求转发
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//demo01跳转到demo02
requuest.getRequestDispatcher("demo02").forward(requuest,response);
}
}
2.客户端重定向:
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//测试内部请求转发
// requuest.getRequestDispatcher("demo02").forward(requuest,response);
//测试重定向
response.sendRedirect("demo02");
}
}
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}