JavaWeb 实验复习指导

下个星期就要考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! &nbsp; <%=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有四种动作元素
属性描述
namename属性是必需的。它表示要设置属性的是哪个Bean
propertyproperty属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法
valuevalue 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换
value和param不能同时使用,但可以使用其中任意一个。
paramparam 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

此处注意:value和param属性不能同时使用,但可以使用其中任意一个。

value是自定义属性的值,param是将请求参数(比如前端表单数据) 作为值 注入到该property中。

另外,param的值应该对应前端 请求参数的name属性名,表明哪个请求参数将注入到该property中。
查看来源

验证JavaBean生命周期

JavaBean数据库应用

使用实验八提供的MySQL数据库脚本备份

看到这个说明的时候,我的内心是奔溃的,实验八是做一个新闻发布系统,本身就很困难了,再看到这个读起来实在不怎么通顺的要求的时候,我沉思了一会,本来想修改一下好让大家能看懂接下来我要写什么,但后来还是放弃了,毕竟我也不知道我待会要写什么,先按要求做实验吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值