01.jsp复习

2023-12-15 05:20:08

1.创建bean和tag时发生的… tomcat导致jsp乱码 改conf的server.xml

  <Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="utf-8" />

2.jsp html插入java

3.安装

  1. 安装jdk
  2. 下载tomcat,放到webapp 默认8080 bin/startup.bat
    乱码, conf/logging 改最后一个utf8为gbk
    使用myeclipse
  3. 把tomcat和jdk配置到myeclipse set->java->installment–>add jdk of jar
  4. servers->tomcat—>enable
  5. new web program ee6.0
  6. dir:webroot just as html
  7. 服务器标志打开tomcat 7.0(无用) 访问
    旁边的deploy按钮 部署到cat 访问http://xxxx:8080/项目名/文件名
  8. server配置文件可以改服务目录

4.jsp转换
jsp转javac文件(servlet)–>java文件

 <%  int i=0 %>
 <%=i%>
 <%
             for(int i=1;i>=3;i++){
                      out.println("zzz")
                     out.println("<h"+i+">"+i+"<h"+i+"/>")
             }
   %>
  //可以不用写引号
    .p{xxx}
     class=p

5.注释

   <!-- h5 -->
   <%  /* java*/
              //gross
       %>
    <%-- jsp  user can't read in website--%>

6.定义变量/方法

   <%! int a=1; int aa(){}%> //全局变量,不同的路径也可以
   <%=aa()%> 
    <% int a=1;  aa()%>    //局部

7.page 导入多个文件

   <%@ page language="java" import="xxx,com.sql" pageEncoding="GBK" %>
    Buffer缓冲器大小
    isFlush是否刷新 
    isThreadSafe设置是否多线程 true 开启多线程
   <%page info="hello" %>
     <%=getServletInfo()%>

8.include引入文件 相对路径

    <%@ include file="aa.jsp"> //合成一个页面,静态文件  快(编译时)
   <jsp:include page="aa.jsp" flush=""> 不刷新//可引入动态和静态文件 慢(运行时执行)
   forward param  useBean

9.动作指令(传递参数) 选择题 param必须配合使用不能单独使用(全部编码使用gb2312,弹出框!!不要修改编码)

      //不能包含localpath变量   
     <% request.setCharacterEncoding("gb2312")%>
       <jsp:include page="aa.jsp" >//乱码 
             <jsp:param name="id" value="11" /> //相当于get post
      </jsp:include>
     //aa.jsp接收变量
                <%=request.getParameter("id") %>
     //include jsp页面编码集要一样

10.forward跳转到另外一个网页

      <jsp:forward page="aa.jsp" /> //地址栏文件没有改变,内容改变了
        <jsp:forward page="aa.jsp" >//乱码 
             <jsp:param name="id" value="11" /> //相当于get post
      </jsp:forward>
   //form reset action method
 //间接通过一个jsp页面判断  
 <%
   if(aa="111"){
%>
     <jsp:forward page="xx.jsp">
 <%
   }else
%>
   <jsp:forward page="xx.jsp">

11.tag文件(类似jsp) 代码复用 处理过程与显示分离
//WEB-INF创建文件夹tags(必须)/sum.tag(只能由文件夹的jsp调用) 不能出现page标签

   //先引入
     <%@ taglib  tagdir="/WEB-INF/tags" prefix="func"%>
  <func:triangle t="12" b="13" ></func:triangle>
   //在/WEB-INF/tags创建triangle.tag
    <%@ tag import="java.util.*" pageEncoding="gb2312" %>
     <%@ attribute name="t" required="true" %>  //必须传递参数, 默认 type="java.lang.Double"
     <%@ attribute name="b" required="true" %>
<p>
         <%  %>
            <%=t%>

</p>
t=(x+y+z)/2
 w=sqrt(t*(t-x)*(t-y)*(t-z))
String res=String.format("%.2f",w)//保留2位小数
//jsp调用 import
     <%@ taglib  tagdir="/WEB-INF/tags" prefix="abc"%>

    <abc:sum t="hello" />
//传递参数

12.tag给jsp传数据

 <%@ variable name-given="name" variable-class="java.lang.String"  scope="AT_BEGIN"  %> //在jsp标记哪个地方使用,在标记之前可以使用
   //jspContext.setAttribute("name","jams");
    
//AT_BEGIN
<abc:sum t="hello" >
  //NESTED 
</ abc:sum t="hello">
//AT_END 建议
<%=name %>

13.得到tag里面的值(多次调用)

    <ok:sum>
          ok
    </ok:sum>
     <ok:sum>
          ok1
    </ok:sum>
  //tag文件
     <jsp:doBody/>

14.案例

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="ok" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'giveMess.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>
  分别输入三个数值,并选择这三个数值代表三角形三边的长度或梯形的上底、下底和高
   	<form action="./inputAndShow.jsp">
   		<p>
   			输入a:<input type="text" name="a"></input>
   		</p>
   		<p>	
   			输入b:<input type="text" name="b"></input>
   		
   		</p>
   		<p>
   			输入c:<input type="text" name="c"></input>
   		</p>
   		
   		
   		<p>
   			三角形<input type="radio" name="fig" value="1"></input>
   			梯形<input type="radio" name="fig" value="2"></input>
   		</p>
   		<p>
   		 	<input type="submit" name="submit"></input>
   		</p>
   		<%! String a,b,c,fig;
   		
   		 %>
   		 <%
   		 	a=request.getParameter("a");
   		 	b=request.getParameter("b");
   		 	c=request.getParameter("c");
   		 	fig=request.getParameter("fig");
   		  %>
   		
   		<ok:GetArea a="<%=a %>" b="<%=b %>" c="<%=c %>" fig="<%=fig %>">
   			
   		</ok:GetArea>
   			<%=res %>
   	
   	
   	</form>
  </body>
</html>

//GetArea.tag

<%@ tag language="java" import="java.util.*" pageEncoding="gb2312"%>
 <%@ attribute name="a" required="true" %>
 <%@ attribute name="b" required="true" %>
 <%@ attribute name="c" required="true" %>
 <%@ attribute name="fig" required="true" %>
 <%@ variable name-given="res" variable-class="java.lang.String" scope="AT_END"   %>

<%! 
   String deal(String a,String b,String c,String fig){
   		int a1,b1,c1,fig1;
   		int area;
   		
   		try{
	   		 a1=Integer.parseInt(a);
	   		 b1=Integer.parseInt(b);
	   		 c1=Integer.parseInt(c);
	   		 fig1=Integer.parseInt(fig);
   		}catch(Exception e){
   			return "输入数字错误";
   		}
   		
   		if(fig1==1){
   		  //triangle
   		  if((a1+b1)>c1 && (a1+c1)>b1 && (c1+b1)>a1){
   		    double t=(a1+b1+c1)/2.0;
    		double res=Math.sqrt((t*(t-a1)*(t-b1)*(t-c1)));
   		    return "三角形面积为"+res;
   		  }else{
   		  	return "三角形两边之和大于第三边";
   		  }
   		}else if(fig1==2){
   			
   			double res= (a1+b1)*c1/2.0;
   			return "梯形面积为:"+res;
   		
   		}
   		return "aa";
   
   
   }

%>
//直接放在application里面比较容易
<%
String res=deal(a,b,c,fig);
jspContext.setAttribute("res",res);

 %>

15.request(http) response session application

      javax.servlet.http.HttpServletRequest.封装整个请求对象
     get //字符不超过255个,明文
     form href也可以接收到
     //设置中文
       request.setCharacterEncoding("gb2312");
           <select name=""><option value=""></option></select>
   String a=getParameter("");
                 getParameterValues("habit");//得到相同的name
      checkbox

16.response

      //设置响应头
      setContentType("text/html;charset=gb2312"); //application/msexcel (excel)   msword(word)
     //必须要配合使用,设置文件名,防止传输失败,word是docx,excel是xlsx
 		        response.reset();
		response.setContentType("application/msexcel;charset=utf-8");
		response.setHeader("Content-Disposition", "attachment;filename="+ new String(("下载后Excel文件名称" + ".xlsx").getBytes(), "iso-8859-1"));

		response.flushBuffer();

 sendRedict("./aa.jsp");//可以重定向到任意url ,<jsp:forward>只能在容器内
      setHead("k","v");
      addHead
    //刷新网页,1秒刷2次 ,2秒后跳转
       response.addHeader("refresh", "1");
       setHeader("refresh","2;URL=aa.jsp");
   //在jsp写response会保存网页

      response.getWriter().println("用户名或密码不正确,请重新输入!");
    	     response.getWriter().println("<br/>两秒钟后自动跳转到登录页面!");
    	     response.addHeader("refresh", "2;URL=./ex4-07.jsp");

17.application只有一个 是全局变量(共享),生命最长

setAttribute("k","v"); //可以设置所有类型
getAttribute("k");
println();//输出数据

18.session 全局 会话:浏览器连接服务器到他的结束(id) 解决application范围太广
再次连接不需要新的(30min发心跳),重新打开创建新的,

           getId();
           setAttribute("k","v"); //可以设置所有类型
  (String) getAttribute("k");   
           invalidate();remove all
           getMaxInactiveInterval()                  //发呆时间 没有操作的时间,max 30min
           set
           isNew();//new create

19.javaBean(可重复使用的bean数据,jsp使用数据,前后端分离)特殊的java文件

servlet运行在服务器的java文件
javaBean运行在客户端

1.定义类(jsp不用serializable)根据自己的需要来改

public class  
  无参构造
  所有成员(getter 和setter) private boolean类型为(isXXX方法代替setter), 方法public
重启tomcat

2.分类

   可视
  不可视(gui)

3.jsp调用javaBean

   //在page指定导入包
           ,import    top.jams.*
      <%
	new Person();
         %>  
          //上面使用表单同名可以给下面赋值
          <form> 
                          <input type="text" name="id"/>
                            <input type="text" name="password"/>
         </form>
        //使用标签来使用 与bean属性同名.设置表单,可以放到page作用域
           <jsp:setProperty name="aa" property="*">
           <jsp:setProperty name="aa" param="pass" property="password" />//param是form的名称,解决名字不同的问题
----------------------
        
           //加载bean,代替引入类
   <jsp:useBean id="calc" class="com.aa.Calc">hello student!</jsp:useBean> //相当于一个html标签
          <jsp:useBean id="name" scope="page" class="xxx">//存活时间 默认page(当前页面) ,其他 request session application  
          <jsp:setProperty name="aa" property="id" value="1"/>  //得到属性
          <jsp:getProperty name="aa" property="id" />  

20.Java servlet(tomcat创建响应用户请求的对象)

1.跨平台
2.功能强大
3.性能好
4.可拓展

servlet和servlet.http不在jdk中,复制tomcat的servlet-api.jar到jre/lib/ext的继承httpServlet(实现service接口)
eclipse创建 new -->servlet
//jsp name对应web.xml的名字
//简化

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <display-name></display-name>
  <servlet>
    <servlet-name>myServ</servlet-name>
    <servlet-class>com.aa.myServ</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>myServ</servlet-name>
    <url-pattern>/servlet/myServ</url-pattern>
  </servlet-mapping>	
</web-app>

21.请求转发和重定向的区别
请求转发 request /xxx到web网页地址 并且携带之前的request数据
重定向 response /项目名/web网页 不携带之前的数据

文章来源:https://blog.csdn.net/weixin_47039303/article/details/134896279
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。