一.Servlet和jsp分析
jsp本质就是Servlet,jsp是Servlet的一种延伸,早期没有jsp好多html代码都写在Servlet的java类中,这样写起来麻烦,所有就出现了jsp。
1.不同点
Servlet在Java代码中通过HttpServletResponse对象动态输出html代码
JSP在静态html内容中嵌入Java代码,Java代码被动态执行后生成html代码(可以到tomcat中查看到jsp执行后的java文件)
2.使用特点
Servlet能够很好地组织业务逻辑代码,mvc中的前端控制层,主要写逻辑,
JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的
二.Servlet入门程序Hello World
前端控制层,servlet层必须继承HttpServlet,重写所需要的doGet、doPost、doPut,doDelete等方法
package cs.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* servlet前端控制层
* @author cs
* @date 2018年6月1日
*/
public class IndexServlet extends HttpServlet {
/**
* servlet 初始化时执行
*/
@Override
public void init() throws ServletException {
System.out.println("servlet 初始化");
}
/**
* get请求
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servlet get请求");
resp.setContentType("text/html");
PrintWriter printWriter = resp.getWriter();//获取输出流
printWriter.println("<h1>Hello World</h1>");//输出页面
}
/**
* post请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servlet post请求");
}
/**
* servlet 销毁时执行
*/
@Override
public void destroy() {
System.out.println("servlet 销毁");
}
}
jsp,视图层
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello world</title>
</head>
<body>
</body>
</html>
web.xml 配置Servlet
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
<!-- web应用初始化配置 -->
<!-- 项目欢迎页 -->
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
<!-- 配置servlet类 -->
<servlet>
<servlet-name>index</servlet-name><!-- servlet名称,作用:用于映射访问路径 -->
<servlet-class>cs.test.servlet.IndexServlet</servlet-class><!-- 继承HttpServlet的实现类 -->
</servlet>
<!-- 映射路径配置 -->
<servlet-mapping>
<servlet-name>index</servlet-name><!-- servlet名称 -->
<url-pattern>/index</url-pattern><!-- 访问时的路径 -->
</servlet-mapping>
<!-- servlet允许配置多个映射 -->
<servlet-mapping>
<servlet-name>index</servlet-name><!-- servlet名称 -->
<url-pattern>/test/index</url-pattern><!-- 访问时的路径 -->
</servlet-mapping>
</web-app>
输出结果:
访问不同的url