入职必备技能(四)表象JSP&逻辑Servlet

JSP语法基础

程序脚本

<% 程序脚本 %>

声明语法

<%! String str="LiuJinliang"; %>

输出表达式

实例1
<%! int i = 10;%>
<%= i %>
实例2
<%= getInfo() %>

包引入

<%@ page import = "java.util.*, java.io.*" %>

JSP的作用域

这里我只想说对我有用的东西:request作用域 以及 session作用域。
当然,本质上来说,这些作用域里面的变量都是servlet的变量。

request作用域:作用于当前页面以及通过request的请求转发转发方法跳转的下一个页面。set和get方法分别是:request.setAttrubute(“name”, “liujinlinag”),request.getAttribute(“name”);
session作用域:作用于当前页面及其有关联的所有页面,这不用说,作用域很大,基本上只要不关闭浏览器,session就一直在。
当然,如果仅是参数的传递,我们大可以使用表单提交的get及post方法

JSP程序的执行过程

这里写图片描述

JSP内置对象

out(代表输出流对象)

相较于response输出功能,添加了buffer机制,但是设置编码等还需要使用response。

response(封装返回到Http客户端的输出,向页面作者提供设置响应头标和状态吗的方式)

可以通过response对象来组织发送到客户端的数据,需要向客户端发送文字时直接使用,是HttpServletResponse的实例.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%! String str = "hello world"; %>
    <% response.getWriter().print(str); %>
</body>
</html>

作用域:

request(代表客户端的请求)

request,自然就算是不同的request作用域了,但是相邻的web资源也是可以同时使用一个request作用域的。在request作用域里面设置变量的方式为<% request.setPa %>

人事管理系统
利用集合模拟数据库信息
用户登录:查看用户名及密码是否存在
request对象API获取请求数据
out对象输出信息
response对象输出相应信息
logon.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>人事管理系统</title>
</head>
<body>
    <h3 align="center">人事管理系统登录页面</h3>
    <hr>

    <!-- 代表服务器端处理程序,根据username获取变量 -->
    <form action="controller.jsp">
        <table align="center">
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密    码:</td>
                <td><input type="text" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form>
</body>
</html>
controller.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="natapp.liujinliang.*, natapp.util.*" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <% 
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        Emp emp = new Emp(username, password);
        boolean flag = DBUtil.selectEmpByAccountAndPassword(emp);

        if (flag == true) {
            out.println("登录成功");
        } else {
            out.println("登录失败");
        }
    %>
</body>
</html>

剩余的代码是简单的java代码,下面给出:

package natapp.liujinliang;

public class Emp {

    private String username;
    private String password;
    public Emp(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    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;
    }
}
package natapp.util;

import java.util.HashMap;
import java.util.Map;

import natapp.liujinliang.Emp;

public class DBUtil {
    public static Map<String, Emp> map = new HashMap<String, Emp>();

    static {
        map.put("1", new Emp("Gene", "111"));
        map.put("2", new Emp("Lin", "111"));
        map.put("3", new Emp("Yue", "111"));
        map.put("4", new Emp("Yi", "111"));
    }

    // 判断用户名密码是否正确
    public static boolean selectEmpByAccountAndPassword(Emp emp) {
        boolean flag = false;
        for (String key : map.keySet()) {
            Emp e = map.get(key);
            if (emp.getUsername().equals(e.getUsername()) && emp.getPassword().equals(e.getPassword())) {
                flag = true;
                break;
            }
        }
        return flag;
    }
}

pageContext

1、通过forward完成请求转发
2、通过include完成页面包含
3、通过getXX来获取其他内置对象

page(代表了正在运行的由JSP文件产生的类对象)

JSP的实质就是一个Servlet

session

会话:代表用户第一次进入当前系统知道退出系统或关闭浏览器,在此期间与服务器的一系列交互。
主要用于会话跟踪

config

用来获取配置信息(是不是想起了web.xml文件)

exception(只能在错误页面中使用,如404.jsp)

用来获取异常信息

抛出异常并指定处理页面
<%page …… errorpage="2002.jsp" ……%>
……
<% ……throw new Exception("密码错误") …… %>

注意需要在2002.jsp页面中设置是否为错误处理页面
<% …… isErrorpage="true" …… %>

application(一个web程序对应一个application对象)

提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径方式,也就是用来获取全局信息
application作用域:web生命周期

请求重定向与请求转发

1、转发实现是HttpServletRequest的方法,重定向调用的是HttpSServletResponse方法。
2、转发时浏览器地址栏不会改变,重定向地址栏会变化。
3、转发时浏览器只请求一次服务器,重定向2次。

猜你喜欢

转载自blog.csdn.net/qq_20330063/article/details/80419760