Servlet传值总结1) redirect方式[效率不高]request和response没有传给目标页面 response.sendRedirect("/a.jsp"); 页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: response.sendRedirect("URL");跳转后浏览器地址栏变化。 这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。 传值:HttpSession session =request.getSession(); session.setAttribute("bbbb", 1111111111); 取值:session.getAttribute("bbbb"); 传值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000); 取值:request.getParameter("a") 2) forward方式[更多地使用此方法进行服务器端的跳转] ServletContext application =this.getServletContext(); //this是这个页面 RequestDispatcher rd = application.getRequestDispatcher("/目标页面"); rd.forward(request, response); Servlet页面跳转的路径是相对路径。forward方式只能跳转到本web应用中的页面上,跳转后浏览器地址栏不会变化。 使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute 传值:request.setAttribute("a", 00); 取值:request.getAttribute("a"); 传值:HttpSession session =request.getSession(); session.setAttribute("bbbb", 1111111111); 取值:session.getAttribute("bbbb"); 传值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000); 取值:request.getParameter("a"); getParameter()只能传递字符串,而setAttribute()/getAttribute()还可以传递对象 其次getParameter方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。 只能是页面发送到后台或者Web客户端传到Web服务器端 ======================================================================= servlet 和 jsp 跳转页面的几种方法 跳转分两部分: 一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 Servlet: (1)redirect 方式 (2) forward方式 JSP 1)response.sendRedirect(); 2)response.setHeader("Location",""); 3)<jsp:forward page="" /> 例题:login.jsp---->LoginServlet.java----->UserDAO.java----->success.jsp 请看下面项目部署结构:
web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java./xml/ns/javaee" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://java./xml/ns/javaee http://java./xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>loginservlet</servlet-name> <servlet-class>com.laolu.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginservlet</servlet-name> <url-pattern>/loginservlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> login.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>login.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="loginservlet" method="post"> 用户名:<input type="text" name="uname" /><br/> 密码:<input type="password" name="ps" /><br/> 文本域:<textarea rows="10" cols="30" name="text"></textarea><br/> <input type="submit" value="提交"> </form> </body> </html> LoginServlet.java: package com.laolu.servlet; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.laolu.dao.UserDAO; public class LoginServlet extends HttpServlet{ public void doGet (HttpServletRequest request,HttpServletResponse response){ String name = request.getParameter("uname"); byte[] b; try { b = name.getBytes("iso8859-1"); String username = new String(b,"UTF-8"); String password = request.getParameter("ps"); String text = request.getParameter("text"); //设置session范围属性 request.getSession().setAttribute("china", "李静"); //设置request范围属性 request.setAttribute("n", "肖人"); UserDAO user = new UserDAO(); boolean flag = user.findUser(username,password); if(flag){ //将需要转发或发送的地址进行转码操作。这样在目标页面更好取值,以免乱码产生 String url = "forward/success.jsp?first=传递第一个参数&second=传递第二个参数"; url = new String(url.getBytes("UTF-8"),"ISO8859-1"); //客户端跳转。只有session范围的属性及url中参数会被传递下去 //response.sendRedirect(url); //服务器端跳转。request对象、url中的参数会被传递下去 request.getRequestDispatcher(url).forward(request, response); }else{ response.sendRedirect("forward/error.jsp"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request,HttpServletResponse response){ doGet(request, response); } } success.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> servlet登录成功。<br/><br/> <!-- 取得在servlet中设置的session范围属性值 --> <%= "session中取得的属性值"+ session.getAttribute("china") %><br/> <!-- 取得通过url传递的参数的值。并进行解码。否则会乱码 --> <%="url中第一个参数:"+ new String(request.getParameter("first").getBytes("ISO8859-1"),"UTF-8") %> <br/> <%="url中第二个参数:"+ new String(request.getParameter("second").getBytes("ISO8859-1"),"UTF-8") %> <br/> <!-- 取得在servlet中设置的request的属性值。并进行解码。否则会乱码 --> <%="request中取得的属性值:"+ request.getAttribute("n") %> <br/> <!-- 取得表单提交过来的数据。同样需要进行解码--> <%=new String(request.getParameter("text").getBytes("ISO8859-1"),"UTF-8") %> </body> </html> error.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> servlet输入错误,<a href="forward/login.jsp">请重新登录</a> </body> </html> UserDAO: package com.laolu.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class UserDAO { Connection conn = null; //去连接数据库,查询userInfo表中的数据 //1.连接数据库 public Connection getCon(){ //1.加载数据库驱动程序:微软公司开发的数据库驱动程序jar包,添加到WEB-INF/lib目录下 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String url = "jdbc:sqlserver://localhost:1433;DataBaseName=abc"; try { Class.forName(driver); try { conn = DriverManager.getConnection(url,"sa","sasa"); System.out.println("数据库连接成功!"); System.out.println(conn); } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } //取得数据库连接对象 return conn; } /** * @通过用户名和密码查找用户 * @param name * @param ps */ public boolean findUser(String name,String ps){ boolean flag = false; conn = this.getCon(); //st对象用于执行sql语句 Statement st; try { st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from userinfo where uname='"+name+"' and ps='"+ps+"'"); while (rs.next()) { String uname = rs.getString("uname"); String password = rs.getString("ps"); //System.out.println(uname); return flag=true; } rs.close(); st.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; } } 生成数据库表的脚本:a.sql USE [abc] GO /****** 对象: Table [dbo].[userinfo] 脚本日期: 03/19/2012 14:25:31 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[userinfo]( [uname] [varchar](50) NOT NULL, [ps] [varchar](50) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO |
|