当前位置: 代码迷 >> Web前端 >> 深入体验JavaWeb开发内幕――关于JSP的映射、JSP异常查找以及JavaBean与JSP相关知识介绍
  详细解决方案

深入体验JavaWeb开发内幕――关于JSP的映射、JSP异常查找以及JavaBean与JSP相关知识介绍

热度:113   发布时间:2012-11-12 12:31:58.0
深入体验JavaWeb开发内幕――关于JSP的映射、JSP错误查找以及JavaBean与JSP相关知识介绍
               

一、     关于映射JSP

        
      <servlet>
	<servlet-name>SimpleJspServlet</servlet-name>
	<jsp-file>/jsp/simple.jsp</jsp-file>
	<load-on-startup>1</load-on-startup >
</servlet>
	……
<servlet-mapping>
	<servlet-name>SimpleJspServlet</servlet-name>
	<url-pattern>/xxx/yyy.html</url-pattern>
</servlet-mapping>

      

 

          例:  Mapping.jsp主代码

                    

  <body>
   这是一个关于jsp映射的应用! <br>
  </body>
另外,在web.xml中为其添加相应的映射关系如下:

  <servlet>
   <servlet-name>Mapping</servlet-name>
   <jsp-file>/Mapping.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
   <servlet-name>Mapping</servlet-name>
   <url-pattern>/map.jsp</url-pattern>	
  </servlet-mapping>


     

       这里输入的是http://localhost:8080/WebJsp/map.jsp而不是http://localhost:8080/WebJsp/Mapping.jsp


              

     二、如何查找JSP页面中的错误

     JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。

         JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。

      JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。  

     重点掌握:

             到此为止,web开发接触到了4个域对象,4个域对象是学习web的重点,是我们必须掌握的:

             pageContext(称之为page域)

            request(称之为request域)

            session(称之为session域)

           servletContext(称之为application域)

    三、JavaBean与Jsp   

             

什么是JavaBean

     JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:

           这个Java类必须具有一个无参的构造函数

        

            属性必须私有化。

        

              私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

 

            JavaBeanJ2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

 

JavaBean的属性

       JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter getter方法,setter方法称为属性修改器,getter方法称为属性访问器。

         属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setNamepassword属性的修改器名称为setPassword

         属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getNamepassword属性的访问器名称为getPassword

        一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。

 

JSP中使用JavaBean

      JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:

       <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。

      <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。

      <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。

 

 <jsp:useBean>标签

 

      <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象:

          如果存在则直接返回该JavaBean对象的引用。

         如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。

常用语法:

        

      <jsp:useBean id="beanName"class="package.class"

                            scope="page|request|session|application"/>

 

   id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。

 

    class属性用于指定JavaBean的完整类名(即必须带有包名)。

 

    scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page

 

    requestsessionapplication等四个值中的一个,其默认值是page

 

    <jsp:useBean>执行原理

    <jsp:useBean id="currentDate"class="java.util.Date"/>

 

翻译成的Servlet源码:

java.util.Date currentDate = null;

synchronized(_jspx_page_context) {

       currentDate = (java.util.Date)                            _jspx_page_context.getAttribute(

                            "currentDate", PageContext.PAGE_SCOPE);

       if (currentDate == null){

              currentDate = new java.util.Date();

              _jspx_page_context.setAttribute("currentDate",

                            currentDate, PageContext.PAGE_SCOPE);

       }

}

 

带标签体的<jsp:useBean>标签

     语法:

       <jsp:useBean ...> 

              Body 

       </jsp:useBean>

 

功能:

       Body部分的内容只在<jsp:useBean>标签创建JavaBean的实例对象时才执行。

 

<jsp:useBean>标签的应用:

                   JspLable1.jsp主要代码:

           

  <body>
  
  <jsp:useBean id="usb" class ="net.csdn.javabean.User">
       这里是一个关于JSP标签的测试!. <br>
  </jsp:useBean>
  </body>

当第一次发送请求时:

效果如下:

      

但是当再次执行时,如果在<jsp:useBean>外部还有其他的内容,那么这些内容将会冲掉<jsp:useBean>里的内容。

<jsp:setProperty>标签

     <jsp:setProperty>标签用于设置和访问JavaBean对象的属性。

语法格式:

<jsp:setPropertyname="beanName"

{

       property="propertyName" value="{string | <%=expression %>}" |

       property="propertyName" [param="parameterName" ] |

       property= "*"

}/>

 


      name属性用于指定JavaBean对象的名称。

 

      property属性用于指定JavaBean实例对象的属性名。

 

         value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。 

 

          param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。

 

          <jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。

 

       语法:

            <jsp:getProperty name="beanInstanceName"property="PropertyName" />

 

             name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。

 

           property属性用于指定JavaBean实例对象的属性名。

 

         如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。

  

<jsp:setProperty>标签应用实例:

           

      <jsp:setProperty property="username" name="usb" param="username"/>
      <jsp:setProperty property="password" name="usb" param="password"/>


<jsp:getProperty>标签应用实例:

         
 <jsp:getProperty property="username" name="usb"/>
      <jsp:getProperty property="password" name="usb"/>

        <jsp:useBean>

      <jsp:setProperty>

       <jsp:getProperty>
的综合使用实例测试:

           一个User实体类:

           

import java.util.Date;

public class User {
  private String username;
  private String password;
  private Date birthday;
  
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 Date getBirthday() {
	return birthday;
}
public void setBirthday(Date birthday) {
	this.birthday = birthday;
}

}

 

一个表单界面代码:

    

  <body>
  <form action = "ShowForm.jsp" method ="post">
     <table border = "1px">
      <tr><td>用户名:</td><td><input type="text" name ="username" /></td></tr>
      <tr><td>密码:</td><td><input type="text" name ="password" /></td></tr>
      <tr><td>出生日期:</td><td><input type="text" name ="birthday" /></td></tr>
      <tr><td><input type ="submit"   name = "submit" value ="提交"  /></td><td><input type ="reset"   name = "reset" value ="重置"  /></td></tr>
     </table>
     </form>
  </body>

界面如图;

      

  一个通过表单为实体中的属性赋值并取出该值的JSP:

          

 
  <body>
  
   <% String date = request.getParameter("birthday"); 
      DateFormat df = DateFormat.getDateInstance();
      Date date1 = df.parse(date);
   %>

   <jsp:useBean id="user" class="net.csdn.javabean.User" scope="page"/>
   
   <jsp:setProperty property="username" name="user" param="username"/>
   <jsp:setProperty property="password" name="user" param="password"/>
   
       <jsp:setProperty property="birthday" name="user" value="<%=date1 %>" />
    
   <jsp:getProperty property="username" name="user"/><br/>

   <jsp:getProperty property="password" name="user"/><br/>

<%=user.getBirthday().toLocaleString() %>

  </body>

整个的执行过程如图:

     

     通过JSP中的<jsp:useBean>、<jsp:setProperty> 、<jsp:getProperty>标签使得获取表单中的各组件的值变得容易起来,这对于Web应用来说是一个十分便捷的途径。

好了,今天就到这里吧,赶快自己动手实现吧!