3.1-serverlet
Servlets
What are servlets?
Servlet(Server Applet)是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlets are Java’s answer to CGI
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果
– Used to generate dynamic web pages in response to client
– Used for client requests that cannot be satisfied using pre-built (static) documents.
– They are programs that run on a web server acting as middle layer between HTTP request and databases or other applications.是运行在web服务器上的程序,充当HTTP请求和数据库或其他应用程序之间的中间层。
web服务器只是提供静态的资源:从目录中找到它们直接发给client,无法区分client
而CGI(Java 中servlet)可以进行Dynamic response,辅助web服务器做出响应
tomcat是其容器
Advantages of Servlets over CGI
- 性能明显更好Efficient。
- Convenient:提供解析和解码HTML表单的基础结构
- Powerful: 可以直接与web服务器通信。多个servlet可以共享数据库连接。简化会话跟踪
- Portable– Written in Java and follows standard API
- Secure服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上资源
- Inexpensive
servlet 一个例子:
servlet标准格式
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletExcpetion {
response.setContentType("text/html");//响应格式
PrintWriter out = response.getWriter();
out.println(“返回的HTML”);
out.close;
}
}
另一个例子:echo
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
public class GetEchoServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
String userName = request.getParameter(“fname”);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(“<html><body>Hello”);
if (userName != null) out.println(userName);
else out.println(“mystery person”);
out.println(“</body></html>”);
out.close(); //记得close!!!!!
}
}
值得注意的点:
- 导入的包:
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
HTTP报文类型是get则这里使用doGet
继承该类时至少重写一个方法
获取HTML form中的参数值value(是字符串类型,需要转换)
String request.getParameter(attribute name )//其中要打双引号
attribute name 是HTML表单提交时的名字,把变量名提交到HTTP请求中
– returns null if unknown parameter;
– returns “” (i.e. empty string) if parameter has no value
可以用枚举获取全部参数:
String[] Enumeration getParameterNames(String)
然后用这个获取每个的值构成的数组
String[] getParameterValues(String)
• returns null if unknown parameter;
• returns a single string (“”) if parameter has no values.
- 写入response报文:
PrintWriter out = response.getWriter();
通常在HTML中