1.JSP介绍
JSP即Java Server Pages,JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 它是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
1)原理
2)内置对象(参考自百科)
request
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
response
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
session
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
application
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
out
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
page
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
config
config 对象的主要作用是取得服务器的配置信息。通过 pageContext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
exception
java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
pageContext
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
2.如何查看jsp经过解析转换之后的Java代码(启动项目并利用tomcat发布之后,可以在tomcat安装目录下的“work”目录找到解析后对于的.java文件和编译后的.class文件)
3.简单登录跳转实例代码实现
- login.jsp
1 <%@ page contentType="text/html; charset=gbk" import="dto.User"%> 2 3 <html> 4 <head> 5 <title>login</title> 6 </head> 7 <body> 8 <!-- <p1>test!</p1> --> 9 <h2 align="center">欢迎登录</h2> 10 <form name=loginForm action="handlelogin.jsp" method=post> 11 <table align="center"> 12 <tr> 13 <td>用户名:</td><td><input type=text name=username /></td> 14 </tr> 15 <tr> 16 <td>密码:</td><td><input type=password name=pwd /></td> 17 <tr/> 18 <tr> 19 <td colspan="2",align="center"> 20 <input type="submit" value="submit" /> 21 <input type="reset" value="reset" /> 22 </td> 23 </tr> 24 </table> 25 26 </form> 27 </body> 28 </html>
- handlelogin.jsp
1 <%@page contentType="text/html; charset=gbk" import="dto.User" %> 2 3 <!-- 内嵌java代码,主要控制逻辑跳转 --> 4 <% 5 String username = request.getParameter("username"); 6 String pwd = request.getParameter("pwd"); 7 if(username.equals("admin")&&pwd.equals("123")){ 8 User u = new User(username,pwd); 9 session.setAttribute("username",username); 10 pageContext.forward("ok.jsp"); 11 }else{ 12 pageContext.forward("login.jsp"); 13 } 14 %>
- ok.jsp
1 <%@ page contentType="text/html; charset=gbk" import="dto.User" %> 2 3 <html> 4 <body> 5 <h1>登录成功,<%=session.getAttribute("username") %></h1> 6 </body> 7 </html>
- User.java
1 package dto; 2 3 public class User { 4 5 private String username; 6 private String pwd; 7 8 public User(String username, String pwd) { 9 super(); 10 this.username = username; 11 this.pwd = pwd; 12 } 13 public String getUsername() { 14 return username; 15 } 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 public String getPwd() { 20 return pwd; 21 } 22 public void setPwd(String pwd) { 23 this.pwd = pwd; 24 } 25 26 }
登录演示:
结语
jsp跟Servlet没有具体的孰优孰劣。一般我们项目当中都是结合二者的长处进行开发的。使用jsp代码确实可以减少冗余代码,提高开发效率。不过,jsp的短板就是它在对页面逻辑进行处理时比较麻烦。而且每个人有各自的代码风格,如果有过多的jsp逻辑代码的话读来难免有些晦涩难懂!