您的位置:首页 > Web前端 > JavaScript

JSP语法详解

2016-06-02 22:26 441 查看
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代码分离出去单独写个类,如:把数据库连接分离出去,
4000
这样就相当于创建了一个数据库连接模型

④登录成功页面(视图):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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: