jsp学习
1.jsp语法
注释方法:
<!-- HTML注释 --> 这种注释不安全可通过查看源文件看到。
JSP注释方法:
<%--JSP注释 --%>
<%//单行注释 %>
<%/*多行注释*/ %>
out对象输出语法:
out.println 代表换行输出
out.print 不换行输出
例子:
<% out.println("谈北京精神"); out.print("再谈北京精神"); %>
2.表达式与 变量
使用out对象输出时需要在HTML中进行嵌套,页面中会显得混乱。所以JSP还提供了领一种输出显示方式,就是借助表达式实现输出显示
<% 变量类型 变量名=值%>
<%
String title="谈北京精神 "; String author="bdqn"; String category="新闻信息"; %>
<%=java表达式%>注意:表达式后不能有";"
<h1><%=title %></h1>
使用日期对象
Date today=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); String str_today=sdf.format(today);
表单与REQUEST对象
比较 | POST | GET |
是否在URL中 显示参数 | 否 | 是 |
数据传递是否有长度限制 | 无 | 有 |
数据安全性 | 高 | 低 |
URL是否可以传递 | 否 | 是 |
效率 | 低 | 高 |
表单验证中(表单提交方式)
action:表示提交的地址
method:表示提交的方式,get和post;
get和post方式提交的区别:
1、get提交的值会在地址栏中显示,post不会。
2、get提交的数据有长度限制(255个字符),post方式则没有。
3、get不安全,post安全更高。
4、get效率更高,post效率较低。
5、get可以直接访问提交的页面,post则不行。
request对象获取的常用方法
getParameter(String name) 返回指定参数名称的数值,返回值类型为String类型,若无对应名称的参数,返回NULL
getParameterValues(String name) 返回具有相同参数名称的数值集合,返回类型为String类型的数组
请求对象方法
方法名称
方法说明
getCookies()
获得客户端发送的Cookie
getSession()
返回和客户端关联的Session,如果没有给客户端分配Session则创建一个Session并返回
getSession(Boolean create)
和上面方法类似,不同的是如果没有给客户端分配Session则根据参数判断是否创建一个新的Session并返回
getParameter(String name)
获得请求中名为name的参数的值,如果请求中没有这个参数,返回null
getParameterValues(String name)
返回请求中名为name的参数值,这个值往往是checkbox控件提交的,因此返回的是一个String数组
getMethod()
返回这个请求使用的HTTP方法(例如:GET、POST、PUT)
getHeader(String name)
返回一个请求头域的值,这个值是一个字符串
getIntHeader(String name)
返回一个请求头域的值,这个值被转换成一个整数
getPathInfo()
返回在这个请求的URL的Servlet路径之后的请求URL额外的路径信息
out内置对象
out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的。out对象用于向客户端浏览器输出数据,out对象常用的方法是:print()或者println()方法,这两个方法用于在页面中打印出字符串信息。
request内置对象
request对象,JSP中的request内置对象对应了Servlet中的HttpServletRequest类的对象,是最常用的JSP内置对象之一,这个内置对象当中封装了有关浏览器请求的信息,比方说,我们在页面上填写的用户名、密码等信息就封装在request当中。request对象的主要作用就是用来处理客户端请求。
response内置对象
response对象和request对象相对应,它用于响应客户端的请求并向客户端输出信息。 JSP中的response内置对象对应了Servlet中的HttpServletResponse类的对象,这个对象封装了JSP产生的响应,然后被发送到客户端以响应客户的请求。
application内置对象
application对应了Servlet中的ServletContext类的对象。它在每个Web项目中只有一个实例,常被用来实现不同用户之间的数据共享。因为不同的用户在访问application的时候,都是访问的同一个对象,这样的话,一个用户可以把需要共享的数据放到application对象中,然后其他用户就可以在这个对象中获得想要的共享数据了。
session内置对象
session是客户端浏览器和web服务器之间的会话,这个对象和request内置对象一样,都是我们平时开发JSP过程中最常用的内置对象之一,它最常见的作用就是进行访问控制,这个session对象是Servlet中HttpSession类的实例。
pageContext内置对象
pageContext对象是javax.servlet.jsp包中PageContext类的对象,他提供了对JSP页面中所有的对象及命名空间的访问,使用这个对象可以访问application对象,session对象,exception对象等等。也就是说这个对象可以访问除了本身之外的8个JSp内置对象。还可以访问绑定在page、request、session、application这些对象上的Java对象,它相当于JSP程序中所有对象功能的集成者。
page内置对象
page对象是java.lang.Object类的示例,他指的是一个JSP页面在翻译阶段翻译成Servlet之后,这个Servlet实现类的示例,也就是说它是JSP页面本身,因此,此对象的作用域范围仅仅限于当前JSP页面本身。
config内置对象
config对象对应Servlet中的ServletConfig接口,它用来表示Servelt的配置。当Servlet容器初始化一个Servlet对象的时候,Servlet容器会把某些初始化信息通过这个对象传递给Servlet。
exception内置对象
exception对象是java.lang.Throwable类的一个实例。他指的是运行时的异常,也就是被调用的错误页面的结果,只有在错误页面(在页面指令里设置了isErrorPage=true的页面)才可以使用。
JSP中乱码的问题
1.post方式提交时解决方案
设置请求的编码方式(post请求方式):
request.setCharaterEncoding("UTF-8");
设置响应的编码方式:
request.setCharacterEncoding("UTF-8");
<% //设置请求的编码方式 request.setCharacterEncoding("UTF-8"); //设置响应的编码方式 response.setCharacterEncoding("UTF-8");
//以“post”方式提交解决乱码 String username=request.getParameter("username");//读取用户名 String con_password =request.getParameter("con_password");//读取用户密码 String email=request.getParameter("email");//读取EMAIL
//get提交方式解决乱码
//String t=request.getParameter("username");
//String username=new String(s.getBytes("iso-8859-1"),"utf-8") ;
request.getParameter("username");
request.getParameter("username");
request.getParameter("username");
%>
<%=username %><br/>
<%=con_password %><br/>
<%=email %><br/>
2.(get请求出现乱码)解决少处的中文编码时
new String(s.getBytes("iso-8859-1"),"utf-8") ; "s"为请求中取出的乱码中文
3.配置tomcat\conf\server.xml文件内容加上(URIEncoding="UTF-8")
例:
<Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
<!-- A "Connector" using the shared thread pool-->
页面间的数据传递
1.使用属性存取数据
setAttribute()方法的语法:
public void setAttribute(String name, Object o)
没有返回值,参数NAME表示属性名称,参数o表示属性值,为Object类型。
当要保存数据时,使用request对象直接调用即可。
request.setAttridute("mess","注册失败");
getAttribute()方法:
public Object getAttribute(String name)
有一个String类型的参数,返回值时候Object类型。获取属性的时候,可以使用String类型的属性名,从请求中取出对应的Object类型的属性值。
在读取属性中保存的数据时,必须将数据转换成其他最初的类型。
String mess=(String)request.getAttribute("mess");
如果mess不为NULL,表示获得数据。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置请求的编码方式
request.setCharacterEncoding("UTF-8");
//设置响应的编码方式
response.setCharacterEncoding("UTF-8");
String username=request.getParameter("username");//读取用户名
if(username.equals("admin")){
request.setAttribute("mess", "注册失败,请使用其他用户名");
//response.sendRedirect("login.jsp");//返回注册页面没有任何提示信息(实现页面跳转)
request.getRequestDispatcher("login.jsp").forward(request, response);//返回注册页面并提示信息
}else{
request.setAttribute("mess","注册成功");
response.sendRedirect("newsDetail.jsp");
}
String con_password =request.getParameter("con_password");//读取用户密码
String email=request.getParameter("email");//读取EMAIL
%>
<%=username %><br/>
<%=con_password %><br/>
<%=email %><br/>
</body>
</html>
//注册失败显示的代码 <% Object omess=request.getAttribute("mess");//Object类型数据 if(omess!=null){ out.print(omess.toString());//转换成mess相应类型的String类型数据 } %>
重定向语法:
respones.sendRedirect("URL")
转发实现页面的跳转
resquest.getRequestDispatcher()
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 在此判断用户能否登录,如果可以登录,跳转至userLoginOk.jsp页面,如果不能登录请跳转回userLogin.jsp页面,并提示“用户名或密码错” --> <% //请求编码方式 request.setCharacterEncoding("UTF-8"); //响应编码方式 response.setCharacterEncoding("UTF-8"); String username=request.getParameter("username");//获取用户名 String psw=request.getParameter("password");//获取密码 if(username.equals("admin") && psw.equals("110")){//判断用户为admin,密码为110才能登陆 //登陆成功 request.setAttribute("msg", "登陆成功");//存入数据到msg response.sendRedirect("userLoginOk.jsp");//重定向到登陆成功页面 }else{ //登陆失败 request.setAttribute("msg", "登陆失败");//存入数据到msg request.getRequestDispatcher("userLogin.jsp").forward(request, response);//转发到原页面,并显示错误提示 } %> <br/> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!--用户登录页面--> <form action="doUserLogin.jsp" method="post" > <label>用户名</label><input type="text" name="username" /><label>密码</label><input type="password" name="password" /> <button type="submit">登录</button><br/> <% Object omsg=request.getAttribute("msg"); if(omsg!=null){ out.print(omsg.toString()); } %> </form> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 登录成功 --> 您登录成功! </body> </html>