说到JSP和Servlet,不得不讲讲他哥俩的来龙去脉,Servlet是先出者,是为了满足生成动态页面的需求,但是他有一个巨大的毛病,就是需要在Java类中一句句的输出HTML标签来实现动态效果,这种写法令开发者头疼不已,因为随着页面的复杂度提升,动态和静态的整合就显得非常麻烦,修改起来也不是很好。因此,JSP横空出世,他支持在HTML页面直接写Java语句,不需要后期的整合,直接变成JSP文件,并且Sun公司一度把JSP从编码形式上改得和HTML标签极度相似。但是,Servlet并没有因为JSP退出舞台,而是退居二线,一心一意的做起了Controller层,和View层的JSP配合完成一个又一个艰巨的任务。
那就先从HelloWorld例子入手,先写一个Servlet往客户端输出的例子,现在eclipse下创建一个Servlet或Class文件,代码如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
运行上段Servlet代码,还需要在服务器中配置并发布,我用的服务器是tomcat,具体的操作过程不再赘述,百度即可。从这个例子可以看出Servlet就是一个Java类,它是通过out.println方法一句句的输入HTML达到网页动态效果的。
下面再来看一段JSP的代码,这时候创建的就是一个JSP文件了,不是Java类,JSP文件支持HTML,也可以在他里面写Java代码,示例如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<% out.println("HelloJSP");%>
</body>
</html>
上面的例子直接拷贝到tomcat的webapps下就可以运行,不需要像Servlet一些样配置config文件等。写JSP时可以直接在需要动态的部分中插入需要的Java代码,其余的静态部分依旧按照HTML的写法即可,其实,从例子可以看出 JSP就是能写Java代码的HTML文件。
下面再举一个JSP和Servlet配合完成的例子,把JSP中的数据提交到Servlet,并且显示出来,代码如下:
JSP页面的代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="HelloServlet" method="post">
<input type="text" name="txtInput"/>
<input type="submit" name="btnSubmit" value="Submit Order"/>
</form>
</body>
</html>
Servlet文件的代码:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
//doGet方法将数据放在头部,直接在url里面给出
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
String strParam=request.getParameter("txtInput").toString();
PrintWriter out = response.getWriter();
out.println(strParam);
}
@Override
//doPost在专门的数据区,因此post能传递大量的数据
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);//调用doGet方法
}
}
从例子可以看出JSP和Servlet互相配合,完成了数据的提交和页面的跳转,他俩配合实为完美。