简介:JSP(全称Java Server Pages)

一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

jsp的结构

需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求

jsp处理过程:

1就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。

2Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。

3JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,
并且将所有的JSP元素转化成Java代码。 4SP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。 5Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出
并将其内嵌于HTTP response中上交给Web服务器。 6Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。

一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改日期早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。这使得整个流程与其他脚本语言(比如PHP)相比要高效快捷一些。

jsp语法:

jsp格式:脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的

<% 代码片段 %>

eg:

<head>
<title>你好</title>
</head>
<body>
hhhhhhhhhhh
<% out.println("howtosay"+ request.getRemoteAddr());
%>
</body>
</html>

re:

jsp格式:声明

声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。

<%! declaration; [ declaration; ]+ ... %>

eg:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Jsp的声明</title>
</head>
<body>
<%! int i = 0; %>
<% out.print(i); %>
</body>
</html>

jsp格式:表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

<%= 表达式 %>

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

eg:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Jsp的表达式</title>
</head>
<body>
<p>
<%-- 没有等号会报错500--%>
time: <%=(new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>

jsp格式-注释

<%-- 这里可以填写 JSP 注释 --%>

jsp格式:指令

用来设置与整个JSP页面相关的属性。

<%@ directive attribute="value" %>

包括:

指令 描述
<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签

page指令:为容器提供当前页面的使用说明,一个jsp页面可以包含多个page指令

 inclued指令可以包含一下文件,jsp html等文件,会一起编译

target指令,自定义一些标签

jsp格式-行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

<jsp:action_name attribute="value" />

所有动作都哟两个属性:

id属性:动作元素的唯一标识,

scope属性:

该属性用于识别动作元素的生命周期

scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。

<jsp:inclued>动作元素:

包含静态和动态的文件。该动作把指定文件插入正在生成的页面

<jsp:include page="relative URL" flush="true" />

里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。

属性列表:

  

 

<jsp:useBean>动作

装载一个将在JSP页面中使用的JavaBean。

<jsp:useBean id="name" class="package.class" />

属性:

<jsp:setProperty>动作元素

设置已经实例化的Bean对象的属性

再工作useBean后面使用,不管找到一个现有的Bean,还是新建一个Bean实例,setProperty都会执行

再。。。。里面的话,只有咋新建实例时才会执行,如果使用现有实例则不执行。

 <jsp:setProperty name="myName" property="someProperty" .../>

name: 表示要设置属性的是哪个Bean,必须

property:表示要设置的属性,必须。如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

<jsp:getProperty>动作元素

提取指定Bean属性的值,转换成字符串,然后输出

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

结合实例:

javabean:

package quan;

public class TestBean {
private String message = "no message specifid"; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
}
}

javabean.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Using java Bean</title>
</head>
<body>
<jsp:useBean id="quan" class="quan.TestBean"/>
<jsp:setProperty name="quan" property="message" value="quanzhiqinag"/>
<h3>获取quan类中的message属性</h3>
<jsp:getProperty name="quan" property="message"/>
</body>
</html>

<jsp:forward> 动作元素

把请求转到另外的页面。jsp:forward标记只有一个属性page。

<jsp:forward page="Relative URL" />

page:page属性包含的是一个相对URL,可以是一个JSP页面或者一个 Java Servlet.

实现转发的jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp:forward</title>
</head>
<body>
<h1>forward example</h1>
<jsp:forward page="date.jsp"/>
</body>
</html>

转发到的jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
time: <%=(new java.util.Date()).toLocaleString()%>
</body>
</html>

re:

<jsp:plugin>动作元素

<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素,动态定义XML元素

<jsp:text>动作

允许在JSP页面和文档中使用写入文本的模板

<jsp:text>Template data</jsp:text>

文本模板不能包含其他元素,只能只能包含文本和EL表达式

jsp中的对象:

 request对象

是javax.servlet.http.HttpServletRequest 类的实例

每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

response对象

是javax.servlet.http.HttpServletResponse类的实例

服务器创建request对象时会同时创建用于响应这个客户端的response对象。

out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

JspWriter类包含了大部分java.io.PrintWriter类中的方法

 session对象

session对象是 javax.servlet.http.HttpSession 类的实例。

application对象

直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,
随着jspDestroy()方法的调用而被移除。通过向application中添加属性,则所有组成您web应用
的JSP文件都能访问到这些属性。

相当于,servlet的Context

config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象

允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

pageContext对象

是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

page对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

jsp-if elas

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%! int day = 2;%>
<html>
<head>
<title>ifelse</title>
</head>
<body>
<% if (day ==1 |day ==7) {%>
<p>Today is weekend</p>
<%}else {%>
<p>Togy is not weekend</p>
<%} %> <%switch (day){
case 0:
out.println("00000");
break;
case 1:
out.println("1111");
break;
case 2:
out.println("33333");
break;
default:
out.println("default");
}%>
</body>
</html>

js[请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>http头部信息</title>
</head>
<body>
<h2>http头部信息</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="blue">
<th>HeaderName</th>
<th>Values</th>
</tr>
<%
Enumeration hname = request.getHeaderNames();
while (hname.hasMoreElements()){
String name = (String)hname.nextElement();
out.print("<tr><td>"+name+"</td>\n");
String value = request.getHeader(name);
out.print("<td>"+value+"</td></tr>\n");
}
%>
</table>
</body>
</html>

re

jsp响应

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>自动时钟-respon</title>
</head>
<body>
<h3>quan's clock</h3>
<%
response.setIntHeader("Refresh",1);
String amorpm;
Calendar calendar = new GregorianCalendar();
if(calendar.get(Calendar.AM_PM) ==0){
amorpm = "AM";
}else {
amorpm = "PM";
}
int h = calendar.get(Calendar.HOUR);
int y = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MINUTE);
int s = calendar.get(Calendar.SECOND); String T = "current's Time " + y + " " + h +":"+m+":"+s +amorpm;
out.print(T);
%>
</body>
</html>

re

设置http状态码方法

HttpServletResponse 类中用来设置状态码的方法:

<%
// 设置错误代码,并说明原因
response.sendError(407, "Need authentication!!!" );
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>重定向</title>
</head>
<body>
<%
String url = "https://www.runoob.com/java/java-string-indexof.html";
response.setStatus(response.SC_MOVED_TEMPORARILY);//设置响应码
response.setHeader("Location",url);
%>
</body>
</html>

jsp处理表单

经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。

get:

GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔。

GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法。

用get时,传输数据的大小有限制 (注意不是参数的个数有限制),最大为1024字节。

post;

一些敏感信息,如密码等我们可以同过POST方法传递,post提交数据是隐式的。

POST提交数据是不可见的,GET是通过在url里面传递的(可以看一下你浏览器的地址栏)。

JSP使用getParameter()来获得传递的参数,getInputStream()方法用来处理客户端的二进制数据流的请求。

jsp读取表单

getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
getInputStream():调用此方法来读取来自客户端的二进制数据流。

URL-GET

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
name <%=request.getParameter("name")%> age <%= request.getParameter("age")%> </body>
</html>

http://localhost:8088/JSP/form/geturl.jsp?name=quan&age=35

FROM-GET

最初访问的html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>form-get</title>
</head>
<body>
<form action="JSP/form/geturl.jsp" method="get">
<br/>
Name <input type="text" name="name"/>
Age <input type="text" name="age"\>
<input type="submit" value="Submit">
</form>
</body>
</html>

geturl.jsp就是上面的文件

显示在URL中

FROM-POST

将上面表单的method改为post

 <form action="JSP/form/geturl.jsp" method="post">
<br/>
Name <input type="text" name="name"/>
Age <input type="text" name="age"\>
<input type="submit" value="Submit">
</form>

结果:

checkbox数据传递到jsp程序

jsp-上传文件

JSP可以通过HTML的form表单上传文件到服务器。 文件类型可以是文本文件、二进制文件、图像文件等其他任何文档。

form表单 method 属性必须设置为 POST 方法 ,不能使用 GET 方法。
form表单 enctype 属性需要设置为 multipart/form-data。
form表单 action 属性需要设置为提交到后台处理文件上传的jsp文件地址。例如 uploadFile.jsp 程序文件用
    来处理上传的文件。
上传文件元素需要使用 <input .../> 标签,属性设置为 type="file"。如果需要上传多个文件,可以
在 <input .../>标签中设置不同的名称。

预先再web.xml设置上传文件的路径

<web-app>
<context-param>
<param-name>file_upload_path</param-name>
<param-value>C:\Users\better.quan\Desktop\init</param-value>
</context-param>
<display-name>Archetype Created Web Application</display-name>
</web-app>

html表单:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FIle upload</title>
</head>
<body>
<form action="../jsp/fileupload.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50"/>
<br/>
<br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>

后端处理表单:

<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %> <%
File file ;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter("file_upload_path"); // 验证上传内容了类型
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存中存储文件的最大值
factory.setSizeThreshold(maxMemSize);
// 本地存储的数据大于 maxMemSize.
factory.setRepository(new File("d:\\temp")); // 创建一个新的文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大上传的文件大小
upload.setSizeMax( maxFileSize );
try{
// 解析获取的文件
List fileItems = upload.parseRequest(request); // 处理上传的文件
Iterator i = fileItems.iterator(); out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// 获取上传文件的参数
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// 写入文件
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath ,
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( filePath ,
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath +
fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
}
}else{
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>

re:

由于目录有中文,乱码了

filter过滤器

Servlet和JSP中的过滤器都是Java类,它们存在的目的如下:

  • 在请求访问后端资源时拦截它
  • 管理从服务器返回给客户端的响应

实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法

和servlet的差不多

编写一个filter

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Date; @WebFilter(filterName = "FilterJsp")
public class FilterJsp implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
String addr = req.getRemoteAddr();
System.out.println("ipaddr: " + addr + "time: " + new Date().toString());
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } }

修改web.xml

  <filter>
<filter-name>filterjsp</filter-name>
<filter-class>FilterJsp</filter-class>
</filter> <filter-mapping>
<filter-name>filterjsp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

进行访问之后

 可以使用多重过滤器,他的顺序如下;

在web.xml中<filter>元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml
中<filter>元素的定义顺序就行了。

jspCookie

Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持。

服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
浏览器在本地机中存储这些信息,以备不时之需。
当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些
信息来识别用户或者干些其它事情。

Servlet Cookie方法

header

获取cookie:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>get cookie</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
System.out.println(cookies.length);
if(!cookies.equals(null)){
for (Cookie cookie : cookies) {
String cname = cookie.getName();
String cvalue = cookie.getValue();
System.out.println(cname + "------" + cvalue+"\n");
}
}
%>
</body>
</html>

删除cookie和servlet的一样:

cookie.setMaxAge(0);
response.addCookie(cookie)

session

<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: better.quan
Date: 2020/6/30
Time: 14:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// 获取session创建时间
Date createTime = new Date(session.getCreationTime());
// 获取最后访问页面的时间
Date lastAccessTime = new Date(session.getLastAccessedTime()); String title = "Welcome Back to my website";
int visitCount = 0;
String visitCountKey = new String("visitCount");
String userIDKey = new String("userID");
String userID = new String("ABCD"); // 检测网页是否由新的访问用户
if (session.isNew()){
title = "Welcome to my website";
session.setAttribute(userIDKey, userID);
session.setAttribute(visitCountKey, visitCount);
}
visitCount = (int)session.getAttribute(visitCountKey);
visitCount = visitCount + 1;
userID = (String)session.getAttribute(userIDKey);
session.setAttribute(visitCountKey, visitCount);
%>
<html>
<head>
<title>Session Tracking</title>
</head>
<body>
<center>
<h1>Session Tracking</h1>
</center>
<table border="1" align="center">
<tr bgcolor="#949494">
<th>Session info</th>
<th>Value</th>
</tr>
<tr>
<td>id</td>
<td><% out.print( session.getId()); %></td>
</tr>
<tr>
<td>Creation Time</td>
<td><% out.print(createTime); %></td>
</tr>
<tr>
<td>Time of Last Access</td>
<td><% out.print(lastAccessTime); %></td>
</tr>
<tr>
<td>User ID</td>
<td><% out.print(userID); %></td>
</tr>
<tr>
<td>Number of visits</td>
<td><% out.print(visitCount); %></td>
</tr>
</table>
</body>
</html>

re:

jsp-date

Date类:

它在java.util包下,封装了当前日期和时间。

第一个构造函数,以当前时间初始化对Date();

第二个构造函数接受一个参数(表示从1970年1月1日凌晨至所要表示时间的毫秒数)

Date(long millisec)

获取当前时间和日期:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>get date</title>
</head>
<body>
<%
Date d = new Date();
SimpleDateFormat f = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
String df = f.format(d);
out.println(df+"\n");
out.print(LocalDate.now());
%>
</body>
</html>

re:

JSP页面重定向:
可以使用response.sendRedirect()方法

String site = "http://www.manongjc.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);

或者使用setStatus 和setHander方法结合得到同样的效果:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>重定向</title>
</head>
<body>
<%
String url = "https://www.runoob.com/java/java-string-indexof.html";
response.setStatus(response.SC_MOVED_TEMPORARILY);//设置响应码
response.setHeader("Location",url);
%>
</body>
</html>

访问http://localhost:8080/JSP/redirect.jsp

最终会跳转到

jsp计数:

需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上。

可以利用应用程序隐式对象和相关方法getAttribute()和setAttribute()来实现。

application.setAttribute(String Key, Object Value);
application.getAttribute(String Key);
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>计数器</title>
</head>
<body>
<%
Integer numvalue =
(Integer)application.getAttribute("num");
if( numvalue ==null || numvalue == 0 ){
numvalue = 1;
}else{
numvalue += 1;
}
application.setAttribute("num", numvalue);
%>
<h3>访问的次数为:<%=numvalue%></h3>
</body>
</html>

re

复位计数器

在web服务器重启后,计数器会被复位为0,即前面保留的数据都会消失

在数据库中定义一个用于统计网页访问量的数据表count,字段为hitcount,hitcount默认值为0,
  将统计数据写入到数据表中。
在每次访问时我们读取表中hitcount字段。
每次访问时让hitcount自增1。
在页面上显示新的 hitcount 值作为页面的访问量。
如果你需要统计每个页面的访问量,你可以使用以上逻辑将代码添加到所有页面上。

jsp自动刷新:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>get date</title>
</head>
<body>
<%
response.setIntHeader("Refresh",1);
Date d = new Date();
SimpleDateFormat f = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
String df = f.format(d);
out.println(df+"\n");
out.print(LocalDate.now());
%>
</body>
</html>

备注SimpleDateFormat格式码:

字符 描述 示例
G 时代标识符 AD
y 4位数年份 2001
M July or 07
d 10
h 12小时制, A.M./P.M. (1~12) 12
H 24小时制 22
m 分钟 30
s 55
S 毫秒 234
E 星期 Tuesday
D 一年中的某天 360
F 一个月中某星期的某天 2 (second Wed. in July)
w 一年中的某星期 40
W 一个月中的某星期 1
a A.M./P.M. 标记 PM
k 一天中的某个小时 (1~24) 24
K 一天中的某个小时,A.M./P.M. (0~11) 10
z 时区 Eastern Standard Time
' 文本分隔 Delimiter
" 单引号 `

记录大坑:

加载的javaBean类必须再某个文件夹下面,不允许放在根目录下

java-jsp-learnning的更多相关文章

  1. Atitit  java jsp 新的tag技术

    Atitit  java jsp 新的tag技术 1.1.  Tag Files  vs 原生写 SimpleTag 比较麻烦的 JSP 1.x 允许 Web 开发人员创建 Java 组件(称为标记处 ...

  2. [转]应聘Java,jsp,j2ee软件工程师笔试中可能出现的问题

    相信大家应聘的时候第一关就是笔试,即使是一位很有经验的工程师也不一定能够顺利通过,笔试不好,可能就无法进行面试,即使能够进行面试,考官对你的印象也不会很好,问的问题也会很多,估计很难吃的消,当然如果你 ...

  3. Java/JSP程序连接不上Mysql驱动问题解决方法

    错误提示: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader$1.run(URLCla ...

  4. Java/JSP获得客户端网卡MAC地址的三种方法解析

    java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...

  5. .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载

    223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...

  6. java:jsp: 一个简单的自定义标签 tld

    java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...

  7. java: jsp:param中文乱码

    java: jsp:param中文乱码 假如a.jsp/b.jsp文件中 a.jsp代码: 需要加入:request.setCharacterEncoding("UTF-8")  ...

  8. JAVA JSP笔记

    一.jsp加载项目中资源图片 如果直接将静态页面写的代码copy到jsp中,你会发现图片都无法加载. 获取代码: String path = request.getContextPath(); Str ...

  9. java JSP(原创新手可进)

    一. 同等编程方式jsp与asp.net的不同 app需要做一个简单网站,和几个用户推广链接,所以涉及到web这块开发,原本昨天想直接使用asp.net来做,但是之后放弃了这个想法,因为数据访问接口都 ...

  10. java+jsp+servlet实现分页

    web.xml配置: <servlet> <servlet-name>abc</servlet-name> <servlet-class>test.pa ...

随机推荐

  1. kali主机探测命令与工具集

    实验目的 熟悉ping.arping.fping.hping3.nbtscan.nping.p0f.xprobe2工具对目标主机的探测方法. 实验原理 目标识别工具发送特殊构造的数据包,根据返回的应答 ...

  2. [题解]UVA10986 Sending email

    链接:http://vjudge.net/problem/viewProblem.action?id=24941 描述:n个点,m条边的无向图,寻找从S到T的最短路. 思路:基础的单源点最短路 用Di ...

  3. N种排序算法

    本文根据<算法(第4版)>和<算法图解>整理.文中代码使用python编写. (一)选择排序 每次遍历整个数组,选出其中最小值.如果数组长度为n,则需要(n-1)+(n-2)+ ...

  4. 深度剖析数仓CN增量备份技术

    摘要:为了解决Roach的性能问题,提出了CN增量备份手段,从而达到进一步优化RPO目的. 本文分享自华为云社区<GaussDB(DWS)备份容灾之CN增量备份>,作者: zxy_db . ...

  5. Kubernetes集群搭建(详细)

    kubernetes集群搭建(kubeadm方式) kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具.这个工具能通过两条指令完成一个kubernetes集群的部署: # 创 ...

  6. PostgreSQL-PL/pgSQL控制结构

    PL/pgSQL的控制结构是最重要及最有用的一部分了,在实际工作场景都离不开业务处理逻辑,在写PL/pgSQL时,利用控制结构来操作数据.PL/pgSQL支持的控制结构与其他语言几乎差不多,比如:条件 ...

  7. Java 实现Https访问工具类 跳过ssl证书验证

    不多BB ,代码直接粘贴可用 import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.F ...

  8. 计算机网络——HTTP

    目录 计算机网络-HTTP篇 HTTP 基本概念 常见状态码 常见字段 Get 与 Post HTTP 特性 HTTP(1.1) HTTP/1.1 HTTPS 与 HTTP HTTP/1.1.HTTP ...

  9. (第一章第四部分)TensorFlow框架之张量

    系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...

  10. 矩池云 | Tony老师解读Kaggle Twitter情感分析案例

    今天Tony老师给大家带来的案例是Kaggle上的Twitter的情感分析竞赛.在这个案例中,将使用预训练的模型BERT来完成对整个竞赛的数据分析. 导入需要的库 import numpy as np ...