浅谈servlet与jsp的关系
servlet是用java语言编写的,是一个java类。主要功能是用来接受、处理客户端的请求,并把处理结果返回到客户端显示。Jsp是servlet发展后期的产物。在没有jsp之前,servlet利用输出流动态生成整个HTML页面,输出内容包括每一个HTML标签和每个在HTML页面中出现的内容。HTML文件包含大量标签和大量静态文本及格式等,以及所有的表现逻辑,包括布局、色彩及图像等。这些内容都必须耦合在java代码中,这样就导致servlet开发效率低下,令人不胜其烦。jsp出现后弥补了不足,因为jsp文件是通过在标准的HTML页面中插入java代码形成的。其静态的部分无需java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用java脚本控制。所以jsp技术出现后,主要用jsp文件来动态生成HTML文件,然后返回客户端显示。现在的servlet,当需要将整个页面作为结果返回时,不再由其自己去处理,而是调用jsp文件。
下面开发部署一个简单的servlet程序来展示:
1.创建处理请求的servlet文件:
1 package com.servlet.study; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class HelloWorldServlet extends HttpServlet { 12 @Override 13 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 super.doGet(req, resp); 15 } 16 @Override 17 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 18 resp.setContentType("text/html;charset=UTF-8"); 19 req.setCharacterEncoding("UTF-8"); 20 String userName = req.getParameter("username"); 21 String passWord = req.getParameter("password"); 22 PrintWriter out = resp.getWriter(); 23 out.print("<html>"); 24 out.print("<head>"); 25 out.print("<title>Helloworld</title>"); 26 out.print("</head>"); 27 out.print("<body>"); 28 out.print("<hr>"); 29 out.println("The username is "+userName); 30 out.println("The password is "+passWord); 31 out.print("</body>"); 32 out.print("</html>"); 33 } 34 }
2.创建HTML文件:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用户登录页面</title> 6 </head> 7 <body> 8 <h1 align="center">登录系统</h1><hr> 9 <form action="helloworld_servlet" method = "post">//表单的action其实指明了servlet的url 10 <table> 11 <tr> 12 <td>用户名</td> 13 <td><input type="text" name="username"></td> 14 </tr> 15 <tr> 16 <td>密码</td> 17 <td><input type="password" name="password"></td> 18 </tr> 19 <tr> 20 <td><input type="reset" value="重填"></td> 21 <td><input type="submit" value="提交"></td> 22 </tr> 23 </table> 24 </form> 25 </body> 26 </html>
3.在web.xml中配置servlet:
1 <servlet> 2 <servlet-name>HelloWorldServlet</servlet-name> 3 <servlet-class>com.servlet.study.HelloWorldServlet</servlet-class>//实现类 4</servlet> 5 <servlet-mapping>//映射 6 <servlet-name>HelloWorldServlet</servlet-name> 7 <url-pattern>/helloworld_servlet</url-pattern>//“/”是必须的 8 </servlet-mapping>
注:]servlet类必须继承HttpServlet类,而且得重写doGet、doPost方法,并创建out对象。doGet方法是HttpServlet类中处理get请求的方法,doPost处理post请求。在表单中声明method,并在servlet类中编写相对应方法即可,本例特为post请求。