JSP基础

JSP起源

JSP,JavaServer Pager的简称。由SUN倡导并联合其它公司创建。

JSP是一门脚本语言

JSP可以嵌入到HTML中

JSP拥有Java语言的所有特性

面向对象、健壮、多线程、安全、可移植、高性能

JSP运行于JSP容器中

Tomcat、Jetty等。

JSP会被转换成Servlet

JSP->Servlet->Class文件。

Mac下常用shell命令:

pwd 打印当前目录 
ls 列出当前目录下的所有文件目录 
cd 更改目录 
.代表当前工作目录 
..代表上一级目录 
~代表用户根目录 
chmod更改权限

JSP基本语法

<% %> JSP代码段,可以输入任意的Java语言片段。 
<%! %> JSP声明,在JSP页面范围声明变量、函数和类。 
<%= %> JSP表达式 
JSP中HTML注释:

<!-- --> <!-- <% %>-->
  • 1
  • 2
  • 1
  • 2

<%-- --%> JSP注释,不会被客户端浏览器看到。

JSP编译指令

通知Servlet引擎处理消息,它只在JSP程序被转化成Servlet的过程中起作用。

Page指令

在JSP最上方,用于指定语言,MIME,编码,错误跳转页面等等。

技术支持 叉车

1. contentType指定MIME和网页编码,无859. 
2. import导入多个java类,也可以使用多个page导入多个java类。 
3. errorPage表示JSP页面发生运行时错误跳转的页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.ArrayList,java.util.LinkedList" errorPage="err.jsp"%>
  • 1
  • 2
  • 1
  • 2

include指令

静态包含指令,可将外部文件包含进来。包含JSP文件时,不能有重复的变量声明。 
被导入的JSP编译指令会起作用。

<%@ include file="header.jsp"%>
  • 1
  • 1

taglib指令

JSP动作指令

客户端请求时动态执行的指令

forward指令

重定向指令,它下面的代码不会被执行,不会被返回到客户端。 
可以通过jsp:param指令向跳转的JSP页面传递参数。在目标JSP页面中通过request.getParameter()方法接收参数。

<jsp:forward page="err.jsp"> <jsp:param name="name" value="bendeng"></jsp:param> <jsp:param name="pass" value="8765432"></jsp:param> </jsp:forward>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

include指令

动态包含指令,包含静态HTML和动态JSP文件。 
被导入的JSP编译指令不会起作用,并可以额外加参数。

<jsp:include page="body.jsp"> <jsp:param name="bgcolor" value="red"></jsp:param> </jsp:include>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在被包含的JSP文件中通过request对象将body背景色修改为传过去的值。

<body bgcolor="<%=request.getParameter("bgcolor")%></body>
  • 1
  • 1

useBean指令

JavaBean:一个公开的构造函数、属性有get、set方法、可序列化。 
例如:我们在接收提交的页面的,使用User这个bean,然后使用useBean指令配合setProperty、getProperty指令来接收显示提交内容: 
提交页面如下:

<form action="regist.jsp" method="post"> 用户名:<input type="text" name="name"/><br> 密码:<input type="password" name="pass"/><br> <input type="submit" value="提交"/>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

接受页面如下:

<jsp:useBean id="user" class="com.ben.bean.User"></jsp:useBean> <jsp:setProperty property="name" name="user"></jsp:setProperty> <jsp:setProperty property="pass" name="user"></jsp:setProperty> <jsp:getProperty property="name" name="user"></jsp:getProperty> <jsp:getProperty property="pass" name="user"></jsp:getProperty>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

JSP内置对象

out对象

向客户端浏览器输出信息

<% out.println("out对象"); out.newLine(); out.println("<br>"); out.flush(); out.clearBuffer();//清空缓冲区的数据 //out.clear();//也是清空缓冲区数据,不同的是如果之前调用flush,则会抛出异常。 out.println("缓冲区大小:" + out.getBufferSize());//默认8K,可通过编译指令修改,如:<%@ page buffer="16kb" %> out.println("<br>"); out.println("当前缓冲区剩余大小:" + out.getRemaining()); %>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

request对象

request对象封装了客户端提交到服务器的请求信息,表单、cookie等信息。

请求的方法名:<%=request.getMethod() %><br/>//GET 请求的资源:<%=request.getRequestURI() %><br/> 请求使用的协议:<%=request.getProtocol() %><br/>//HTTP/1.1 请求的服务器IP:<%=request.getServerName() %><br/> 请求的服务器端口:<%=request.getServerPort() %><br/> 客户端的IP地址:<%=request.getRemoteAddr() %><br/> 客户端的主机名:<%=request.getRemoteHost() %><br/> getRequestURL:<%=request.getRequestURL() %><br/> getScheme:<%=request.getScheme() %>//Http //request.getParameter() 用于从客户端请求获取表单信息 request.setAttribute(); request.getAttribute(); 这两个方法用于在web组件间共享信息,比如JSP之间。 请求头信息; <% Enumeration<String> e = request.getHeaderNames(); while(e.hasMoreElements()){ String headerName = e.nextElement(); out.println(headerName+":"+request.getHeader(headerName)+"<br/>"); } %>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

response对象

对客户端请求封装回复信息。

response.setHeader("Cache-Control", "no-cache");//浏览器读到这个头信息,就不会将网页信息存到缓存。还有public,private等 response.setIntHeader("Refresh", 2);//每隔2秒刷新一次 //response.sendRedirect("index.jsp");//重定向到另一个JSP网页 //设置Cookie Cookie cookie = new Cookie("ben","deng"); cookie.setMaxAge(3600);//单位为s response.addCookie(cookie);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

session对象

HTTP是无状态的。服务器使用session可以保存客户端浏览器的信息。

<%! SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); %> sessionId= <%=session.getId() %></br> session创建时间= <%=sdf.format(new Date(session.getCreationTime())) %></br> session最后访问时间= <%=sdf.format(new Date(session.getLastAccessedTime())) %></br> session失效时间: <%= session.getMaxInactiveInterval()%>//默认1800s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

session失效时间可以通过修改部署描述符来实现。

<session-config> <session-timeout>10</session-timeout> </session-config>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

如果不生效,需要删掉work目录的文件。

application对象

应用一启动就会生成application对象。web应用不关闭,application就一直存在。 
servlet的环境通过调用getServletConfig().getContext()方法获得。作用域是application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方式。

服务器信息:<%=application.getServerInfo() %> 应用信息:<%=application.getServletContextName() %> 主机信息:<%=application.getVirtualServerName() %>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

由于Application对象是随应用的生命周期存在,所以通过它可以对一些配置进行全局加载和存储。

config对象

代表当前JSP程序的配置信息。一般JSP在应用中作为View层使用,一般使用较少,在Servlet中用的比较多。读取的配置信息来自web.xml。

<%=config.getInitParameter("name") %>
  • 1
  • 1

在web.xml中配置一个servlet:

<servlet> <servlet-name>config</servlet-name> <jsp-file>/jsp/config.jsp</jsp-file> <init-param> <param-name>name</param-name> <param-value>name</param-value> </init-param> <init-param> <param-name>pass</param-name> <param-value>pass</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>config</servlet-name> <url-pattern>/*</url-pattern><!--这个样式所有请求都会返回config.jsp的内容 --> </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在config.jsp中,使用

String name = config.getInitParameter("name"); String pass = config.getInitParameter("pass");
  • 1
  • 2
  • 1
  • 2

取出配置在web.xml中的信息。

exception对象

exception对象只有在page指令中具有属性isErrorPage="true"时才有效。它就是Java中普通的Throwable对象。 
通过JSP错误页面中一个catch块已经益出但没有捕获的java.lang.Throwable的任意实例,传向了errorPage的URI。 
比如在indx.jsp中运行如下代码

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="exception.jsp"%> try{ int c = 3/0; }catch(Exception e){ }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在exception.jsp中:

<% out.print(exception.getLocalizedMessage()); %>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

页面输出/ by zero。

page对象

继承自Object对象,代表当前JSP页面。

pageContext对象。

pageContext对象提供所有四个作用域层次的属性查询和修改能力,它也提供了转发请求到其它资源和包含其他资源的方法。该对象的方法都是抽象方法。

JSP作用域

作用域规定的是变量的有效期限。JSP有四大作用域:Request、Page、Session、Application。 
我们使用public Object getAttribute(String name)获得变量值, 
使用public void setAttribute(String name, Object value)将变量值保存到对应作用域中。

对象 说明 类型 作用域
request 请求对象 javax.servlet.ServletRequest Request
response 响应对象 javax.servlet.SrvletResponse Page
pageContext 页面上下文对象 javax.servlet.jsp.PageContext Page
session 会话对象 javax.servlet.http.HttpSession Session
application 应用程序对象 javax.servlet.ServletContext Application
out 输出对象 javax.servlet.jsp.JspWriter Page
config 配置对象 javax.servlet.ServletConfig Page
page 页面对象 javax.lang.Object Page
exception 异常对象 javax.lang.Throwable page

如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 
从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。 
   
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。 
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。

如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。

application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。 
与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request,session都是完全隔离的,无论如何修改都不会影响其他人的数据。

初识Servlet

Servlet = Server + Applet。它是一个特殊的Java类。 
下面新建一个Servlet:

public class Hello extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doGet(req, resp); PrintWriter pw = resp.getWriter(); pw.println("Hello Servlet"); pw.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doPost(req, resp); doGet(req,resp); } @Override public void init() throws ServletException { System.out.println("hello init()"); super.init(); } @Override public void destroy() { System.out.println("hello destroy()"); super.destroy(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在web.xml中进行配置:

<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.ben.servlet.Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用tomcat,进行运行。localhost:8080/hello,即可显示Hello Servlet。我是在IDEAIU中进行的,如果在Eclipse中路径可能有变化,需要加工程名。

如果浏览器出现HTTP Status 405 - HTTP method GET is not supported by this URL,注释掉doGet和doPost的父类调用即可。

Servlet处理流程

 
客户端浏览器发出一个请求,tomcat内置web Server接收到请求,将请求转达给Servlet容器,Servlet容器会加载Servlet实例。Servlet使用HttpServletRequest接收请求实例,Servlet可能会将请求转发给其它的Servlet处理。全部处理完,请求结果通过HttpServletResponse对象返回给浏览器。

当Servlet装载和实例化以后,Servlet会调用init()方法,进行初始化。Servlet处于服务状态。在整个生命周期中,init()执行一次。接收请求时,会调用service()方法,当Servlet不再使用,容器销毁Servlet之前会调用destroy()方法。destroy()方法中做一些资源释放和日志输出的操作。 
init()不需要重载,只在需要初始化时做一些操作时才需要重载,建议重载无参的init()方法,不用调用super.init()方法,有参的init()必须调用父类的init()方法。

使用Servlet实现简单的登陆

login.jsp如下:

<form method="post" action="<%=request.getContextPath()%>/login"> <input name="username" type="text" placeholder="用户名"/><br/> <input name="password" type="password" placeholder="密码"/><br/> <input type="submit" value="登陆"> <input type="reset" value="重置"> </form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

新建一个LoginServlet:

public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); //System.out.println("用户名=" + username); //System.out.println("密码=" + password); String forward = null; //这里简单判断用户名来跳转成功和失败页面 if("ben.deng".equals(username)){ forward = "success.jsp"; //这种跳转不会带请求的参数信息,只在响应头中的location中指定了跳转页面。但可以进入其他应用的页面 //resp.sendRedirect("success.jsp"); }else{ forward = "fail.jsp"; //resp.sendRedirect("fail.jsp"); } //请求转发,可以请求参数带给转发的页面。但只限于应用内的页面。 RequestDispatcher dispatcher = req.getRequestDispatcher(forward); dispatcher.forward(req,resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override public void init() throws ServletException { System.out.println("login init()"); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

web.xml配置:

<servlet> <servlet-name>login</servlet-name> <servlet-class>com.ben.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Servlet过滤器

创建一个过滤器:

public class MyFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("doFilter..."); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { System.out.println("filter init():" + config.getInitParameter("paramKey")); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

和Servlet一样,需要在web.xml中配置:

<filter> <filter-name>MyFilter</filter-name> <filter-class>com.ben.filter.MyFilter</filter-class> <init-param> <param-name>paramKey</param-name> <param-value>paramValue</param-value> </init-param> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在一个web应用中,可以有多个Filter,多个Filter的执行顺序是和web.xml中配置的顺序是一致的。

过滤器之编码转换

在doGet或doPost方法中返回一串有中文的字符串,浏览器很多时候会显示乱码。这时我们可以在过滤器中进行处理。

String charEncoding = "UTF-8"; public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { if(!charEncoding.equals(req.getCharacterEncoding())){ req.setCharacterEncoding(charEncoding); } resp.setCharacterEncoding(charEncoding); chain.doFilter(req, resp); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

过滤器之权限校验

新建一个权限校验过滤器:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; String loginStatus = (String) request.getSession().getAttribute("login"); if (loginStatus != null && "success".equals(loginStatus)) { chain.doFilter(req, resp); } else { String reqPath = request.getServletPath(); if (!reqPath.contains("login")) { //System.out.println("您尚未登陆"); RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); rd.forward(req, resp); }else{ chain.doFilter(req, resp); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在部署描述符中注册过滤器:

<filter> <filter-name>AuthFilter</filter-name> <filter-class>com.ben.filter.AuthFilter</filter-class> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

上述代码示例中是将登陆成功后再session中设置一个login属性为success,在其他非login/login.jsp等页面中判断是否有这个session,没有或值不对(比如登录失败设置的其他值),则要求跳转到登录界面。从而实现一个简单的权限校验过滤。

Java之JSP和Servlet基础知识的更多相关文章

  1. jsp 和servlet基础知识

    1  在tomcat服务器当中,4**表示客户端请求错误,5**表示程序错误 2.request知识参考网址:http://wenku.baidu.com/link?url=wYwTGk8XKrLzA ...

  2. 一、jsp和Servlet基础理论及jstl和EL表达式用法

    1.题外话:使用JSP有近一年半的时间了,但是开发量不大.昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示.并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页 ...

  3. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  4. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  5. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  6. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

  7. JSP SERVLET 基础知识

    jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...

  8. JSP Web第七章整理复习 Servlet基础知识

    P206-208 Servlet项目的创建,web.xml的配置及标签含义,相关程序 创建:new 一个Servlet类,继承自javax.servlet.http.HttpServlet; 写doG ...

  9. Servlet基础知识

    基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...

随机推荐

  1. 网页里面出现"$#2342"类似这样 应该怎么转义过来?

    Python2 from HTMLParser import HTMLParser print HTMLParser().unescape('【竞彩足球')

  2. active developer path ("/Applications/Xcode.app/Contents/Developer")

    -> git xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer" ...

  3. 【转载】Caffe + Ubuntu 14.04 + CUDA 6.5 新手安装配置指南

    洋洋洒洒一大篇,就没截图了,这几天一直在折腾这个东西,实在没办法,不想用Linux但是,为了Caffe,只能如此了,安装这些东西,遇到很多问题,每个问题都要折磨很久,大概第一次就是这样的.想想,之后应 ...

  4. 12 Bit ADC与LSB的含义

    [转]12 Bit ADC与LSB的含义 LSB(Least Significant Bit),意为最低有效位:MSB(Most Significant Bit),意为最高有效位,若MSB=1,则表示 ...

  5. ios学习路线—Objective-C(装箱和拆箱)

    概述 从前面的博文我们也可以看到,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消息的也就是说有些NSObject的方法是无法调用的,这个时候 ...

  6. webSocket入门

    原理:Pub-Sub(发布和订阅) 它适用于发送者将数据(发布者)发送给抽象数量的收件人(订阅者),而无需指定他们是谁. 1.是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 ...

  7. pci枚举初始化部分(1)

    基于linux-4.20-rc3源码分析 1 .扫描所有PCI设备并检测,填充设备结构体 static struct pci_dev *pci_scan_device(struct pci_bus * ...

  8. Codeforces VK Cup 2018 Div.2

    总题面传送门 这次考试只过了3题,前三题题目难度并不大,但是第三题的代码细节卡了我两个半小时(基本上整场考试),所以以后要合理把握时间,注意把握代码细节,并更加完善我的代码风格,使其更加简练.(赛外话 ...

  9. 四分历python实现

    根据一个新加坡人的c代码改写成python代码 ''' 四分历''' # zq = 0 month = 0 def main(): global month year = 1 rb_year = 0 ...

  10. Atcoder2167 Blackout

    Atcoder2167 Blackout zjoi讲过的一道神题啊... 首先把每个黑点(a,b)看成一条有向边a->b,然后这个图就变成了一张有自环的有向图. 然后弱联通块就分开了,对于每个连 ...