JSP 工作原理
- 与servlet相比是先将源代码部署后在编译成class文件,后者是先将源代码编译class文件,再部署到服务器。
JSP 组成
模板数据+元素即HTML+JAVA
JSP输出&注释&声明
//输出
out.println();
<%= %>
//注释
//
</**/> //java注释
<%--jsp注释--%>
<%! 声明%>
<body>
<h1>九九乘法表</h1>
<hr>
<br>
<%!String print99() {
String s = new String();
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
s += i + "*" + j + "=" + (i * j) + " ";
}
s += "<br>";
}
return s;
}%>
<%=print99()</body>
通过脚本方式实现
<body>
<h1>九九乘法表</h1>
<hr>
<br>
<%
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
out.println(i + "*" + j + "=" + (i * j) + " ");
}
out.println("<br>");
%>
</body>
JSP指令&JSP动作
JSP指令
- page指令
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- 遗留问题:设置如下中文出现乱码。
<%@ page language="java" import="java.util.*" contentType="text/html; charset = utf-8"%>
JSP动作
- 遗留问题,学习指令与动作的区别。
jsp内置对象
- 不需用通过new创建的对象,可直接调用。
response对象
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
//直接用脚本写HTML
out.println("<h1>response练习</h1><hr><br>");
//out.flush();
//创建输出流对象
PrintWriter outer = response.getWriter();
//通过输出流对象进行输出
outer.println("使用out.flush()才能显示到后面来");
response.sendRedirect("reg.jsp");//请求重定向,要关闭前面的out.flush();
%>
- 下面两句有区别
response.sendRedirect("request.jsp");//要关闭前面的out.flush();
request.getRequestDispatcher("request.jsp").forward(request, response);
session 内置对象
练习项目中的sessionpage1 sessionpage2
- sessionpage1
<body>
<%
//创建时间格式方便显示
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date d = new Date(session.getCreationTime());//通过jsp内置对象session获取创建时间
//可以通过键值对进行存储信息
session.setAttribute("username", "eric");
session.setAttribute("sex", "man");
%>
session 的内置对象 <hr><br>
session 创建时间:<%=dateFormat.format(d) %><br/><!-- //格式化时间输出,1 创建格式 2产生时间 3格式化时间 -->
session 唯一ID号:<%=session.getId() %><br/>
获取用户名:<%= session.getAttribute("username") %><br>
<%
session.setAttribute("page1Id", session.getId());
%><br/>
<a href = "sessionpage2.jsp" target ="_blank">这是一个超链接指向sessionpage2</a>
<%
//session.setMaxInactiveInterval(10);//设置当前会话的有效期为10秒,时间一到重新创建会话,之前的存储信息丢失
session.invalidate();//销毁会话
%>
</body>
- sessionpage2
<body>
This is sessionpage2 page. <br>
session id is :<%= session.getId() %>
<%
if (session.getAttribute("page1Id") == session.getId()){
out.println("与之前的session的id相同");
}
%><br/>
获取session中所有存储的信息的名称:<%
String [] names = session.getValueNames();
for(String str : names){
out.println(str+"  ");
}
%>
</body>
application对象
<body>
<h1>application练习</h1>
<hr>
<br>
<%
application.setAttribute("name", "eirc");
application.setAttribute("age", 25);
application.setAttribute("isSingle", true);
%>
<%=application.getAttribute("name")%><br>
<%=application.getAttribute("age")%><br>
<%=application.getAttribute("isSingle")%><br> 都有哪些属性:<%
Enumeration enu = application.getAttributeNames();//返回该对象,迭代器遍历输出
while (enu.hasMoreElements()) {
out.println(enu.nextElement() + "<br>");
}
%><br> 还可以获取引擎版本号:<%=application.getServerInfo()%>
</body>
pageContext对象
<body>
<h1>pageContext 练习</h1>
<%
pageContext.getSession().getAttribute("username");/* //可以获取session中的所有属性。 */
%>
<%-- <% pageContext.forward("index.jsp");//跳转页面 %> --%>
<%
pageContext.include("index.jsp");//在此处包含该页面的内容
%>
</body>
表单中get与post的区别
- get使用
<body>
<h1>用户登录</h1>
<hr>
<form action ="dologin.jsp" name ="login" method ="get">
<!--form是指明表单信息的 -->
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
- 采用post进行处理的效果
阶段项目
项目工程文件
- login.jsp
<body>
<div id="container">
<!--简单布局登录页面,具体还要学习前端进行美化 -->
<div class="logo">
<a href="#"><img src="assets/logo.png" alt="" /></a>
</div>
<div id="box">
<form action="dologin.jsp" method="post">
<p class="main">
<label>用户名:</label> <input name="username" value="" />
<label>密码:</label>
<input type="password" name="password" value="" />
</p>
<p class="space">
<input type="submit" value="登录" class="login"
style="cursor: pointer;" />
</p>
</form>
</div>
</div>
</body>
- dologin.jsp
<body>
<h1>This is my dologin page.</h1>
<br>
<%
String name = request.getParameter("username");
String password = request.getParameter("password");
if (name.equals("admin") && password.equals("admin")) {
session.setAttribute("loginUser", name);
//跳转至登录成功页面,并向后传递对象,通过提问搜索将后面传递对象作用弄清楚。
/* request.getRequestDispatcher("login_success.jsp").forward(request, response); */
response.sendRedirect("login_success.jsp");//体会与上面的区别
} else {
//跳转至登录失败页面
response.sendRedirect("login_failure.jsp");
}
%>
</body>
JavaBean
javabean设计原则
- 公有类
- 无参公有构造方法
- 属性私有
- 属性都有自己的getter与setter方法。
public class Students {
public Students() {
};
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
javabean动作元素
- javabeanTest.jsp
<body>
<h1>javabean test</h1>
<hr>
<br> //实例化javabeans的标志符,class是指javabeans通过哪个类实例化的,scope是指作用范围,
<jsp:useBean id="myUsers" class="javaBeanTest.users" scope="page"></jsp:useBean>
<%=myUsers.getName()%>
<%=myUsers.getAge()%>
</body>
- users.java
package javaBeanTest;
public class users {
public users() {
};
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
setProperty使用
- 首先以后关机一定要将打开的软件保存并关闭之后进行,否则资料丢失真的很烦。
- setProperty是为javabean对象存储数据的
getProperty使用
javabeans的四个作用范围
项目地址,练习其中的login.jsp/dologin.jsp/tsetScope.jsp
Model1
Cookies小练习
小项目
include
指令
- 将包含进来的页面在当前显示。
<%@ include file="" %>
动作
forward动作
<jsp:forward page="user.jsp"/>
//或
<%
request.getRequestDispatcher("user.jsp").forward(request, response);
%>
//user中获取变量值
username = request.getParameter("username");