一.jsp
1. jsp的介绍
JSP全名为Java Server Pages,中文名叫java服务器页面,本质是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
jsp的作用:将内容的生成和显示进行分离
用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容
2. jsp的原理
Ø jsp原理
创建web工程day10,创建一个hello.jsp页面。上图描述的是一个jsp页面hello.jsp在服务器中处理的过程。
1.在浏览器中输入 http://localhost/day10/hello.jsp
2.服务器得到请求,会通过jsp引擎查找到hello.jsp页面
3.服务器将查找到的hello.jsp页面翻译成hello_jsp.java(其本质就是一个servlet)
4.jvm会将hello_jsp.java文件编译成hello_jsp.class
5.服务器运算hello_jsp.class文件
6.服务器生成响应结果
Ø jsp对应java文件分析
上述是我们对于一个jsp运行的原理的简单分析,我们可以通过查看hello.jsp文件翻译后的.java文件来了解具体内容,生成的hello.jsp页面的java源文件存在于tomcat/work目录 下。
hello.jsp页面源代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>hello.jsp</title> </head> <body> hello jsp </body> </html> |
hello_jsp.java文件源代码
|
通过上面的内容,大家会发现在jsp页面中的所有的html代码,最终都会被流写回到浏览器端,所以我们可以在浏览器上查看到jsp页面上的html内容
3. jsp的脚本与注释
Ø jsp中三种脚本元素
有三个基本的脚本元素,作用是使JAVA代码可以直接插入到HTML代码中
u Ø声明标签
格式:<%! int a = 1; %>
作用:声明的变量在类的成员位置上
u Ø脚本片断
格式:<% int a = 1; out.println(a); %>
作用:内容会生成在_jspService()方法中
u Ø脚本表达式
格式:<%= "hello " + a %>
作用:它就相当于是out.println()将内容直接输出到页面中,注意表达式不能以分号结尾
Ø jsp中的注释
在jsp页面中可以使用三种注释
u 可以使用html中注释
<!-- html的注释 -->
u 可以对jsp脚本内容使用java注释
//单行注释 /* 多行注释 */
u 可以使用jsp注释(推荐)
<%-- jsp注释 --%>
4. jsp与servlet的结合使用
把昨天的登录操作使用jsp实现一下,流程稍稍改变一下:
创建数据库与表
CREATE DATABASE day10; USE day10; CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), PASSWORD VARCHAR(20), email VARCHAR(50), sex VARCHAR(20), telephone VARCHAR(20), introduce VARCHAR(200) ) INSERT INTO USER VALUES(NULL,"tom","123","tom@itcast.cn","男","13888888888","good boy"); |
导入mysql驱动jar包
创建JdbcUtils工具类及jdbc.properties配置文件
创建User类
public class User { private int id; private String username; private String password; private String email; private String sex; private String telephone; private String introduce;
get/set方法省略 } |
login.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登陆窗口</title> </head> <body> <%=request.getAttribute("loginmsg") %> <form action="/day10/login" method="post"> USERNAME:<input type="text" name="username"><br> PASSWORD:<input type="password" name="password"><br> <input type="submit" value="登陆"> </form> </body> </html> |
LoginServlet类
|
UserOperation操作类
public User login(String username, String password) { User user = null; // 1.定义sql语句 String sql = "select * from user where username=? and password=?"; // 2.查找数据库操作 Connection con = null; PreparedStatement pst = null; ResultSet rs = null;
try { // 2.1获取Connection对象 con = JdbcUtils.getConnection(); // 2.2 获取执行sql语句的PreparedStatement对象 pst = con.prepareStatement(sql); // 2.3对占位符赋值 pst.setString(1, username); pst.setString(2, password); // 2.4执行sql获取ResultSet rs = pst.executeQuery(); // 2.5操作ResultSet if (rs.next()) { user = new User(); user.setId(rs.getInt("id")); user.setEmail(rs.getString("email")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setSex(rs.getString("sex")); user.setTelephone(rs.getString("telephone")); user.setIntroduce(rs.getString("introduce")); } } catch (SQLException e) { e.printStackTrace(); } finally { // 2.6关闭资源 JdbcUtils.closeResource(con,pst,rs); } return user; } |
success.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登陆成功窗口</title> </head> <body> <h1>登陆成功</h1> </body> </html> |
首次进入登录页面的时候发现最上面显示为null,需要先判断一下loginmsg是否为空,在输出.这段代码用el表达式(明天讲)实现起来特别简单.
EL 全名为Expression Language
语法:${标识符}
常用功能:获取各种域中存储的数据
jsp写法:<%=request.getAttribute("loginmsg");>
el写法:${requestScope.loginmsg}
修改之后的login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登陆窗口</title> </head> <body> ${requestScope.loginmsg} <form action="/day10/login" method="post"> USERNAME:<input type="text" name="username"><br> PASSWORD:<input type="password" name="password"><br> <input type="submit" value="登陆"> </form> </body> </html> |