写在前面的话:为什么突然要写一篇这个?因为明天考试要考这个
Servlet
一、创建Servlet
1.编写一个类实现Servlet接口
public class HelloServlet implements Servlet {
//处理请求和相应的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("该已执行");
}
//初始化
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
//销毁
@Override
public void destroy() {
}
}
2.到Web.xml文件中配置访问地址
<!--<servlet>标签给Tomcat配置Servlet程序-->
<servlet>
<!--<servlet-name>给程序起别名,一般是类名 -->
<servlet-name>HelloServlet</servlet-name>
<!--<servlet-class>servlet程序的全类名-->
<!--<servlet-class>访问HelloServlet中的service方法-->
<servlet-class>com.example.Test_service.HelloServlet</servlet-class>
</servlet>
<!--servlet-mappingServlet配置访问地址-->
<servlet-mapping>
<!--<servlet-name>告诉服务器当前配置的程序给哪一个服务器使用 -->
<servlet-name>HelloServlet</servlet-name>
<!-- url-pattern 标签配置访问地址
/ 斜杠在服务器解析的时候表示地址为http://ip:port/工程路径
/hello 为http://ip:port/工程路径/hello
-->
<!--hello的命名要与模块(HelloServlet)有对应关系 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3.到运行servlet
http://localhost:8080/Test_service_war_exploded/hello
// http:// 协议
// localhost:8080 ip地址
// Test_service_war_exploded 工程名
// hello XML文件中‘hello’所对应的类
二、处理请求
1.基本请求
创建一个HTML表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--请求方法为GET-->
<!--填写完整请求响应路径-->
<form action="http://localhost:8080/Test_service_war_exploded/hello" method="get">
<input type="submit">
</form>
</body>
</html>
2.POST与GET区分请求
1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4. Get执行效率却比Post方法好。Get是form提交的默认方法。
1.区分GET与POST方法需要在Servlet的实现方法中设置
public class HelloServlet implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest
HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest;
//2.使用类型判断请求方式
String str=httpservletRequest.getMethod();
//3.区分请求处理信息
if(str.equals("POST")) System.out.println("HelloPOST");
else if (str.equals("GET")) System.out.println("HelloGET");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
2.为了进一步区分GET与POST请求,将两种状态封装函数
public class HelloServlet implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest
HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest;
//2.使用类型判断请求方式
String str=httpservletRequest.getMethod();
//3.区分请求处理信息
if(str.equals("POST")) doPost();//直接调用
else if (str.equals("GET")) doGet();
}
//4.做GET请求
public void doGet(){
System.out.println("HelloGET");
}
//5.做POST请求
public void doPost(){
System.out.println("HelloPOST");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
三、常用Servlet开发原则
1.直接继承子类HttpServlet
PS:快速重写类的方法 鼠标点击类后CTRL+O
public class HelloServlet2 extends HttpServlet {
//直接在方法里面做处理,不需要重写service方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST");
}
}