企业实践课

eclipse导入文件夹方法:file-import-General-Existing Projects into Workspace-Next-Browse

一、
基本思路:
由老师已经给出的许多jsp页面开始
1.首先需要一个controller文件夹来存储各种请求实现的类,即我们的Sevelet。
2.在Sevelet中要明确用户的请求是要干什么?因此再创建一个service文件夹来存储用户想要干什么,其中包括几个接口更直观的表达用户想要干什么,然后是实现接口的类,表示怎么干
3.在service文件夹中的类在实现用户请求时,可能需要用到数据库,因此我们再创建一个dao文件夹,其中包括几个接口更直观的表示要干什么,然后是实现接口的类,表示怎么干。根据处理结果一层一层的返回,dao层返回到service层,再返回到sevelet层。可能你会觉得有点多此一举了,数据库的东西也可以直接在service层实现,但是放在dao层更直观。
4.当然我们还需要一些实体类,因此再创建一个entity文件夹用来存储类,比如User类,注意在类中通过选中属性右击-Source-Get,Set 设置一下。
5.当想要将一些常用的代码封装起来,比如每次数据库的连接打开操作,关闭操作,我们就可以建立一个utils文件夹,里面放着我们的常用工具类。然后当使用的类中要包含这些操作时,继承自工具类即可。

二、
el表达式: 可以方便的从域(page,request,session,application)中取得数据
基本形式为以下
取request域中的数据 ${requestScope.数据名 }
取session域中的数据 ${sessionScope.数据名}
取application域中的数据 ${applicationScope.数据名}
也可以直接取数据名,即 ${数据名} 但此时如果每个域中都没有重名则推荐这种方式,若是有重名的话,他会先从request域中查找,然后是session中查找,最后application中查找。即若是requset域和session域有重名的数据时,我们要想取得session中的数据必须采用 ${sessionScope.数据名}
数据也可以是一个类,我们也可以通过 ${数据名.属性名}得到对应的属性值

${pageContext.request.contextPath}
通过这样一句话取得我们的项目名称
这个用法主要用在什么地方呢?比如当我们在项目下的一个user文件夹下建了一个Login.jsp文件,Login.jsp文件中实现了项目的LoginSvL请求,

<form action="${pageContext.request.contextPath}/LoginSvL" method="get">

由于Login.jsp是在user文件夹下,如果不加我们的项目名的话,他会默认跳转到web01/user/LoginSvL,然而我们的LoginSvL是位于项目的src下的,地址应为web01/LoginSvL,就会报找不到路径的错误,因此要加上这句话获取项目名。

同时el表达式还有几个特点,就是可以实现${}中的运算等
比如 $ {10 + 10} 会输出20, ${20>10}会输出true
${empty user},会判断user是否为空

jstl表达式:
第一步引入jar包到WEB-INF的lib中
第二步在jsp文件的<!DOCTYPE 上一行引入标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

jstl跟存储相关的三个标签,输出数据、设置数据、删除数据(不常用)
el表达式只能取数据,不能存数据,jstl可以存数据,一般情况下都是用el表达式和jstl表达式混合使用,在运用jstl表达式的同时通过el表达式取数据。

<c:out value="123456"></c:out>
<c:set var="username" value="张三" scope="request"></c:set>
<c:remove var="username"/>

jstl实现if语句

<c:if test="${20>10}">//如果test=true,就会继续执行下面代码,如果=false,就不执行
true
</c:if>

jstl实现if-else语句

<c:choose>
	<c:when test="${20>10}">//when就相当于我们的if
	true
	</c:when>
	<c:otherwise>//otherwise就相当于我们的else
	false
	</c:otherwise>
</c:choose>

jstl的循环标签

//第一种是仅当一个for循环来使用
<c:foreach var="i" begin="1" end="10"> //表示i从1开始,遍历到10
${i}<br/> //会输出1-10
</c:foreach>
//一般情况下我们都是用来循环取一个集合中的数据
<%
	List<String> list=new ArrayList<String>();
	list.add("1");
	list.add("11");
	list.add("111");
	list.add("1111");
	list.add("11111");
	list.add("111111");
	request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="u">//items表示集合,注意通过el表达式取得,var表示迭代的当前元素
 ${u}<br/> //输出集合中的每一个元素
</c:forEach>

json格式的数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。

JSON语法规则:
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象表示为键值对,一般用花括号来表示对象。比如:

{"isSuccess":isExist}//可以由前面的key得到后面的value。注意键名需要用""包裹,后面紧跟:

数组中的数据用逗号分隔,用方括号来表示数组。比如:

[
{"id":1},
{"name":张三},
{"age":24},
{"sex":}
]

Ajax的使用
首先要引入jQuery脚本库,即在使用Ajax的jsp页面上方添加一句代码

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.12.4.min.js"></script>
//其中的jquery-1.12.4.min.js是我们导入的文件

一般ajax都是放在方法里面,下面是一个注册页面判断用户名是否可用的方法:

function verifyUsername(){
	$.ajax({
		url:("${pageContext.request.contextPath}/verifyusername"),//表示请求的地址
		type:"post", //表示请求的类型
		data:{ //表示传送到服务端的数据
			username:$("input[name='username']").val()//获取对应控件和name值的属性的value值,jQuery可通过$("")这种方式获取对应属性控件
		},
		dataType:"json", //表示传输数据的类型,我们这里是json
		success:function(msg){ //表示服务端返回的数据
			if(msg.isSuccess==true) //由于采用的是json,键值对,可以这样来获取值
			{
				$("#msg").html("<font color='green'>用户名可用</font>");
				//通过$("#id")找到对应控件设置。JQuery的$用法
			}
			else
			{
				$("#msg").html("<font color='red'>用户名不可用</font>");
			}
		}
	})
}

然后我们的请求页面是:

@WebServlet("/verifyusername")
public class VerifyUsername extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username=request.getParameter("username");//接收传来的数据
		IUserService service=new UserServiceImpl();
		boolean isExist = service.isExistUsername(username);//判断是否可用
		response.getWriter().append("{\"isSuccess\":"+isExist+"}"); //以json的对象形式传递回去,注意是{"key":value};
	}

}

一般情况下我们会是在用户名输入框失去焦点时来判断是否符合,因此我们通过blur()方法调用verifyUsername()方法:

$(function(){// jsp页面完全加载完成后就会执行这个方法
	$("input[name='username']").blur(verifyUsername); //获取到该对应id的属性失去焦点后执行的操作
});

猜你喜欢

转载自blog.csdn.net/henulmh/article/details/105990282
今日推荐