一、servlet输出动态页面
package com.ken.demo;
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;
public class HtmlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
// 动态的响应页面
writer.write("<!DOCTYPE html>");
writer.write("<html>");
writer.write("<head>");
writer.write("<meta charset='UTF-8'>");
writer.write("<title>Insert title here</title>");
writer.write("</head>");
writer.write("<body>");
writer.write("<h1>这个页面很繁琐</h1>");
writer.write("</body>");
writer.write("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
二、jsp的来源
三、jsp脚本和注释
3.1 脚本
1)<%java代码%> ----- 内部的java代码翻译到service方法的内部
2)<%=java变量或表达式> ----- 会被翻译成service方法内部out.print()
3)<%!java代码%> ---- 会被翻译成servlet的成员的内容
3.1.1 <%java代码%>
创建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%
int i = 0;
System.out.print(i);
%>
</body>
</html>
访问index.jsp
3.1.2 <%=java变量或表达式>
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%
int i = 0;
System.out.print(i);
%>
<%=i %>
</body>
</html>
3.1.3 <%!java代码%>
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Insert title here</title>
</head>
<body>
<%
int i = 0;
System.out.print(i);
%>
<%=i%>
<%=1 + 1%>
<%!
String str = "hello china";
%>
<%=str%>
</body>
</html>
3.2 jsp注释
不同的注释可见范围是不同
1)Html注释:<!--注释内容-->---可见范围 jsp源码、翻译后的servlet、页面 显示html源码
2)java注释://单行注释 /*多行注释*/ --可见范围 jsp源码 翻译后的servlet
3)jsp注释:<%--注释内容--%>----- 可见范围 jsp源码可见
四、jsp运行原理
jsp本质就是servlet(面试)
jsp在第一次被访问时会被Web容器翻译成servlet,再执行
过程:
第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行
PS:被翻译后的servlet在Tomcat的work目录中可以找到
这个类继承了httpServlet,里面有对应的init(), destroy(), service()等方法。
jsp脚本里写的东西都会在这里以java代码出现。
带感叹号的脚本会变成成员变量,不带感叹号的脚本就是局部变量。
我们到tomcat的conf包下找到web.xml
可以看出来,访问jsp是通过servlet的。
再说jsp运行原理:
当你访问服务端的某个jsp,这个jsp如果是第一次被访问,会去tomcat容器的work目录下找有没有和它对应的servlet的java文件。有,则直接用这个servlet响应;没有,则把这个jsp翻译成对应的servlet的java文件,再响应。