一、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(); //执行查询操作