概述
Servlet是符合一定规范的Java类,属于服务器程序,主要用于接收用户传来的数据及响应请求等。
实现Servlet的方式有三种:
l 实现javax.servlet.Servlet接口;
l 继承java.servlet.GenericServlet类;
l 继承javax.servlet.http.HttpServlet类;常用
与JSP的区别
因为Servlet控制页面对于美工来说太困难,所以有了JSP。JSP在Html页面中混合了Java类和JSP标签,最终得到一个页面,更多的是视图的功能,在运行中,JSP文件首先转为Serlvet文件(在这一步中为JSP中的模板语句加上out.println()并将JSP标签转为JAVA类,相当于Servlet中需要手动编写的内容JSP引擎自动完成了转化,省时省力)
。然后就和Servlet文件处理方式一样了:翻译为字节码文件.class,然后由Servlet引擎编译为可执行文件.exe之后运行,这么看来JSP还是借助于Servlet实现的。
但是JSP的弊端在于前后端耦合,出现错误的时候,前端程序员和后端程序员经常容易打起来(
所以出现了前后端分离的概念,如MVC模式
- JSP更多的进行页面显示,Servlet更多的处理业务逻辑
- Servlet可以实现JSP的所有功能,但由于美工使用Servlet做界面非常困难,后来开发了JSP。
- JSP技术开发网站的两种模式:JSP + JavaBean;JSP + Servlet + JavaBean。在多层应用中, JSP用作表现层,Servlet用作控制层,因为在JSP中放太多的代码不利于维护,所以留给Servlet来实现,而大量的重复代码写在JavaBean中。
配置方法
- 3.0以前的版本,使用web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 声明Servlet对象 -->
<servlet>
<servlet-name>CalculateServlet</servlet-name>
<servlet-class>com.lyq.servlet.CalculateServlet</servlet-class>
</servlet>
<!-- 映射Servlet对象 -->
<servlet-mapping>
<servlet-name>CalculateServlet</servlet-name>
<url-pattern>/CalculateServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
- 3.0以后的版本提供了新的配置方式
路径中的/
代表改项目对应的根目录,比如项目名为MAIN
,对应的根目录就是http://localhost:8080/MAIN/
,图片中的配置方式,访问此Servlet的路径为http://localhost:8081/MAIN/MyServlet
实现
一般继承HttpServlet
public class TestServlet extends HttpServlet {
//初始化方法
public void init() throws ServletException {
}
//处理HTTP Get请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
//处理HTTP Post请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
//处理HTTP Put请求
public void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
//处理HTTP Delete请求
public void doDelete(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
//销毁方法
public void destroy() {
super.destroy();
}
}
package com.caut.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
// response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 检查
String[] idList = { "123", "456" };
String tag = request.getParameter("u_id");
PrintWriter out = response.getWriter();
out.println("返回给你的数据");
System.out.println(tag);
}
}