目录
Servlet技术
1)什么是Servlet
- Servlet是javaEE规范之一。规范就是接口
- Servlet是JAVAWEB三大组件之一。(Servlet程序,Fititer过滤器,Listenter监听器)
- Servlet是运行在服务器上的一个java小程序,它可以接收客服端的请求,获取响应请求
2)实现第一个Servlert程序
- 编写一个类去实现Servlet接口(一般来使用HttpServlet来实现)
- 实现Service方法,处理请求,并响应数据
- 到web.xml中配置servlet程序的访问路径
<!--Servlet标签给tomcat配置Servlet程序 -->
<servlet>
<!--Servlet-name标签Servlet程序起一个别名(一般是类名) -->
<servlet-name>qsh_servlet</servlet-name>
<!-- servlet-class是Servlet的全类名-->
<servlet-class>com.qsh_Servlet</servlet-class>
</servlet>
<!--servlet-mappting标签给servlet程序配置访问路径-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,当前配置的地址给那个Servlet使用-->
<servlet-name>qsh_servlet</servlet-name>
<!--url-pattern
/代表这服务器解析的时候,表示地址:http://ip:port/工程路径
/hello代表 http://ip:port/工程路径/hello
-->
<url-pattern>/qsh</url-pattern>
</servlet-mapping>
3)生命周期
- 执行Servlet构造器方法
- 执行init初始化方法
- 执行service方法
- 知悉destroy销毁方法
serveletconfig类(配置信息类)
1)三大作用
- 可以获取Servlet程序的别名servlet-name的值
- 获取初始化参数init-param
<init-param>
<param-name>name</param-name>
<param-value>覃圣航asjdlk</param-value>
</init-param>
- 获取ServletContext
2)解析serveletconfig类 - serveltConfig是servlet程序的配置信息类
- servlet程序默认是第一次访问的时候创建,servletconfig是每个servlet程序创建时,就创建一个对应的servlet对象
- 我们除开在init类中使用servletconfig对象外,还可以在doget或者dopost使用
ServletConfig servletConfig = getServletConfig();
3)ServletContext是什么
- 它是一个接口,它表示Servlet上下文对象
- 一个web工程,只有一个servleContexxt对象实例
- servletContext对象是一个域对象,他在部署的时候创建,停止服务器的时候销毁。
作用: - 获取web.xml中配置上下文参顺context-param
<!--context-param是上下文参数(它属于整个web项目) -->
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
System.out.println("这个Context的配置对象是:"+servletContext.getInitParameter("user"));
- 获取当前工程路径,格式/工程路径
System.out.println("当前工程的路径"+servletContext.getContextPath());
- 获取工程部署后在服务器硬盘的绝对路径
/**
* 输入/是因为,/代表这http:ip:port/工程名/
*/
System.out.println("当前磁盘路径"+servletContext.getRealPath("/"));
- 想map一样存取数据(他的作用范围是整个web工程)
getServletContext().setAttribute("name","覃圣航");
System.out.println(getServletContext().getAttribute("name"));
HTTP协议
1)get请求和post请求
2)响应状态码
HTTPServletRequest类
1)HttpServletRequest类的作用是什么
每次只要有请求进入TOmcat服务器,Tomcat服务器就会把请求过来的HTTP协议幸喜分析封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
2)常用参数
Request解决中文乱码问题:/** * 解析中文字符为"UTF-8" * 这个方法要在请求参数调用前设置才会有效果 */ request.setCharacterEncoding("UTF-8");
3)请求转发
关键词:request.getRequestDispatcher("/Servlet02")、 requestDispatcher.forward(request,response);
什么是请求转发?
请求转发是指,服务器收到请求后,从一个资源跳转到另一个资源。
Servlet01
//获取办事材料(获取请求的参数)
String username = request.getParameter("username");
System.out.println("这是柜台一的材料"+username);
//处理完事务,加盖一个印章传到你要转发到的Servlet
request.setAttribute("key","柜台一的章");
/**
* 请求转发的路径
* 请求必须要以斜杠打头,/代表这:http://ip:port/工程名/,映射到IDEA代码的web项目
*/
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Servlet02");
//走到你要取的路径requesDispater
requestDispatcher.forward(request,response);
Servlet02
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查看传过来的办公材料(获取请求的参数)
String username = request.getParameter("username");
System.out.println("在Servlet2(柜台2)中查看参数(材料)"+username);
//查看柜台一是否有盖章
Object key = request.getAttribute("key");
System.out.println("柜台一的章"+key);
//处理自己的业务
System.out.println("Servlet2处理自己的业务");
4)base标签的作用
base标签可以设置当前页面中所有相对路径工作时候,参数路径按照那个经行跳转
avascript
<head>
<title>Title</title>
<base href="http://localhost:8080/a/b/text.html">
</head>
<body>
这是a/b的页面
<a href="../../../text00.html">跳转页面</a>
</body>
</html
HttpServletResponse类
1)response作用
HttpSservletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递Servlet程序去使用。HttpServletReuest表示请求过来的信息,HttpServletResponse表示所有响应的信息,
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置
2)如何向客户端上传递数据
用流的方式:字符流、字节流
PrintWriter writer = resp.getWriter();
writer.write("覃圣航");
3)response解决中文乱码问题
//设置服务器的字符集为(UTF-8)
resp.setCharacterEncoding("UTF-8");
//设置浏览器的字符集(utf-8)
resp.setHeader("Content-Type","text/html;charset-UTF-8");
方法二:
/**
* 缺点:必须在获取响应流前使用这个方法
* 优点:可以同时设置客户端和服务器的字符集
*/
resp.setContentType("text/html;charset-UTF-8");
4)请求重定向
response1
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应状态码
resp.setStatus(302);
//设置响应头
resp.setHeader("Location","/reponse2");
}
response2
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("Content-Type","text/html;charset-UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().write("这是reponse2");
}
方法二、
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("/reponse2");
}