JSP语法详解

JSP(java server page)是web混合技术,它包含jsp=html+css+javascript+java代码+jsp标签


JSP标签自身的基础就是servlet(即java语言),因为servlet代码写起来不是很方便,所以jsp相当于是把servlet打了一个包,
在服务器端运行.jsp文件的时候,实际上会自动把jsp文件编译成servlet相关文件来执行,
因此JSP本身就是一款封装了servlet的标签语言,只不过它是靠GlassFish、Tomcat等相关程序来编译的。


一、基本格式
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>//告诉编译器用的是java语言,引入java的util包,utf-8编码
<html>
<head>


<head/>
<body>
<%
   out.println("当前时间:"+new java.util.Date());//在<%  %>之间可以写java代码片段
%>


<%
   out.println("当前时间:"+new java.util.Date());//可以有多个java代码片段
%>
<body/>
<html/>




二、jsp标签元素
1.指令元素
例:<%@ pageEncoding="utf-8" %>//告知编译器用utf-8编码
    <%@ errorPage="my.jsp" %>//告知编译器如果程序出错,将会自动跳转到指定my.jsp页面
    <%@ include file="my.jsp" %>//静态引入另外的页面内容,但该页面只能有内容(如文字、图片),不能有其它HTML标签元素


2.脚本元素
例:<% java代码 %>//编写java代码
    <%! int i = 5 %>//定义一个变量
    <%! public void set()
        {
          System.out.println(123);//定义一个方法,注:<% 这里面不能直接定义方法 %>
        }        
    %>
    <%= i+1 %>//表达式,获取i变量并且运算


3.动作元素
例:<jsp:forward file="my.jsp"></jsp:forward>//跳转到指定页面
    <jsp:incluce file="my.jsp"></jsp:incule>//动态引入另外的页面内容,但该页面可以包含其它HTML标签元素




三、jsp内置对象
1.out:输出打印对象
2.request:接受客户端的http请求
3.response:封装jsp的产生的回应
4.session:用于保存用户的信息,跟踪用户的行为
5.application:多个用户共享该对象,可以做计算器
6.pageContext:jsp页面的上下文,作用范围只是本页面
7.exception:运行时的一个异常
8.page:jsp这个实例本身
9.config:jsp对应的servlet的配置,可以得到web.xml中的参数


所有内置对象,只能在<% %>里面使用




四、mvc开发模式(m模型、v视图、c控制器)
它是分离了:数据输入(视图界面),数据处理(控制器+模型),数据显示(视图界面)


案列详解-用户登录系统


①主页跳转页面:index.jsp//它是放在web目录下
<%@ page contentType="text/html" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>主页跳转</title>
<head/>
<body>
<jsp:forward page="/WEB-INF/login.jsp"></jsp:forward>//跳转到登录页面(出于安全考虑,需把登录页面放在WEB-INF目录下,此目录下的页面不能直接访问)
<body/>
<html/>






②登录页面(视图):login.jsp//它是放在WEB-INF目录里
<%@ page contentType="text/html" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>登录界面</title>
<head/>
<body>
<form action="/MyWeb/loginyz" method="post">//这里的MyWeb只的是项目名称
用户名:<input type="text" value="<%=user %>" name="sr1"/><br/>//这里可以利用表达式来保存输入的用户名
密  码:<input type="text" value="<%=password %>" name="sr2"/><br/>
<input type="submit" value="登录"/>
<form/>
<body/>
<html/>






③登录验证页面(控制器+模型):loginyz.java//它是放在src目录里,它是一个Servlet文件,Servlet文件实际就是java文件
@WebServlet(urlPatterns = {"/loginyz"})
public class loginyz extends HttpServlet {


    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
  String user= request.getParameter("sr1");
  String pass = request.getParameter("sr2");
        try
        {
            //1.连接SQLServer数据库,连接数据库的驱动包可以在oracle官网下载
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection conn= DriverManager.getConnection("jdbc:sqlserver://192.168.0.100:1433;databaseName=sjkname","sa","123456");
            
            //2.查询数据
            PreparedStatement ps = conn.prepareStatement("select Name,sex from users where Code=? and Password=? ");
            ps.setString(1,user);
            ps.setString(2,pass);
            ResultSet  rs = ps.executeQuery();
            
            //3.判断是否有数据
            if(rs.next())
            {     
                ArrayList<String> arr = new ArrayList<String>();//将数据添加到ArrayList集合中
                arr.add(rs.getString(1));
                arr.add(rs.getString(2));
                request.setAttribute("lie",arr);//传入数据
                request.getRequestDispatcher("/WEB-INF/logincg.jsp").forward(request,response); //跳转到登录成功页面,并传入request
                rs.close();
                ps.close();
                conn.close();
            }
            else
            {
                try (PrintWriter out = response.getWriter()) 
                {
                    out.println("<!DOCTYPE html>");
                    out.println("<html>");
                    out.println("<head>");
                    out.println("<title>错误提示</title>");            
                    out.println("</head>");
                    out.println("<body>");
                    out.println("<h1>登录失败,请重新登录<a href=/MyWeb/index.jsp>返回</a></h1>");
                    out.println("</body>");
                    out.println("</html>");
                 }
                rs.close();
                ps.close();
                conn.close();
            }    
        }
        catch(Exception ee)
        {
            ee.printStackTrace();
        }
   }


   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      processRequest(request, response);
   }
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      processRequest(request, response);
   }
   @Override
   public String getServletInfo() {
      return "Short description";
   }
   
}
注:这里是把控制器和模型写在一起了,实际开发中,应把部分java代码分离出去单独写个类,如:把数据库连接分离出去,这样就相当于创建了一个数据库连接模型




④登录成功页面(视图):logincg.jsp//它是放在WEB-INF目录里
<%@ page contentType="text/html" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>登录成功</title>
<head/>
<body>
<h1>登录成功,欢迎光临!</h1>
<table border="1">
<tr><td>你的信息是</td></tr>
<%
   ArrayList a = (ArrayList)request.getAttribute("lie");//获取request里的数据
   for(int i=0;i<a.size();i++){
%>
   <tr><td><%= a.get(i) %></td></tr>//利用for循环动态添加表格的行数,并使用表达式显示数据
<%
   }
%>
</table>
<body/>

<html/>


五、Cookie、Session、Request、Application、ServletContext的区别
①cookie:是保存在客户端的临时信息文件,供单个创建它的用户访问,作用范围全局,生命周期可设置具体时间

Cookie c =new Cookie("name","xy");//创建cookie
c.setMaxAge(3600);//设置生命周期为一小时,秒为单位
response.addCookie(c);//添加cookie到浏览器
Cookie[] cc =request.getCookies();//读取cookie
for(int i= 0;i<cc.length;i++)
{
  System.out.println(cc.getName()+cc.getValue());//键+值(一般值需要使用MD5进行加密)
}

String val = java.net.URLEncoder.encode("张三","utf-8");
Cookie c =new Cookie("name",val);//创建带中文的cookie值
String var = java.net.URLDecoder.decode(c.getValue(),"utf-8");//取出中文的值并解码


②session:是保存在服务器端内存里的临时信息类,供单个创建它的用户访问,作用范围全局,生命周期可设置具体时间,默认30分钟

HttpSession s = request.getSession();//创建session
s.setAttribute("name","张三");//添加值
s.setMaxInactiveInterval(3600);//设置生命周期一小时,秒为单位(默认生命周期是30分钟,也可以在web.xml文件中直接修改这里以分钟为单位)
s.invalidate();//让session马上失效

String u = (String)request.getSession().getAttribute("name");//取出Session中的值


③request:是保存在服务器端内存里的临时信息类,供单个创建它的用户访问,作用范围全局,生命周期是一次性的

request.setAttribute("name","张三"); 

request.getAttribute("name"); 


④application:是保存在服务器端内存里的共享信息类,供所有用户访问,作用范围全局,生命周期是应用程序启动到停止,它是jsp文件调用

application.setAttribute("name","张三"); 

application.getAttribute("name"); 


⑤servletcontext:是保存在服务器端内存里的共享信息类,供所有用户访问,作用范围全局,生命周期是应用程序启动到停止,它是Servlet文件调用

(1)普通操作
ServletContext sc = this.getServletContext();//获取ServletContext
sc.setAttribute("name","张三");//添加值
String s = (String)sc.getAttribute("name");//取值
sc.removeAttribute("name");//删除值

(2)将用户名在web.xml文件中配置,方便所以文件使用
<context-param>
  <param-name>name</param-name>
  <param-value>root</param-value>
</context-param>
String ss = this.getServletContext().getInitParameter("name");//获取值

(3)读取配置文件
InputStream is = a.class.getClassLoader().getResourceAsStream("pz.properties");//使用a类的类加载器读取src目录下的配置文件
InputStream is = this.getServletContext().getResourceAsStream("pz.properties");//普通读取配置文件
Properties pp = new Properties();
pp.load(is);//加载配置文件
System.out.pritnln(pp.getProperty("name"));//读取配置文件里的用户名(如:配置文件里有name=xy)

(4)读取文件的路径
String path = this.getServletContext().getRealPath(/tp/1.jpg);


六、jquery与服务器交互数据

<html>
<head>
   <meta charset="UTF-8"/>
   <script type="text/javascript" src=""></script>
   <script type="text/javascript">
    $(function(){
        $('#a').click(function(){
            $.ajax({
                url:"http://222.2.2.2/json.html",//链接地址
                dateType:"json",//数据类型
                type:"post",//传输类型get
                beforeSend:function(){//修改参数判断是否已点击
                    $('#a').attr('dis','1');
                }
                success:function(result){//加载数据
                    $('#b').html(result);
                }
                complete:function(){//删除参数
                    $('#a').removeAttr('dis');
                }
            }); 
        });
    });
   </script>

</head>


<body>
<p><a id=a>查询</a></p>
<div id="b"></div>
</body>


</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值