文章标题

JSP基础语法

1.1 JSP注释

  • 显式注释语法:
<!--注释内容-->
  • 隐式注释语法:
<%
    //单行注释
    /*多行注释*/
%>

隐式注释客户端无法看见

1.2 Scriptlet(脚本小程序)

  1. <%%>:主要用于定义局部变量、编写语句

  2. <%!%>:主要用于定义全局变量、方法、类,不能出现其他语句
    尽量不要在JSP中定义类和方法

  3. <%=%>:表达式输出

<% String info = "www.baidu.com"; %>
<h1>website=<%=info%></h1>

1.3 scriptlet标签

scriptlet标签使用效果和<%%>一样

<jsp:scriptlet>
    String url="www.baidu.com";
</jsp:scriptlet>
<h2><%=url%></h2>

1.4 page常用指令

1. contentType设置MIME

MIME表示打开文件的应用程序类型,
page指令中,contentType可以指定文件的显示方式
例如:

<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page language="java" contentType="application/word;charset=GBK"%>

2. pageEncoding设置文件编码

charset是指服务器发送给客户端的内容编码,pageEncoding指的是JSP文件本身的编码。如果pageEncoding存在,那么JSP编码由pageEncoding决定,否则由charset决定,如果两个属性都不存在,则默认为ISO-8859-1
例如:

<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>

一般一个JSP页面只需要按照网页显示(text/html),则使用pageEncoding设置编码即可。

3. errorPage错误页的设置

错误页设置两步骤:
1. errorPage属性指定错误出现时的跳转页;
2. isErrorPage属性指定错误页标识

例如:
错误页中:

<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>
<%@page errorPage="error.jsp"%><!--一出现错误即跳转到错误处理页-->

错误处理页中:

<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>
<%@ page isErrorPage="true"%><!--表示该页面用于处理错误-->

错误页跳转输入服务器端跳转

可以修改Web.xml文件,实现在虚拟目录指定全局的错误处理

<error-page>
    <error-code>500</error-code>
    <location>/ch05/error.jsp</location>
</error-page>

依然服务器端跳转

4. 数据库连接操作

在page指令中可以使用import导入所需要的java开发包,导入java.sql包,进行数据库开发。
配置数据库的驱动程序,将mysql的驱动程序mysql-connector-java-5.0…复制到tomcat6.0\lib目录中,并重启服务器

例如:使用JSP列出emp表数据

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<html>
    <head><title>www.bruce.com</title></head>
    <body>
        <%! //定义数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; public static final String DBURL = "jdbc:mysql://localhost:3306/mldn"; public static final String DBUSER = "root"; public static final String DBPASS = "mysqladmin"; %>
        <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; %>
        <% try{ Class.forName(DBDRIVER); conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); String sql = "SELECT empno,ename,job,sal,hiredate FROM emp"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); %>
        <center>
            <table border="1" width="80%">
                <tr>
                    <td>雇员编号</td>
                    <td>雇员姓名</td>
                    <td>雇员工作</td>
                    <td>雇员工资</td>
                    <td>雇员日期</td>
                </tr>
                <% while(rs.next()){ int empno = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); float sal = rs.getFloat(4); java.util.Date date = rs.getDate(5); %>
                    <tr>
                    <td><%=empno%></td>
                    <td><%=ename%></td>
                    <td><%=job%></td>
                    <td><%=sal%></td>
                    <td><%=date%></td>
                </tr>
                <% } %>
            </table>
        </center>
        <% }catch(Exception e){ e.printStack(); }finally{ rs.close(); pstmt.close(); conn.close(); } %>
    </body>
</html>

没有Java代码的页面写成静态页面的后缀,可以适当提升运行速度

1.5 包含指令

1.5.1 静态包含

语法:<%@ include file = "要包含的文件路径"%>

包含的文件可以是JSP,HTML,文本,或者是一段Java程序。包含操作实际上是将被导入的文件内容导入,一起进行编译,最后再将一份整体的内容展现给用户
例如:

<body>
<%@include file="info.html"%>
</body>

1.5.2 动态包含

语法:
1. 不传递参数:
<jsp:include page="{要包含的文件路径\<%=表达式%>}" flush="true\false"/>

  1. 传递参数:
<jsp:include page="{要包含的文件路径\<%=表达式%>}" flush="true\false">
    <jsp:param name="参数名" value="参数内容"/>
    //可以传递多个参数
</jsp:include>

例如:
包含页:include_demo.jsp

<jsp:include page="receive_param.jsp">
    <jsp:param name="name" value="<%=username>">
    <jsp:param name="info" value="Bruce">
</jsp:include>

被包含页:receive_param.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<h1>参数1:<%=request.getParameter("name")%></h1>
<h1>参数2:<%=request.getParameter("info")%></h1>

false表示完全被读进来再输出,true表示buffer满了就输出,一般都设置为true,默认为true
动态包含是先处理再输出

1.6 跳转指令

语法:
1. 不传递参数:
<jsp:forward page="{要包含的文件路径\<%=表达式%>}"/>
2. 传递参数:

<jsp:forward page="{要包含的文件路径\<%=表达式%>}">
    <jsp:param name="" value=""/>
    //可以传递多个参数
</jsp:forward>

上述跳转属于服务器端跳转

1.7 实例操作:JSP+JDBC实现用户登录程序

JSP内置对象

2.1 九大内置对象

内置对象 类型 描述
pageContext javax.servlet.jsp.PageContext 页面容器
request javax.servlet.HttpServletRequest 请求
response javax.servlet.HttpServletResponse 回应
session javax.servlet.HttpSession 保存
application javax.servlet.ServletContext 共享信息
config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
out javax.servlet.jspWriter 页面输出
page java.lang.Object
exception java.lang.Throwable

2.2 四种属性范围

属性名 属性范围
page 只在一个页面中保存属性
request 一次请求中保存属性,服务器跳转后仍有效
session 一次会话范围中保存,任何跳转都有效,重新打开浏览器无效
application 整个服务器保存,所有用户都可以使用

4个内置对象都支持以下操作方法:

public void setAttribute(String name,Object o)
public Object getAttribute(String name)
public void removeAttribute(String name)

2.2.1 page属性范围(pageContext)

2.2.2 request属性范围

2.2.3 session属性范围

2.2.4 application属性范围

2.2.5 page属性范围的更改方法

可以使用如下的方法修改page属性范围:
public void setAttribute(String name,int scope)

2.3request对象

request对象主要作用是接收客户端发送来的请求,是javax.servlet.http.HttpServletRequest接口的实例化对象

常用方法 描述
public String getParameter(String name) 接收请求参数
public String[] getParameterValues(String name) 接收一组请求参数
public Enumeration getParameterNames() 取得请求参数名
public String getRemoteAddr() 取得客户端IP地址
void setCharacterEncoding(String env)throws UnsupportedEncodingException 设置统一的请求编码
public boolean isUserInRole(String role) 用户身份认证
public Httpsession getSession() 取得当前的session对象
pubic StringBuffer getRequestURL() 返回正在请求的路径
pubic Enumeration getHeaderNames() 取得全部头信息的名称
pubic Enumeration getHeader(String name) 根据名称取得头信息的内容
public String getMethod() 取得用户的提交方式(get/post)
public String getServletPath() 取得访问的路径
public String getContextPath() 取得上下文资源路径

2.3.1 解决乱码

例如:

<body>
<% request.setCharacterEncoding("GBK"); %>
</body>

例如:接收表单全部内容
定义表单页:request_form.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>request_form.html</title>
</head>

<body>
    <form action="request_demo.jsp" method="post"><!-- 用post,否则乱码 -->>
        姓名:<input type="text" name="uname"><br /> 兴趣:<input  type="checkbox" name="**inst" value="唱歌">唱歌<input  type="checkbox" name="**inst" value="跳舞">跳舞<input  type="checkbox" name="**inst" value="游泳">游泳<br /> 自我介绍:
        <textarea cols="30" rows="3" name="note"></textarea>
        <input type="hidden" name="uid" value="1"> <input  type="submit" value="提交"> <input type="reset" value="重置">
        <br />
    </form>
</body>
</html>

定义读取页:request_demo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'request_demo.jsp' starting page</title>
</head>

<body>
    <% request.setCharacterEncoding("GBK");//不能少,否则容易乱码 %>
    <table border="1">
        <tr>
            <th>参数名称</th>
            <th>参数内容</th>
        </tr>
        <% Enumeration enu = request.getParameterNames(); while (enu.hasMoreElements()) { String paramName = (String) enu.nextElement(); %>
        <tr>
            <td><%=paramName%></td>
            <td>
                <% if (paramName.startsWith("**")) { String paramValue[] = request .getParameterValues(paramName); for (int i = 0; i < paramValue.length; i++) { %> <%=paramValue[i]%><% } } else { String paramValue = request.getParameter(paramName); %> 
                    <%=paramValue%>
                <% } %>
            </td>
        </tr>
        <% } %>

    </table>
</body>
</html>

浏览器默认的是UTF-8
现阶段每一个JSP页面都写上编码设置

2.3.2 接收请求参数

参数传递有post和get方式两种

2.3.3 显示全部头信息

例如:

<%@ page contextType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>取得头信息的名称和内容</title></head>
<body>
    <% Enumeration enu = request.getHeaderNames(); while(enu.hasMoreElements()){ String headerName = (String)enu.nextElement(); String headerValue = request.getHeader(headerName); %>
    <h5><%=headerName%>--><%=headerValue%></h5>
    <% } %>
</body>
</html>

2.3.4 角色验证

增加新用户需要修改conf/tomcat-user.xml文件。
例如:

<user username="10202357" password="Tu86511620" roles="admin" />

用户的角色会自动创建
配置完之后还需要配置web.xml文件,在web.xml文件中加入对某一资源的验证操作

角色验证即在JSP页面中调用request.isUserInRole(“”)

2.3.5 其他操作

例如:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>获得IP\访问路径\提交方式</title>
</head>
<body>
    <% String method = request.getMethod(); String ip = request.getRemoteAddr(); String path = request.getServletPath(); String contextPath = request.getContextPath(); %>
    <h3>
        请求方式:<%=method%></h3>
    <h3>
        IP地址:<%=ip%></h3>
    <h3>
        访问路径:<%=path%></h3>
    <h3>
        上下文名称:<%=contextPath%></h3>
</body>
</html>

request内置对象在实际开发中使用最多,当服务器端需要得到客户端的相关信息时就会用到request对象完成

2.4 response对象

response对象的主要作用是对客户端请求的响应,是javax.servlet.http.HttpServletResponse接口的实例

常用方法 描述
public void addCookie(Cookie cookie) 给客户端增加Cookie
public void setHeader(String name,String value) 设置回应的头信息
public void sendRedirect(String location)throws IOException 页面跳转

2.4.1 设置头信息

例如:
设置自动刷新:

<%
    reponse.setHeader("refresh","2")
%>

定时跳转:

<%
    reponse.setHeader("refresh","2"URL="hello.html")
%>

定时跳转(JSP response\HTML方式)都属于客户端跳转

使用HTML完成跳转功能:

<html>
<head>
    <title>测试html页面的跳转</title>
    <META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.html">
</head>
<body>
    <h3>
        3秒后跳转到hello.html页面,如果没有跳转请按<a href="hello.html">这里</a>!
    </h3>
</body>
</html>

当一个页面中没有JSP代码又想执行定时跳转的时候才使用HTML形式的设置跳转头信息

2.4.2 页面跳转

例如:

<% response.sendRedirect("01.html"); %>

<jsp:forward>不同,response属于客户端跳转,要在整个页面执行完以后才执行跳转。
<jsp:forward>可以方便地进行参数传递,而且服务器端跳转要比客户端跳转更常用

2.4.3 操作cookie

Cookie的常用方法 描述
public Cookie(String name,String value)
public String getName()
public String getValue()
public void setMaxAge(int expiry) 设置Cookie的保存时间,以秒为单位

Cookie是服务器给客户端增加的,所以使用reponse对象
例如:

<%
    Cookie c1 = new Cookie("Tu","Bruce");//第一个参数是属性名,第二个参数是属性值
    c1.setMaxAge(60);//Cookie保存60秒
    response.addCoolie(c1);//向客户端增加Cookie
%>

例如:取出Cookie

<% Cookie c[] = request.getCookies(); for(int x = 0; x < c.length; x++){ %>
    <h3><%=c[x].getName()%>--><%=c[x].getValue()%></h3>
<% } %>      

2.5 session对象

在开发中session对象最主要的用处是完成用户的登录、注销等常见功能。

常用方法 描述
public String getId() 取得Session Id
public long getCreationTime() 取得Session的创建时间
public long getLastAccessedTime() 取得Session的最后一次操作时间
public boolean isNew() 判断是否是新的Session
public void invalidate() 让Session失效
public Enumeration getAttributeNames() 得到全部属性的名称

2.5.1 取得Session Id

例如:

<% String id = session.getId(); %>
<h3>
    session id:<%=id%>
</h3>

服务器重启,session id一般就会消失。tomcat可以通过配置server.xml文件加入保存session操作

2.5.2 登录与注销

实例:
编写表单并进行验证login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>登录注销</title>
</head>

<body>
    <form action="login.jsp">
        用户名:<input type="text" name="uname" /></br> 密&nbsp;&nbsp;码:<input  type="password" name="upass"> <input type="submit" value="登录">
        <input type="reset" value="重置">
    </form>
    <% String name = request.getParameter("uname"); String password = request.getParameter("upass"); if (!(name == null || "".equals(name) || password == null || "" .equals(password))) { if ("Bruce".equals(name) && "2222".equals(password)) { response.setHeader("refresh", "2,URL=welcome.jsp"); session.setAttribute("userid", name); %>
    <h3>用户登录成功,两秒后跳转到欢迎页!</h3>
    <h3>
        如果没有跳转,请点击<a href="welcome.jsp">这里</a>
    </h3>
    <% } else { %>
    <h3>错误的用户名和密码</h3>
    <% } } %>
</body>
</html>

登录成功欢迎页welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>'welcome.jsp'</title>
</head>

<body>
    <% if (session.getAttribute("userid") != null) { %>
    <h3>
        欢迎<%=session.getAttribute("userid")%>光临本系统,<a href="logout.jsp">注销</a>
    </h3>
    <% } else { %>
    <h3>
        请先进行系统的<a href="login.jsp">登录</a>
    </h3>
    <% } %>
</body>
</html>

登录注销logout.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>'logout.jsp'</title>
</head>

<body>
    <% response.setHeader("refresh", "2;login.jsp"); session.invalidate(); %>
    <h3>你已经成功注销,两面后自动跳转回首页</h3>
    <h3>
        如果没有跳转,请点击<a href="login.jsp">这里</a>
    </h3>
</body>
</html>

2.5.3 判断新用户

<%
session.isNew();
%>

2.5.4 取得用户的操作时间

<%
long start = session.getCreationTime();
long end = session.getLastAccessedTime();
long time = (end-start)/1000;//得出操作的秒
%>

2.6 application对象

常用方法 描述
String getRealPath(String path) 得到虚拟目录对应的绝对路径
public Enumeration getAttributeNames() 得到所有属性的名称
public String getContextPath() 取得当前的虚拟路径名称

2.6.1 取得虚拟目录对应的绝对路径

例如:

<%
    String path1 = application.getRealPath("/");
    String path2 = this.getServletContext().getRealPath("/");//两个方法的结果一样
%>

例如:保存表单内容在Web项目的根目录中的note文件夹中

表单递交页面form.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>form.html</title>
</head>

<body>
    <form action="input.jsp">
        输入文件名称:<input type="text" name="filename"> 输入文件内容:
        <textarea name="filecontent" cols="30" rows="3"></textarea>
        <input type="submit" value="保存"> <input type="reset" value="重置">
    </form>
</body>
</html>
处理页面input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>My JSP 'input.jsp' starting page</title>
</head>

<body>
    <% String realPath = this.getServletContext().getRealPath("/"); %>
    <h3><%=realPath%></h3>
    <% String name = request.getParameter("filename"); String content = request.getParameter("filecontent"); String fileName = this.getServletContext().getRealPath("/") + "note" + File.separator + name; File file = new File(fileName); if (!(file.getParentFile().exists())) { file.getParentFile().mkdir(); } PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.println(content); ps.close(); %>
</body>
</html>
类似用FileOutputStream也可以完成创建文件并写入,body体改为
<body>
    <% String realPath = this.getServletContext().getRealPath("/"); %>
    <h3><%=realPath%></h3>
    <% String name = request.getParameter("filename"); String content = request.getParameter("filecontent"); String fileName = this.getServletContext().getRealPath("/") + "note" + File.separator + name + ".txt"; File file = new File(fileName); if (!(file.getParentFile().exists())) { file.getParentFile().mkdir(); } FileOutputStream fo = new FileOutputStream(file); byte b[] = content.getBytes(); fo.write(b); fo.close(); %>
</body>
结果一样。

2.6.2 网站计数器

代码如下:

<%@page import="java.io.*"%>
<%@page import="java.math.*"%>
<%@page import="java.util.*"%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'Count.jsp' starting page</title>
</head>

<body>
    <%!BigInteger count = null;%>
    <%!//为了方便,方法直接定义放在在JSP文件中 public BigInteger load(File file) { BigInteger count = null; try { if (file.exists()) { Scanner scan = new Scanner(new FileInputStream(file)); if (scan.hasNext()) { count = new BigInteger(scan.next()); scan.close(); } }else { count = new BigInteger("0"); save(file, count); } } catch (Exception e) { e.printStackTrace(); } return count; } public void save(File file, BigInteger count) { try { PrintStream ps = null; ps = new PrintStream(new FileOutputStream(file)); ps.println(count); ps.close(); } catch (Exception e) { e.printStackTrace(); } }%>
    <% String filename = this.getServletContext().getRealPath("/") + "count.txt"; File file = new File(filename); if (session.isNew()) { synchronized (this) { count = load(file); count = count.add(new BigInteger("1")); save(file, count); } } %>
    <h2>
        您是第<%=count%>位访客!
    </h2>
</body>
</html>

2.6.3 查看application范围的属性

取得全部application的属性:

<% Enumeration<?> enu1 = this.getServletContext().getAttributeNames(); while (enu1.hasMoreElements()) { String name = (String) enu1.nextElement(); %>
    <h4><%=name%>--><%=this.getServletContext().getAttribute(name)%></h4>
<% } %>

2.7 Web安全性及config对象

2.7.1 Web安全性

节点的主要功能是连接和节点,此节点的名称只在配置文件的内部起作用
例如:

<servlet>
    <servlet-name>he</servlet-name>
    <jsp:file>/WEB-INF/hello.jsp</jsp.file>
</servlet>
<servlet-mapping>
    <servlet-name>he</servlet-name>
    <url-pattern>/hello.mldn</url-pattern>
</servlet-mapping>

2.7.2 config对象

使用config对象中的getInitParameter()方法可以取得初始化的配置参数,所有配置参数在web.xml文件中进行配置。

方法|描述
----|----
public String getInitParameter(String name)|
public Enumeration getInitParameterNames()|


## 2.8 out对象
方法|描述
----|----
public int getBufferSize()|
public int getRemaining()|



## 2.9 pageContext对象
pageContext对象可以取得ServletRequest\ServletResponse\ServletConfig\ServletContext接口的实例
方法|描述
----|----
public abstract void forward(String relativeUrlPath)throws ServletException,IOException|
public void include(String relativeUrlPath)throws ServletException,IOException|
public ServletConfig getServletConfig()|
public ServletRequest getRequest()|
public ServletResponse getResponse()|
public HttpSession getSession()|

=================================================================================
# JavaBean
## 3.1 JavaBean基本要求
- 所有类属性封装并编写对应的getter和setter方法
- 所有类至少存在一个无参构造方法
- 所有类必须放在一个包中
- 所有类声明成public class


## 3.2  JSP中使用JavaBean
### 3.2.1   Web开发的标准目录结构

编译好的class文件或jar包应该放在WEB-INF\classes文件夹中,可以根据命令

javac -d. SimpleBean.java

命令根据package的定义打包编译

*tomcat安装目录的lib、WEB-INF\classes和WEB-INF\lib文件夹实际上都表示了classpath,直接将类或jar包或class文件复制到这些文件夹下即可使用*

### 3.2.2 使用JSP的page指令导入所需要的JavaBean
例如:
    <%@page import="cn.mldn.lxh.demo.*"%>

### 3.3.3 使用<jsp:useBean>指令导入所需要的JavaBean
例如:
    <jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean"/>
ps:此方法省略了手工实例化对象的过程

## 3.3 JavaBean与表单
实例:
输入表单input.html:




input.html



姓名:
年龄:

接收内容表单input.jsp
例如:修改input.jsp接收表单全部内容

# 3.4 设置属性:<jsp:serProperty>
4种设置属性操作:
//自动匹配 //指定对象的属性名称,自动找表单中同名名称赋值给该属性(自动匹配) //指定参数,参数名称是原表单传递过来的参数名称 //指定内容

# 3.5 取得属性:<jsp:getProperty>
语法:
*实际上调用的是JavaBean的getter()方法,所以类定义的时候一定要有getter()setter()方法*


# 3.6   JavaBean的保存范围
例如:session范围的JavaBean
在src文件夹中建立此类
package cn.mldn.lxh.demo; public class Count { private int count = 0; public Count() { System.out.println(“————一个对象产生————–”); } public int getCount() { return ++this.count; } }
写如下页面session.jsp
结果:在一个session下的刷新操作,count会一直向上计数。
类似的,application范围的JavaBean对象,除非服务器关闭,对象才会消失。

# 3.7 JavaBean的删除
例如:
3.6页面改动为 ## 3.8 实例:注册认证
## 3.9 DAO设计模式
# 文件上传 ## 4.1 SmartUpload ## 4.2 FileUpload # Servlet程序开发 ## 5.1 Servlet简介 Servlet(服务器端小程序) ## 5.2 第一个Servlet程序 处理HTTP请求的Servlet程序,必须继承HttpServlet类,而且自定义的Servlet类至少还要覆写HttpServlet类中提供的doGet()方法 doGet()方法中定义了两个参数:HttpServletRequest和HttpServletResponse,用来接收和回应用户的请求 示例: 用Servlet输出helloworld(实际上Servlet并不适合输出显示)
package org.lxh.servletdemo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head><title>Bruce</title></head>");
        out.println("<body>");
        out.println("<h1>HELLO WORLD</h1>");
        out.println("</body>");
        out.println("</head>");
    }
}

编译完成后可以将程序打包保存在WEB-INF\classes文件夹下即可,或者放在jdk目录下的jre\lib\ext中
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name></display-name>
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>org.lxh.servletdemo.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
*用户输入地址对于Servlet而言就属于一种get请求* ## 5.3 Servlet与表单 ## 5.4 Servlet生命周期 ## 5.5 取得初始化配置信息 ## 5.6 取得其他内置对象 ## 5.7 Servlet跳转 ## 5.8 Web开发模式:Mode 1与Mode 2 # 表达式语言 ## 6.1 表达式语言的特点 如果输出的内容为null,则会自动使用空字符串”“表示。 语法 `${属性名称}` ## 6.2 表达式语言的内置对象 表达式语言的内置对象|说明 —–|—– pageContext| pageScope| requestScope| sessionScope| applicationScope| param| paramValues| header| headerValues| cookie| initParam| ### 6.2.1 访问4种属性范围的内容 1. 优先访问范围小的属性 2. 使用xxxxScope访问特定属性值 如:

PAGE属性内容:`${pageScope.info}`

6.2.2 调用内置对象

pageContext对象可以取得request,session,application的实例。
如:

${pageContext.request.remoteAddr}
${pageContext.session.id}
${pageContext.session.isNew}

6.2.3 接收请求参数

语法:
接收一个参数:
${param.属性名称}
接收一组参数:
${paramValues.属性名称}

接收一组参数并取出时,还是需要分别指定下标。
如:

${paramValues.inst[0]}

${paramValues.inst[1]}

${paramValues.inst[2]}

6.3 集合操作

主要接收:
1. Collection接口
2. Map集合
中的内容

例如:
接收Collection接口的内容

<% List all = new Arraylist(); all.add("one"); all.add("two"); all.add("three"); request.setAttribute("info",all); %>
<h3>${info[0]}</h3>
<h3>${info[1]}</h3>
<h3>${info[2]}</h3>
例如: 输出Map集合的内容

6.4 类操作及在MVC表达式中的应用

例如:
<%
Dept dept = new Dept();
dept.setDeptno(10);
dept.setDname(“deptthree”);
request.setAttribute(“info”,dept);
%>
<

${info.deptno}


${info.dname}


>

6.5 运算符

JSP标签编程

7.1 标签编程简介

JSP标准标签库(JSTL)

JSTL主要有核心标签库、国际化标签库、SQL标签库、XML标签库和函数标签库等。

8.1 核心标签库

4个基本标签
2个流程控制标签
2个迭代标签
其他

8.2 国际化标签库

2个国际化标签

3个信息显示标签
6个数字及日期格式化标签

8.3 SQL标签库

—–|—–
|
|
|
|

并不建议通过JSTL操作数据库,在MVC设计模式中,JSP页面主要用于显示

8.4 XML标签库

—–|—–
|
|
|
|
|
|
|
|

未完待续

你可能感兴趣的:(文章标题)