下个星期就要考javaweb了,虽然是上机考,但是这学期摸鱼摸的实在是太严重了,再不抱一抱佛教恐怕连过都是不存在的,乘着抱佛脚的机会,刚好做一做笔记,防止自己的老人记忆把写过的东西全忘了。。。
下面开始正题
实验一 HTML+CSS网页制作
没啥好写的
实验二 JavaScript
表单数据验证(是否为空)
先写一个html,然后写脚本
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function checkForm(form) {
if(form.username.value==""){
alert("Username can not be empty!");
form.username.focus();
return false;
}
if(form.password.value==""){
alert("Password can not be empty!");
form.password.focus();
return false;
}
else
return true;
}
</script>
</head>
<body>
<form name="form_login" action="success.html" method="post" onsubmit="return checkForm(this)">
<table>
<tr>
<td>username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="submit" name="BTNsubmit">
</td>
</tr>
</table>
</form>
</body>
</html>
注意:
- 这里直接把script写在<head>中就可以了,注意最好是挨着</head>写。
- 写html的时候,这里是在一个form 中制作了一个table,一个比较好的思路。<form>中name,action,method,onSubmit四个属性,table中可以不加属性。
- onSubmit中需要写成
onSubmit="return checkForm(this)"
,其中this 是必须要加的,因为script中的函数具有形参,所以这里把自己作为实参调入函数。return也是必须要加的,因为经过测试,不加return虽然弹出警告,但是依然会跳转到successful页面。 - script中是把form当成一个对象来看的。所以才有
form.username.value==""
实验三 JSP常用标签
<jsp:forward></jsp:forward>
先说一下什么是jsp:
JSP(全称JavaServer Pages)是由Sun
Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
<jsp:forward>起到页面跳转的作用,结合<jsp:param>可以向子页面传递一些参数。
用法 <jsp :forward page=“next.jsp”>
JSP内置对象
request、session的使用,验证是否处于登陆状态
request对象的使用:
request对象是jsp内置对象中使用最多的一个对象,其主要作用是接受客户端发送而来的请求信息,如请求的参数、发送的头信息等都属于客户端发来的信息
这里主要介绍如何通过request对象,获取前一个页面的参数,传递到子页面,简易程序如下。
新建三个页面,分别是login.jsp,check.jsp,success.jsp,用户通过login.jsp登陆,表单信息经过check.jsp判断,成功则传入success.jsp,失败则重新回到login.jsp。
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<form name="form_login" action="check.jsp" method="post">
<table>
<tr>
<td>username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="submit" name="BTNsubmit">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String s_name = "";
String s_pass = "";
s_name = request.getParameter("username");
s_pass = request.getParameter("password");
if("admin".equals(s_name) && "pass".equals(s_pass)) {
// response.sendRedirect("success.jsp");
request.setAttribute("username", s_name);
%>
<jsp:forward page="success.jsp"/>
<%
//response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
//response.setHeader("Location", "success.jsp");
}
else{
// response.sendRedirect("login.jsp");
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "login.jsp");
}
%>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>Hello! <%=request.getAttribute("username")%></h1>
</center>
</body>
</html>
注意:
- 经过测试,按照正确的输入后,页面可以成功显示,且success.jsp页面中可以获取到用户的用户名,一开始的时候,success.jsp页面总是显示hello,null,令我百思不得其解,后来发现,原因很简单,实验指导书上给的代码是
request.getParameter("username")
,而success.jsp的上一级页面check.jsp中,并没有向success.jsp页面传递参数,所以获取用户名失败。这时只需要在check.jsp页面中,使用request.setAttribute("username",s_name)
手动设置一个name=username的参数就可以了,然后再在success.jsp页面中使用request.getAttribute("username")
即可。
使用这种方法时需要注意,在跳转页面的时候需要用<jsp:forward page="success.jsp"/>
方式跳转,因为这种方式,是在服务器段进行的跳转,不会改变地址栏信息
解释如下:
JSP中向子页面传递参数的方式:
查看来源
(1).一种是重定向跳转,超连<a>
就是一种重定向跳转,这样的跳转request对象是传不到下一个页面的,下一个页面得到的request对象是一个新的对象,而不是上一个页面传过来的就得不到上一个页面的数据.如果你想通过这种方法跳转的话,那就要用<a href="a.jsp?参数名=参数值">
,在下一个页面用request.getParameter("参数名")
得到值
(2).另一种跳转是转发,这种跳转request对象就被传往下一个页面,可以用<jsp:forward page="/a.jsp"/>
,这样你可以把参数用request.setAttribute()
方法存进request对象里,再到下一个页面用request.getAttribute()
得到参数.
两种方法最明显的区别是,重定向跳转当你从a.jsp到b.jsp页面的时候,地址栏的地址已经由a.jsp变为b.jsp;相反,转发跳转当你从a.jsp到b.jsp页面的时候,地址栏仍然是a.jsp的地址
session对象的使用:
session对象的主要用处是完成用户的登陆(login)、注销(logout)等常见功能,每一个session对象都表示不同的访问用户。
!!!!!!无法正常运行原因待查!!!!!!
验证是否处于登陆状态
JavaBean 技术
JavaBean是使用Java语言开发的一个可重用的组件,在JSP开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。
JavaBean入门实验
使用JavaBean时,需要将.java文件放在WEB-INF文件下的classes目录中(如果没有,则需要手动创建)
JavaBean:
package review5;
public class Person {
private String name = "";
private int age = "0";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int setAge(int age) {
this.age = age;
}
public void getAge() {
return age;
}
}
jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/*
Person tom = new Person();
tom.setAge(20);
tom.setName("Tom");
*/
%>
<jsp:useBean id="tom" class="review5.Person" scope="page"></jsp:useBean>
<jsp:setProperty name="tom" property="name" value="jim"></jsp:setProperty>
<jsp:setProperty name="tom" property="age" value="33"/>
<h1>
name:<jsp:getProperty property="name" name="tom"/><br>
name:<jsp:getProperty property="age" name="tom"/><br>
</h1>
</body>
</html>
!!!!!!age部分没有运行出来原因待查!!!!!!
表单数据绑定JavaBean
利用表单数据绑定JavaBean,需要两个jsp页面,第一个页面提交表单,第二个页面进行展示,和一个.class文件用来写JavaBean的代码。绑定数据的逻辑比较简单,login.jsp中的表单提交到loginhandler.jsp中,loginhander.jsp中的<jsp:useBean id="loginBean" class="review6.login"></jsp:useBean>
代码使用JavaBean,通过<jsp:setProperty property="username" name="loginBean" param="username"/>
设置相应的数据,对password执行同样的操作,从而完成数据绑定。再使用<jsp:getProperty property="username" name="loginBean"/>
展示出所绑定的数据
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<form name="form_login" action="loginhandler.jsp" method="post">
<table>
<tr>
<td>username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="submit" name="BTNsubmit">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
loginhandler.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="loginBean" class="review6.login"></jsp:useBean>
<jsp:setProperty property="username" name="loginBean" param="username"/>
<jsp:setProperty property="password" name="loginBean" param="password"/>
<h1>
Your username is:<jsp:getProperty property="username" name="loginBean"/><br>
Your password is:<jsp:getProperty property="password" name="loginBean"/>
</h1>
</body>
</html>
login.java
package review6;
public class login {
private String username = "";
private String 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;
}
public login() {
}
}
注意:
- 在写JavaBean的时候需要写一个无参的构造函数
jsp:setProperty
有四种动作元素
属性 | 描述 |
---|---|
name | name属性是必需的。它表示要设置属性的是哪个Bean |
property | property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法 |
value | value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换 value和param不能同时使用,但可以使用其中任意一个。 |
param | param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。 |
此处注意:value和param属性不能同时使用,但可以使用其中任意一个。
value是自定义属性的值,param是将请求参数(比如前端表单数据) 作为值 注入到该property中。
另外,param的值应该对应前端 请求参数的name属性名,表明哪个请求参数将注入到该property中。
查看来源
验证JavaBean生命周期
JavaBean数据库应用
使用实验八提供的MySQL数据库脚本备份
看到这个说明的时候,我的内心是奔溃的,实验八是做一个新闻发布系统,本身就很困难了,再看到这个读起来实在不怎么通顺的要求的时候,我沉思了一会,本来想修改一下好让大家能看懂接下来我要写什么,但后来还是放弃了,毕竟我也不知道我待会要写什么,先按要求做实验吧