四、编写一个适配器并对提交请求的方式进行判断
1、GenericServlet 是一个适配器,但是其本身也是一个Servlet,因为其实现了Servlet接口;
这个适配器是一个Servlet,以后程序员无需直接实现Servlet接口,去继承这个适配器即可,重写Servlce方法;
2、HTTP协议即超文本传输协议的详细内容:
1)浏览器和服务器之间的一种通讯协议
该协议是w3c负责制定的,其实本质上就是数据传送格式提前制定好了,浏览器和服务器都必须按照这种数据格式进行接收和发送
2)HTTP协议包括几部分?
请求协议:从Browser发送到Server的时候采用数据传输格式,请求协议包括请求行、消息包头、空白行、请求体;
备注:
get请求,发送请求在请求行上发送,信息会显示在浏览器地址上;
请求行包括:请求方式 URL 协议版本号
空白行:专门用来分离消息包头和请求体的
响应协议:从Server发送到Browser的时候采用的数据传输格式;
备注:
响应协议包括四部分状态行:响应报头、空白行、响应体
状态行:协议版本号 状态码 状态描述信息
空白行:分离响应报头和响应体的
200 响应成功正常结束、404资源未找到、500服务器内部错误
3、路径总结:
两类:
第一类:以/开始,加webapp名称
第二类:以/开始,不加webapp名称
除以上两类之外,欢迎页面设置比较特殊,不以/开始,不加webapp名字;
备注:web.xml文件中<url-pattern>的路径是不需要带webapp的名字的, 默认就是在该工程共进行访问的。但是必须以/开始,否则服务器启动时就会报错
|实例:编写一个适配器并对提交请求的方式进行判断|
GenericServlet类
package com.bjpownernode.javaweb.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*GenericServlet 是一个适配器,但是其本身也是一个Servlet,因为其实现了Servlet接口;
*这个适配器是一个Servlet,以后程序员无需直接实现Servlet接口,去继承这个适配器即可,
*重写Servlce方法;
* */
public class GenericServlet implements Servlet {
private ServletConfig config;
/*若在初始化时刻需要执行一段特殊的程序,建议重写无参数的init方法;
* */
@Override
public void init(ServletConfig config) throws ServletException {
this.config=config;
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return config;
}
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
/*以下是扩展方法,方便子类的使用*/
public ServletContext getServletContext(){
return config.getServletContext();
}
}
HelloServlet类
package com.bjpownernode.javaweb.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet extends GenericServlet {
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
System.out.println("HelloServelt's init...");
}
//ServletResponse向客户端发送一个响应
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, res);
res.setContentType("text/html;charset=UTF-8");
PrintWriter out=res.getWriter();
out.print("helloworld");
}
}
HelloServlet02类
package com.bjpownernode.javaweb.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet02 extends GenericServlet {
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
}
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out=res.getWriter();
out.print("helloworld");
out.print("<br>");
out.print(getServletContext());
}
}
LoginServlet类
package com.bjpownernode.javaweb.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LoginServlet extends GenericServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out=res.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title>this is a test code</title>");
out.print("<head>");
out.print("<body>");
out.print("login success");
out.print("<body>");
out.print("</html>");
}
}
LogoutServlet类
package com.bjpownernode.javaweb.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogoutServlet extends GenericServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)res;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
//获取浏览器发送请求的方式:
String method=request.getMethod();
System.out.println(method);
if("POST".equals(method)){
//前端报出错误
out.print("405-您应该当发送GET请求");
}else{
//若程序执行到这里证明用户发送的请求是GET请求,程序应当正常执行
out.print("系统已经安全退出");
}
}
}
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>prj-servlet06</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>com.bjpownernode.javaweb.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>helloworld02</servlet-name>
<servlet-class>com.bjpownernode.javaweb.servlet.HelloServlet02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld02</servlet-name>
<url-pattern>/helloworld02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.bjpownernode.javaweb.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>com.bjpownernode.javaweb.servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
</web-app>
login.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login/logout page</title>
</head>
<body>
<form action="/prj-servlet06/login" method="get">
username<input type="text" name="username"><br>
password<input type="text" name="password"><br>
<input type="submit" value="login">
</form>
<form action="/prj-servlet06/logout" method="post">
<input type="submit" value="退出系统按钮">
</form>
</body>
</html>