24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

JSP基础知识点(二)

2017-08-21 20:55:20 东方博宜 阅读

1jsp的指令<%@ %>

Apage指令

page指令可以用来引包、声明编码集、定义错误页面!

errorPage(错误页面):指的是如果页面有错误,跳转到另一个页面!(没有错不跳转)

 

例子:

a.jsp

<%@ page errorPage="e.jsp" %>

    欢迎访问:

    <%

       int[] a = new int[10];

       out.print(a[10]);

     %>

 

e.jsp

    <meta http-equiv="refresh" content="3;url=http://www.baidu.com"/>

              您所访问的页面正在建设中,3秒后跳转到首页!<br>

 

 

Binclude指令

代码的复用:方法、将一个类的对象作为另一个类的属性、继承

include:将另一个页面的代码直接引入过来!

 

注意:

a、由于include指令相当于将待引入页面的源码拷贝过来,因此会存在变量名重复定义的问题!

b、一般inlcude进来的页面是不需要htmlbody的基本结构的,否则会出现基本结构重复(但不是语法错误)

 

2jsp的动作<jsp:动作名></jsp:动作名>

Ainclude动作

include动作相当于将待引入页面的运行结果拷贝过来!

 

面试题:静态include和动态include有什么区别?

静态include指的是include指令,相当于将待引入页面的源码拷贝过来,因此可能存在变量名重复定义的问题!

动态include指的是include动作,相当于将待引入页面的运行效果拷贝过来,因此不会存在变量名重复定义的问题!

 

为了避免基本html结构的重复,我们无论include指令还是include动作,被引入的页面都不需要基本结构!

 


 

例子:

index.jsp

    <%@include file="menu.jsp" %>

           这是正文内容!

    <jsp:include page="footer.jsp"></jsp:include>

 

menu.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

           这是导航页面!<br>

 

footer.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

    <br />

            这是页脚!

 

Bforward动作:跳转动作

例子:

a.jsp

    <jsp:forward page="b.jsp?username=zhangsan&pwd=123">

       <jsp:param value="9999" name="port"/>

       <jsp:param value="99" name="age"/>

</jsp:forward>

 

b.jsp

      <%

         //获取参数

         String u = request.getParameter("username");

         String p = request.getParameter("pwd");

         String port = request.getParameter("port");

         String age = request.getParameter("age");

        

         out.print("用户名:" + u + ",密码:" + p);

       %>

       <br />

                  端口号:<%=port %>,明年年龄:<%=Integer.parseInt(age) + 1 %>

 

 

注意:forward跳转的特点?

url地址不改变!

 

问题:如何跳转中带参数?

所有的url的后面都可以带参数,基本模式:

http://127.0.0.1:8080/b.jsp?参数名=参数值&参数名=参数值

 

问题:如何获取参数?

String 参数 = request.getParameter(“参数名”);

3、静态代码和动态代码的混合使用

例子:登陆

index.jsp

    <h1 align="center">用户登陆</h1>

   

    <!-- action:表示跳转的目的地址,method:表示带参的方式,method="get"默认值表示url带参数 -->

    <!-- method="post"表示隐藏的形式带参数 -->

    <form action="check.jsp" method="post">

       <p>

                        用户名:<input type="text" name="username"/>

       </p>

       <p>

                        密码:<input type="password" name="pwd"/>

       </p>

       <p>

         <input type="submit" value="提交"/>

         <input type="reset" value="重置"/>

       </p>

    </form>

    <span style="color:#F00">

      <%

         String m = request.getParameter("m");//获取提示信息

         if(m != null){

            if(m.equals("fail")){

                out.print("用户名或密码有误,请重新登陆!");

            }

         }

       %>

    </span>

 

check.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%@ page import="com.baidu.login.LoginService" %>

<%

   //获取参数

   String username = request.getParameter("username");

   String pwd = request.getParameter("pwd");

   //注意:如果某个参数没有填写,此处获取到的是空字符串""

   //out.print(username + " " + pwd);

  

   //处理参数

   boolean r = LoginService.login(username,pwd);

  

   //根据处理结果跳转

   if(r == true){

%>

   <jsp:forward page="success.jsp"></jsp:forward>

<%

   }else{

%>

  <jsp:forward page="index.jsp?m=fail"/>

<%  

   }

%>

 

LoginService

public class LoginService {

 

         /**

          * 根据登陆信息判断是否正确

          *

          * @param username

          * @param pwd

          * @return

          */

         public static boolean login(String username, String pwd) {

                   boolean r = false;

 

                   try {

                            //防止空指针异常

                            if (username != null && pwd != null) {

                                     InputStream is = LoginService.class

                                                        .getResourceAsStream("/names.properties");

                                     Properties pro = new Properties();

                                     pro.load(is);

                                     // 根据用户输入的用户名,到names.properties文件中查找密码

                                     String p = pro.getProperty(username);

                                     // 如果p是存在的,且也pwd值一致,说明登陆成功

                                     if (p != null && p.equals(pwd)) {

                     r = true;

                                     }

                            }

 

                   } catch (Exception e) {

                            e.printStackTrace();

                   }

                   return r;

         }

        

         public static void main(String[] args) {

                   System.out.println(login("zhangsan","123"));

         }

}

 

names.properties

zhangsan=123

lisi=456

wanger=789

 

success.jsp

    欢迎登陆!<br>

 

流程图:

图片.png

前端页面:index.jspsuccess.jsp,用户能够看到的页面!

后台页面:check.jsp,用户看不见的页面,用于处理信息的页面!

 

后台页面的处理流程:

A、获取用户意图,获取参数

B、处理参数

C、根据处理结果跳转

 

什么是properties文件?

web项目中的一种资源文件(配置文件),存储的数据格式,必须是“参数名=参数值”的格式!

 

4jsp的作用域(缓存)

pageContext:页面作用域,只在本页面有效

request:请求作用域,在forward跳转或者include包含的情况下有效

session:会话作用域,只要浏览器不关闭(session不超时)的情况下有用

application:应用作用域,只要服务器不关闭都有效

 

存值:作用域.setAttribute(参数名,参数值);//注意:参数的值可以是对象

取值:Object obj = 作用域.getAttribute(参数名);

 

例子:request作用域存储、获取参数!

a.jsp

     <%

        request.setAttribute("username","管理员");

        request.setAttribute("age",28);

       

        //准备对象

        User user = new User(1,"张晓峰","部门经理");

        request.setAttribute("user",user);

      %>

      <jsp:forward page="b.jsp?port=9999"></jsp:forward>

 

User

public class User {

 

         private int userno;

         private String username;

         private String job;

        

         public User() {

                   super();

                   // TODO Auto-generated constructor stub

         }

         public User(int userno, String username, String job) {

                   super();

                   this.userno = userno;

                   this.username = username;

                   this.job = job;

         }

         public int getUserno() {

                   return userno;

         }

         public void setUserno(int userno) {

                   this.userno = userno;

         }

         public String getUsername() {

                   return username;

         }

         public void setUsername(String username) {

                   this.username = username;

         }

         public String getJob() {

                   return job;

         }

         public void setJob(String job) {

                   this.job = job;

         }

        

        

}

 

b.jsp

    获取作用域:<br />

    <%

       String username = (String)request.getAttribute("username");

       int age = (Integer)request.getAttribute("age");

       User user = (User)request.getAttribute("user");

     %>

     用户名:<%=username %>,年龄:<%=age %>,姓名:<%=user.getUsername() %>,岗位:<%=user.getJob() %>

     <br />

     获取url的参数:<br />

     端口:<%=request.getParameter("port") %>

 

 


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn