Javaweb学习总结(五)

1.JSP

Java server page
用户角度:就是网页
程序员角度:就是一个servlet
-----为什么会有jsp?
html多数情况下来显示静态内容,一成不变的
有些动态数据需要查询数据库,然后在网页上显示,html不支持写Java代码,jsp可以写

2.怎么写jsp

----指令的写法
<%@ 指令名字%>
----1.page指令
language:表明jsp页面中可以写Java代码
contenttype:说明文件类型,告诉浏览器我是什么内容类型,以及使用什么编码
pageEncoding jsp的内容编码
extends 用于指定jsp翻译成Java文件后,继承的父类是谁,一般不用改
session 里面只能写true或false 用于控制在这个jsp页面里面,能否直接使用session对象
具体区别:看翻译后的Java文件
errorpage:指的是错误的页面,里面写错误页面的路径
iserrorpage:上面的errorpage用于指定错误的时候跑到哪个页面,这个iserrorpage就是声明
某一个页面到底是不是错误的页面
----2.include指令
包含另外一个jsp的内容进来 <%@ include file=“other.jsp”%>
背后就是把另外一个页面的所有内容拿过来一起输出,所有的标签元素都包含进来
----3.taglib指令
<%@ taglib prefix="" url="" %>
url:标签库路径 prefix:标签库的别名

3.jsp动作标签
        <jsp:include page=""></jsp:include>
        <jsp:param value="" name=""/>
        <jsp:forward page=""></jsp:forward>
<jsp:include page="other.jsp"></jsp:include>  
动态包含指定页面,不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来
<jsp:forward page="other.jsp"></jsp:forward>:
前往哪一个页面等同于请求转发的代码
request.getRequestDispatcher("other.jsp").forward(request, response);
<jsp:param value="" name=""/>:
在包含或者跳转某个页面的时候加入这个参数
例:  <jsp:forward page="other.jsp">
          <jsp:param value="beijing" name="address"/>
      </jsp:forward>
在other.jsp中获取参数
             <br>收到的参数是:<br>
             <%=request.getparameter("address")%>
4.jsp内置对象

内置对象:就是我们可以直接在jsp页面中使用这些对象,不用创建
—pagecontext
—session
—request
—application
以上四个是作用域对象
作用域:表示这些对象可以存值,他们的取值范围有限定 setattribute getattribute

    例:
            <%
            pageContext.setAttribute("name","page");
            application.setAttribute("name","session");
            session.setAttribute("name","request");
            request.setAttribute("name","application");        
            %>
            取出4个作用域中的值<br>
            <%=request.getAttribute("name") %>
            <%=session.getAttribute("name") %>
            <%=application.getAttribute("name") %>
            <%=pageContext.getAttribute("name") %>

四个作用域的区别
pagecontext:类型【pagecontext】(页面的上下文)
作用域仅限于当前页面,还可以获取到其他八个内置对象
request:类型【httpservletrequest】
仅限于一次请求,只要服务器对该请求做出了响应,这个域中存的值就没有了
session:类型【httpsession】
作用域限于1次会话(多次请求与响应)当中
application:类型【servletcontext】(servlet的上下文)
整个工程都可以访问,服务器关闭就不能访问了
response 【httpservletresponse】
既有out,又有response:先输出response本身要输出的内容,然后才是输出out里面的内容
out 【jspwriter】
page 【object】----就是这个jsp翻译成的Java类的实例对象
config 【servletconfig】
exception【throwable】

5.EL表达式

是为了简化在jsp里面写的那些Java代码
------写法格式
${ 表达式 }

             例:取出4个作用域中存放的值
     <br>使用EL表达式取出作用域中的值<br>
                  没有快捷键 
            ${pageScope.name }
            ${requestScope.name }
            ${sessionScope.name }
            ${applicationScope.name }
    ------------------------------------------------------------------
            <%
            String[] a={"aa","bb","cc","dd"};
            pageContext.setAttribute("array",a);
            %>
        例:    <br>使用EL表达式取出作用域中数组的值<br>
            ${array[0] },${array[1] },${array[2] },${array[3] }  
            
        例:    <br>使用EL表达式取出作用域中集合的值<br>
             <%
             ArrayList list=new ArrayList();
             list.add("11");
             list.add("22");
             list.add("33");
             list.add("44");
             
            pageContext.setAttribute("list",list);
            %>
            ${list[0] },${list[1] },${list[2] },${list[3] }
        例:    <br>使用EL表达式取出作用域中map的值<br>
            <%
            Map map=new HashMap();
            map.put("name", "zhangsan");
            map.put("age", "18");
            map.put("address.aa", "shenzhen..");
            pageContext.setAttribute("map",map);
            %>
            ${map.name },${map.age },${map["address.aa"] }
    <!--         直接指定说到这个作用域里面去找name -->
            ${pageScope.name }
    <!--         先从page里面找,没有去request,去session,applicat找 -->
            ${name }
       如果这份值有下标,直接使用[]
       如果没有下标,直接使用.去取
    ----------------------------------------------
    <%
    //     User user = new User("zhangsan",18);
    //    session.setAttribute("u", user);
    %>
    
    ${u.name },${u.age}
    ${empty u }
    ${a > b }
    ${a gt b }

一般使用EL表达式用的多的是从一个对象中取出它的属性值

6.jsp九大内置对象,EL11个内置对象

${ 对象名.成员 }
pagecontext
作用域相关对象
pagescope
requestscope
sessionscope
applicationscope
头信息相关对象
header
headervalues
参数信息相关对象
param
paramvalues

cookie
全局初始化参数
initparam

注:XMind 是一款非常实用的商业思维导图软件

7.JSTL

Jsp全称: standard tag library jsp标准标签库
简化jsp代码编写,替换<%%>写法,一般与EL表达式配合
----怎么使用
1.导入jar文件到工程的webcontent/web-inf/lib jstl.jar standard.jar
2.将tld文件夹拷贝到webcontent/web-inf下面
3.在jsp页面上,使用taglib指令,来引入标签库
注:如果想要支持EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持

    -----常用标签
    <c:set></c:set>
    <c:if test=""></c:if>
    <c:forEach></c:forEach>
    --------------------------------------------
    <c:set>
    <!-- 声明一个对象name,对象的值zhangsan,默认存到page,指定是session -->
    <c:set var="name" value="zhangsan" scope="session"></c:set>
    ${sessionScope.name }  
    <c:if>
    判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出,c:if是没有else<br>----------------------<br>
    <c:set var="age" value="18"></c:set>
    <c:if test="${age > 16 }">
          年龄大于了16</c:if>
    <br>----------------------<br>
    <c:set var="age" value="18"></c:set>
    <c:if test="${age > 25 }">
          年龄大于了25岁
    定义一个变量名flag去接受前面表达式的值,然后存在session域中
    <c:set var="age" value="18"></c:set>
    <c:if test="${age > 16 }" var="flag" scope="session">
          年龄大于了16</c:if>
    ${flag }
    <c:foreach>
    <!--1开始遍历到10,得到的结果,赋值给i,并且会存储到page域中,step增幅为2 -->
    <c:forEach begin="1" end="10" var="i" step="2"><br>
    ${i }
    </c:forEach>
    <%
    //  ArrayList list=new ArrayList();
    //    list.add(new User("zhangsan",18));
    //    list.add(new User("zhangsan",28));
    //    list.add(new User("zhangsan",38));
    //    list.add(new User("zhangsan",48));
    %>
    <!-- items:表示遍历哪一个对象,注意:这里必须写EL表达式 -->
    <!-- value:遍历出来的每一个元素用user去接受 -->
    <c:forEach var="user" items="${list }">
    <%--         ${user.name}-----${user.age } --%>
    </c:forEach>
8.Form表单中method为get和post的区别:

参考:https://www.cnblogs.com/yaochc/p/4957791.html
servlet是运行在服务器上的,它是网页和服务器之间的中间层

9.学生信息管理系统

—1.先写login.jsp,并且搭配一个LoginServlet去获取登录信息

    <body>
        <h3>欢迎使用黑马学生管理系统</h3>
        <form action="Login"method="post">
        账号:<input type="text" name="username"/><br>
        密码:<input type="password" name="password"/><br>
        <input type="submit" value="登录"/><br>
        </form>
    </body>

—2.数据库中创建用户表,里面只要有id,username和password
—3.创建userdao,定义登录的方法
—4.创建userdaoimple,实现刚才定义的登录方法

        Connection conn=null;
    	PreparedStatement ps =null;
    	ResultSet rs=null;
    	try {
    		//1.注册驱动
    	    conn=资源释放.getConn();
    //		3.执行sql
    		String sql="select * from yonghu where username=? and password=?";
    //		4将参数化的SQL语句发送到数据库。 
    	    ps = conn.prepareStatement(sql);
    		ps.setString(1, username);
    		ps.setString(2, password);
    		rs= ps.executeQuery();
     //执行此 PreparedStatement对象中的SQL查询,并返回查询 PreparedStatement的 ResultSet对象。 
    //		 5.遍历每一条记录
           return rs.next();
    	} catch (SQLException e) {
    		// TODO 自动生成的 catch 块
    		e.printStackTrace();
    	}finally {
    		资源释放.release(conn, ps, rs);
    	}
    	return false;

—5.在loginservlet里面访问userdao,判断登录结果,以区分对待

    //post提交过来的数据有中文
    		request.setCharacterEncoding("utf-8");
    /*
     * 确保发往服务器的参数以汉字的编码来提取		
     */
    		response.setContentType("text/html;charset=utf-8");
    /*
     * 设置HTTP 响应的编码,同时指定了浏览器显示的编码;		
     */
    //		1.获取客户端提交的信息
    	String username = request.getParameter("username");
    	String password = request.getParameter("password");
    //        2.去访问dao,看是否满足登录
    	UserDao dao=new UserDaoDemo();
    	boolean issuccess=dao.login(username, password);
    //	3.针对dao的返回结果,做出响应
    	if (issuccess) {
    //		response.getWriter().write("登录成功");
    //		跳转页面:1.请求转发2.重定向
    //		重定向(地址栏上显示stu_list.jsp)
    //		1.查询出来所有的学生信息
    		Studao studao=new StudaoDemo();//实现接口
    		ArrayList<Student> list=studao.findall();
    //		先把集合存到作用域中
    		request.getSession().setAttribute("list", list);//存值
    //		2.重定向跳转页面
    		response.sendRedirect("stu_list.jsp");
    		
    	} else {
            response.getWriter().write("用户名或者密码错误");

—6.创建stu-list.jsp,让登录成功的时候跳转过去
—7.创建学生表,里面字段随意
—8.定义学生studao
—9.实现上面的studao,为studaodemo

                Connection conn=null;
        		PreparedStatement ps =null;
        		ResultSet rs=null;
        		ArrayList<Student> list=new ArrayList<Student>();
        		try {
        			//1.注册驱动
        		    conn=资源释放.getConn();
    //    			3.执行sql
        			String sql="select * from t_stu";
    //    			4.得到结果集
        		    ps = conn.prepareStatement(sql);
        			rs= ps.executeQuery();
    //    			 5.遍历每一条记录
    //    			数据多了用对象装,对象也多了用集合装,void只能装一个学生,不能装多个学生
        			while (rs.next()) {
        				Student stu=new Student();
    					stu.setId(rs.getInt("id"));
    					stu.setAge(rs.getInt("age"));
    					stu.setName(rs.getString("name"));
    					stu.setXingbie(rs.getString("xingbie"));
    					stu.setAddress(rs.getString("address"));
    					list.add(stu);
    				}
        		} catch (SQLException e) {
        			// TODO 自动生成的 catch 块
        			e.printStackTrace();
        		}finally {
        			资源释放.release(conn, ps, rs);
        		} 
        	   return list;

—10.登录成功的时候完成三件事
查询所有学生
把所有的学生集合存储到作用域中
跳转到stu_list.jsp

—11.在stu_list.jsp中,取出域中的集合,然后使用c标签,去遍历集合

      <br>学生列表<br>
           <table border="1" width="700">
                 <tr align="center">
                      <td>编号</td>
                      <td>姓名</td>
                      <td>年龄</td>
                      <td>性别</td>
                      <td>住址</td>
                      <td>操作</td>
                 </tr>
                 <c:forEach items="${list }"  var="stu">
                 <tr  align="center">
                      <td>${stu.id }</td>
                      <td>${stu.name}</td>
                      <td>${stu.age }</td>
                      <td>${stu.xingbie }</td>
                      <td>${stu.address }</td>
                      <td><a href="#">更新</a>    <a href="#">删除</a></td>
                 </tr>
                 </c:forEach>
           </table>
10.总结

jstl:c:foreach用的多
el表达式:用的多的取四个作用域中的值、11个内置对象
jsp:三大指令,三个动作标签、九个内置对象
jstl,el表达式均是方便jsp的

接上:关闭浏览器后还想再次显示购物车中的信息

    string  id=request.getsession().getid();
    cookie  cookie=new cookie("jsession",id);
    cookie.setMaxage(60*60*24*7);
    response.addcookie(cookie);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值