[原创]JSP、Servelet、JDBC学习_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3946 | 回复: 2   主题: [原创]JSP、Servelet、JDBC学习        下一篇 
binbin.qu
注册用户
等级:上士
经验:300
发帖:14
精华:0
注册:1970-1-1
状态:离线
发送短消息息给binbin.qu 加好友    发送短消息息给binbin.qu 发消息
发表于: IP:您无权察看 2014-7-2 19:56:11 | [全部帖] [楼主帖] 楼主

一、Jsp四大属性范围

(1)pageContext:只在一个页面中保存属性,跳转之后无效

<%pageContext.setAttribute("name","武汉"); %>   <!-- test.jsp --> 

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

<% String n = (String)pageContext.getAttribute("name");%>   <!-- test1.jsp -->

名字:<%=n %>

  北京联动北方科技有限公司

(2)request:只在一次请求中保存,服务器跳转后依然有效

<%request.setAttribute("name","武汉"); %>   <!-- test.jsp --> 

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

<% String n = (String)request.getAttribute("name");%>   <!-- test1.jsp -->

名字:<%=n %>

  北京联动北方科技有限公司

forward跳转属于服务器端跳转,浏览器地址栏不变,所以客户端请求一次,浏览器就回应了一次,能获取request属性。

如果使用超链接跳转,浏览器地址改变,相当于请求了两次,那么第一次请求的内容就会消失,所以获取不到request属性。把test.jsp中forward跳转改成如下代码:

<a href="test1.jsp">点击跳转</a>

 

  北京联动北方科技有限公司北京联动北方科技有限公司

(3)session:在一次会话范围中,无论何种跳转都可以使用,但是新开浏览器无法使用

<%session.setAttribute("name","武汉"); %>   <!-- test.jsp --> 

<a href="test1.jsp">点击跳转</a>

<% String n = (String)session.getAttribute("name");%>   <!-- test1.jsp -->

名字:<%=n %>

  北京联动北方科技有限公司

如果关闭浏览器后再打开test1.jsp,无法获取session属性,因为每一个新的浏览器连上服务器后就是一个新的session。

(4)application:在整个服务器上保存,所有用户都可以使用

<%application.setAttribute("name","武汉"); %>   <!-- test.jsp --> 

<a href="test1.jsp">点击跳转</a>

<% String n = (String)application.getAttribute("name");%>   <!-- test1.jsp -->

名字:<%=n %>

  北京联动北方科技有限公司

设置成application,属性会保存在服务器上,这样所有用户都能看见,即使换了重开浏览器,还是可以获取到。



二、Servlet服务器端小程序

1、配置

Servlet程序都是以*.class的形式存在的,所以必须在WEB-INF\web.xml文件中进行Servlet程序的映射配置。它由.java文件编译后自动在WEB-INF\classs\下生产对应的.class文件,每次修改java文件后,同样需要编译一遍。web.xml配置格式如下

<servlet>         <!-- 定义servlet -->
<servlet-name>servlet名称</servlet-name>      <!--  与servlet-mapping对应 -->
<servlet-class>com.test.servlet.servletTest<servlet-class>    <!-- servlet程序所在包.类名称 -->
</servlet>
<servlet-mapping>      <!-- 映射路径 -->
<servlet-name>servlet名称</servlet-name>
<url-pattern>/路径名</url-pattern>    <!-- 页面的映射路径 -->
</servlet-mapping>


2、页面跳转

(1)redirect 方式

response.sendRedirect("x.jsp");


该方式属于客户端跳转,直接使用HttpServletResponse接口的sendRedirect()方法,但是这种跳转只能传递session范围的属性,不能传递request范围的属性。

这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URL。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。

(2)forward方式

RequestDispatcher dispatcher = request.getRequestDispatcher("x.jsp");
dispatcher .forward(request, response);


forward方式只能跳转到本web应用中的页面上,跳转后浏览器地址栏不会变化,属于服务器跳转。

这种方式是在服务器端作的重定向。服务器往client发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。

下列情况下,服务器会将缓冲区的数据发送给客户端:

当对来自client的request处理完,并把所有数据输出到缓冲区;

当缓冲区满;

在程序中调用缓冲区的输出方法out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。

这种方式利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。

三、使用JDBC连接MySQL

流程与原理

(1)在开发环境中加载指定数据库的驱动程序。

如mysql-connector-java-5.1.13-bin.jar放至tomcat/lib文件夹下

(2)在Java程序中加载驱动程序。

Class.forName(“com.mysql.jdbc.Driver”)


(3)创建数据连接对象:

通过DriverManager类创建数据库连接对象Connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC Connection 对象。

Connection con =  DriverManager.getConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root")


(4)创建Statement对象

Statement sta =con.createStatement();


(5)调用Statement对象的相关方法执行相对应的 SQL 语句

statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;


(6)关闭数据库连接

con.close();


例子:

Connection con = null;     //声明数据库连接对象
PreparedStatement ps = null;   //声明数据库操作
ResultSet rs = null;      //声明数据库结果集
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3308/student", "root", "admin");   //取得数据库连接
String sql = "SELECT id,name,sex,birthday FROM student";
ps = con.prepareStatement(sql);   //实例化prepareStatement对象
rs = ps.executeQuery();           //执行查询操作 




赞(0)    操作        顶端 
shun.zhang
注册用户
等级:上士
经验:305
发帖:14
精华:0
注册:1970-1-1
状态:离线
发送短消息息给shun.zhang 加好友    发送短消息息给shun.zhang 发消息
发表于: IP:您无权察看 2014-7-8 17:12:35 | [全部帖] [楼主帖] 2  楼

pageContext代表的是页面信息属性,从test.jsp跳转到test1.jsp页面信息发生了变化,后一个的pageContext对象代表的是test1.jsp的信息,而test1.jsp中name属性是什么?所以显示的是null.pageContext对象的范围只适用于当前页面范围,所以不能向其它页面传递参数。通常我们通过${pageContext.request.contextPath}+..的方式获取页面的绝对路径。

<%pageContext.setAttribute("name","武汉"); %> <!-- test.jsp -->
<jsp:forward page="test1.jsp" />
<% String n = (String)pageContext.getAttribute("name");%> <!-- test1.jsp -->



赞(0)    操作        顶端