JSP核心技术

一、JSP的概述

1.JSP的概念

JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为xxx.jsp。
与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。

2.JSP的示例

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
	<title>Hello Time</title>
</head>
<body>
	现在的时间是:<%= new Date()%>
</body

3.JSP与Servlet的关系

JSP与Servlet的关系

二、JSP的语法

1.JSP语法结构

● 声明区
● 程序代码区
● 表达式
● 注释
● 指令和动作
● 内置对象

2.声明区

● 基本语法:
  <%! %>
● 说明:可以定义全局变量、方法、类。

<%!
	int i;
	public void show(){
     System.out.println("show方法");
  }
%>

3.程序代码区

● 基本语法:
  <%程序代码区%>
● 说明:可以定义局部变量以及放入任何的Java程序代码。

<%
    int ib = 20;
    for (int i = 0; i < 3; i++) {
      System.out.println(i);
    }
%>

4.表达式

● 基本语法:
  <%=… …%>
● 说明:可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的表达式。
● 注意:不需要以;结束,只有一行

<%=“hello world”%>
<%=i+1%>

● 案例

使用for循环输出一个html语言的表格,具体表头如下:
id name age salary
1 1 1 1
2 2 2 2
...
5 5 5 5


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>绘制表格</title>
</head>
<body>
    <table>
        <tr>
            <td>id</td>
            <td>name</td>
            <td>age</td>
            <td>salary</td>
        </tr>
        <%
            for (int i = 1; i < 6; i++) {
        %>
        <tr>
            <td><%= i %></td>
            <td><%= i %></td>
            <td><%= i %></td>
            <td><%= i %></td>
        </tr>
        <%
            }
        %>
    </table>
</body>
</html>

5.注释

格式:
<!--… …--> HTML文件的注释,浏览器可以查看到
<%--… …--%> JSP文件的注释,浏览器看不到
<%//… …%> Java语言中的单行注释,浏览器看不到
<%/*… …*/%> Java语言中的多行注释,浏览器看不到
注释的内容不会被执行

6.指令和动作

● 指令格式:
   <%@指令 属性=“属性值”%>
● 指令的属性可以设定多个。
● JSP常用指令有:page、taglib、include。

①page指令

● page指令用于导包和设置一些页面属性,常用属性如下:

import 导入相应的包,惟一允许在同一文档中多次出现的属性
contentType 设置Content-Type响应报头,标明即将发送到浏览器的文档类型
pageEncoding 设置页面的编码
language 指定页面使用的语言
session 控制页面是否参与HTTP会话
errorPage 处理当前页面中抛出但未被捕获的任何异常
isErrorPage 当前页是否可以作为其他页面的错误处理页面

②taglib指令

● taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件。

<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@taglib uri=“tagLibary” prefix=“prefix”%>

③include指令

● include指令用于引入另一个JSP程序或HTML文件等,格式如下:

<%@include file=“被包含的文件地址%>

④jsp:include/jsp:param

● jsp:include动作用于引入另一个JSP程序或HTML文件等。
● 执行到include时,被include的文件才会被编译。
● 如果include的是jsp文件,那它不会被转换成Servlet文件。

<jsp:include page=“URLSpec” flush=“true”/>
<jsp:include page=“URLSpec” flush=“true”>
	<jsp:param name=“key” value=“value”/>
</jsp:include>

⑤include指令和include动作的区别

● include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行(静态包含)。
● include动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入(动态包含,推荐)。

⑥jsp:forward/jsp:param

● forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理。

<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<!-- 用于指定参数和其对应的值 -->
<jsp:param name=“key” value=“value”/>
</jsp:forward>

三、JSP内置对象(重点)

1.基本概念

● 在JSP程序中有9个内置对象由容器为用户进行实例化,程序员可以不用定义就直接使用这些变量。
● 在JSP转换成Servlet后,会自动追加这些变量的定义,使用内置对象可以简化JSP的开发。

2.对象名称

在这里插入图片描述

3.out内置对象

● out内置对象是一个缓冲的输出流,用来给客户端输出信息。
● 常用方法
out常用方法

4.request内置对象

● request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例。
● 该对象的属性值只在一个请求中保存。
● 常用方法
request常用方法

5.response内置对象

● response对象用于给客户端相应输出处理结果,它是HttpServletResponse接口的一个实例。
● 经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL。
● 常用方法
respons常用方法

6.session内置对象

● session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间可以借助session对象存储信息,它是HttpSession类型的一个实例。
● 该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都可以访问。
● 常用方法
session常用方法

7.application内置对象

● application对象是一个web程序的全局变量,它是ServletContext类型的一个实例。
● 在整个服务器上保存数据,所有用户共享。
● 常用方法
application常用方法

8.pageContext内置对象

● pageContext对象是PageContext类型的对象,可以使用这个对象来管理其他的隐含对象。
● 只在一个页面中保存数据。
● 常用方法
pageContext常用方法

9.exception内置对象

● exception 对象是Throwable的实例,表示的是JSP的异常信息。
● 如果要使用它,必须将对应页面page指令的isErrorPage属性设置成true。
● 单个页面的处理方式

<%@page errorPage="error.jsp" %>

● 在web.xml中配置统一的异常处理页面。

<error-page>
	<exception-type>java.lang.Throwable</exception-type>
	<location>/error.jsp</location>
</error-page>

四、JavaBean组件

1.基本概念

● JavaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复代码,使整个 JSP 代码的开发更加简洁。
● JavaBean本质上就是Java类,通常要求如下:
  属性:全部私有化,通过get和set方法进行访问。
  方法:必须是public关键字修饰。
  构造器 :必须有无参构造方法。

2.使用方式

● 使用jsp:useBean的方式创建javaBean实例

<jsp:useBean id="对象名" scope="保存范围" class="包名.类名" />
保存范围有:page|request|sessin|application,默认为page范围。

● 使用jsp:setProperty的方式设置javaBean的属性值

<jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>

● 使用jsp:getProperty的方式获取javaBean的属性值

<jsp:getProperty name="对象名" property="属性名"/>

3.保存范围

JavaBean的保存范围有page、request、session以及application,默认是page范围。

4.删除方式

<%
	内置对象.removeAttribute(“JavaBean的名字”);
%>

五、MVC设计模式

1.基本概念

● MVC是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了代码的可维护性。
● M:主要用于封装业务数据的JavaBean(Bean) 和 业务逻辑的JavaBean(Service)及访问数据库的DAO对象。
● V:主要负责数据收集 和 数据展现,通常由JSP文件完成。
● C:主要负责流程控制 和 页面跳转,通常由Servlet完成。

2.基本模型

MVC设计模式基本模型

<%-- login.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录</title>
  </head>
  <body>
    <form action="login" method="post">
      用户名:<input type="text" name="userName"/><br/>&nbsp;&nbsp;&nbsp;码:<input type="text" name="password"/><br/>
      <span style="color: red">
        <%= request.getAttribute("error")==null?"":request.getAttribute("error")%><br/>
      </span>
      <input type="submit" value="登录"/>
    </form>
  </body>
</html>
<%-- main.jsp --%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>欢迎<%= ((User)session.getAttribute("user")).getUserName()%>使用</h1>
</body>
</html>
//servlet层
//LoginServlet.java
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        System.out.println("获取到的用户名:" + userName);
        System.out.println("获取到的密码:" + password);

        //创建UserService类型对象实现数据的校验功能
        UserService userService = new UserService();
        User user = userService.userLoginService(new User(userName, password));
        if (null == user){
            System.out.println("登陆失败,用户名或密码错误");
            request.setAttribute("error","登录失败,用户名或密码错误");
            //实现服务器跳转 共享request 和 response
            RequestDispatcher requestDispatcher = request.getRequestDispatcher("login.jsp");
            requestDispatcher.forward(request,response);
        }else {
            System.out.println("登陆成功");
            //将登录成功的用户信息放入session对象中实现多个请求共享
            request.getSession().setAttribute("user",user);
            //实现客户端的跳转
            response.sendRedirect("main.jsp");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
//dao层

//UserDaoFactory.java
public class UserDaoFactory {
    //通过静态工厂方法模式实现UserDao实现类对象的创建并返回
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
//UserDao.java
public interface UserDao {
    public abstract User userLogin(User user);
}
//UserDaoImpl.java
public class UserDaoImpl implements UserDao{
    @Override
    public User userLogin(User user) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //1.获取数据库连接
            connection = DBUtil.getConnection();
            //2.准备sql语句
            String sql = "select * from t_user where userName= ? and password = ?";
            //3.执行sql语句获取返回值并返回
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,user.getUserName());
            preparedStatement.setString(2,user.getPassword());
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()){
                User tu = new User(resultSet.getString("userName"),resultSet.getString("password"));
                return tu;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                //4.释放资源
                DBUtil.closeResource(connection,preparedStatement);
                if (resultSet != null){
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}
//util层
//DBUtil.java
public class DBUtil {
    private static String jdbcName; //用于描述驱动信息
    private static String dbUrl; //用于描述URL信息
    private static String dbUserName; //用于描述用户名信息
    private static String dbPassword; //用于描述密码信息
    //静态成员初始化操作
    static {
        jdbcName = "com.mysql.jdbc.Driver";
        dbUrl = "jdbc:mysql://localhost:3306/db_web";
        dbUserName = "root";
        dbPassword = "123456";
        try {
            Class.forName(jdbcName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection() throws SQLException {
        Connection con = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
        return con;
    }

    //关闭连接
    public static void closeResource(Connection con, PreparedStatement ps) throws SQLException {
        if (null != con){
            con.close();
        }
        if (null != ps){
            ps.close();
        }
    }
}
//bean层
//User.java
public class User {
    private int id;
    private String userName;
    private String password;

    public User() {
    }

    public User(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
//service层
//UserService.java
public class UserService {
    private UserDao userDao;
    //自定义成员方法实现根据参数指定的User对象调用Dao层实现登录功能
    public UserService(){
        this.userDao = UserDaoFactory.getUserDao();
    }
    public User userLoginService(User user){
        return userDao.userLogin(user);
    }

}
//UserServiceTest.java
public class UserServiceTest {
    public static void main(String[] args) {
        UserDao userDao = new UserDaoImpl();
        UserService userService = new UserService();
        User admin = userService.userLoginService(new User("admin", "123456"));
        System.out.println("找到的数据为" + admin);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值