Servlet
Servlet也叫“servlet applet”,是Java服务器的小程序,是一种基于Java技术的Web组件,运行在服务器端,由Servlet容器管理,用来生成动态的Web内容。
Servlet程序其实就是一个按照Servlet规范编写的Java类。它具有平台独立性,可以被编译成字节码,移植到任何支持Java技术的服务器中运行。
Servlet可以使用所有的Java API。也就是说,Java能做的事,Servlet都能做。
Servlet是Java语言中编写Web服务器扩展功能的重要技术,同时也是JSP技术的底层运行基础。
使用Servlet创建动态网页的第一步,就是创建 Servlet类。
Servlet规范的最顶层是一个名为javax.servlet.Servlet的接口,所有的Servlet类都要直接或者间接地实现该接口。直接实现Servlet接口不太方便,所以Servlet又内置了两个Servlet接口的实现类(抽象类),分别为Genericservlet和HttpServlet,因此,创建Servlet类有如下三种方式:
1.实现javax.servlet.Servlet接口,重写其全部方法。
2.继承javax.servlet.GenericServlet 抽象类,重写service()方法.
3.继承javax.servlet.http.HttpServlt抽象类,重写doGet()或doPost()方法.
一般第三种方式使用最多。
Servlet、GenericServlet、HttpServlet三者的关系
1.GenericServlet是实现了Servlet 接口的抽象类。
2.HttpServlet是GenericServlet的子类,具有GenericServlet的一切特性。
3.Servlet 程序(MyServlet类)是一个实现了Servlet接口的Java 类。
Servlet容器
Servlet容器就是Servlet代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为Servlet的运行提供底层支持,还需要管理由用户编写的Servlet类,比如实例化类(创建对象)、调用方法,销毁类等。
Servlet 中的容器和生活中的容器是类似的概念:生活中容器用来装水、装粮食,Servlet 中的容器用来装类,装对象。
因为我们编写的Servlet类没有main()函数,不能独立运行,只能作为一个模块被载入到Servlet容器,然后由Servlet容器来实例化,并调用其中的方法。
一个动态页面对应一个Servlet类,开发一个动态页面就是编写一个 Servlet类,当用户请求到达时,Servlet 容器会根据配置文件(web.xml)或者注解来决定调用哪个类。
HttpServlet抽象类
javax.servlet.http.HttpServlet继承了GenericServlet抽象类,用于开发基于HTTP协议的Servlet程序。由于Servlet主要用来处理HTTP的请求和响应,所以通常情况下,编写的Servlet类都继承自HttpServlet。
![](https://i-blog.csdnimg.cn/blog_migrate/49a1552db32858182638be57c122174f.png)
使用HttpServlet完成一个假登录
首页部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个Web项目</title>
</head>
<body>
<h2>欢迎学习Java Web。</h2>
<a href="login.jsp">去登录</a><br>
<a href="zhuce.jsp">去注册</a>
</body>
</html>
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/82f565a42766ccc69d5b8061fd576231.png)
登录部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<h2>登录</h2>
<form action="login" method="post">
账号:<input type="text" name="user" value=""> <br>
密码:<input type="password" name="pwd" value=""> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/1669037220c04e9af6a98b253b6b8e19.png)
Java代码部分:
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-get...");
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-post...");
request.setCharacterEncoding("utf-8");
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
System.out.println(user);
System.out.println(pwd);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
if (user.equals("季唯") && pwd.equals("111")){
response.getWriter().write("success!");
}else{
response.getWriter().write("error!");
}
}
}
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/b2870b2282783e972843fd1c612c8844.png)
![](https://i-blog.csdnimg.cn/blog_migrate/285edbd2c50171ab134a32b2893ae304.png)
注册部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<h2>注册</h2>
<form action="zhuce" method="post">
账号:<input type="text" name="user" value=""> <br>
密码:<input type="password" name="pwd" value=""> <br>
<input type="submit" value="注册">
</form>
</body>
</html>
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/1d3ca1bfc162f7cdd0ff475caf046c61.png)
Java代码部分:
public class Zhuce extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-get...");
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-post...");
request.setCharacterEncoding("utf-8");
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
System.out.println(user);
System.out.println(pwd);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
if (user.equals("季唯") && pwd.equals("111")) {
response.getWriter().write("success!");
} else {
response.getWriter().write("error!");
}
}
}
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/73fb76e63e15e562b375155b52ea06c9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/25578d21a94b6222fdc85caa96e0146d.png)
web.xml部分:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.du.servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>zhuce</servlet-name>
<servlet-class>com.du.servlet.Zhuce</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>zhuce</servlet-name>
<url-pattern>/zhuce</url-pattern>
</servlet-mapping>