Servlet和jsp开发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet和jsp开发相关的知识,希望对你有一定的参考价值。
Servlet和jsp开发
一、 Servlet
1.1、servlet简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。其实Servlet就是Java语言实现的一个接口,Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
1.2实现过程
1.客户端发送请求至服务器端;
2.服务器将请求信息发送至 Servlet;
3.Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4.服务器将响应返回给客户端。
1.3servlet九大内置对象
- request对象
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息, 即使用该对象可以获取用户提交信息。 客户端的请求参数都被封装到这个对象里面
2.response对象
对客户的请求做出动态的响应,向客户端发送数据。
3.session对象
1.什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建(web容器创建的,使用者直接使用即可),完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。 - aplication对象
1.什么是application:
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
2.application对象常用方法:
(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。(这个在web开发中很创建,可以通过与对象进行转发,达到数据共享)
(2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。 - out对象
out 对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。可以直接输出到前端页面中。 -
page java.lang.Object
对应this关键字。JSP网页本身
page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:
Object page = this;
在JSP页面中,很少使用page对象。
7.config
javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。 -
exception java.lang.Throwable 的实例
该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessageO和printStackTraceO等。 - pageContext
javax.servlet.jsp.PageContext 的实例,对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,通过此对象可以拿到其他8大对象,使用该对象可以访问页面中的共享数据。常用的方法有getServletContextO和getServletConfigO等。
//使用pageContext 设置属性,该属性默认在page 范围内
pageContext. setAttribute ("page" , "hello") ;
//使用request 设置属性,该属性默认在request 范围内
request. setAttribute ("request" , "hello");
//使用pageContext将属性设置在request 范围中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
// 使用session将属性设置在session 范围中
session.setAttribute("session" , "hellosession"; )
//使用pageContext将属性设置在session范围中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
//使用application将属性设置在application范围中
application. setAttribute ("app" , "hello") ;
//使用pageContext 将属性设置在application 范围中
pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;
1.4 四个作用域
1.application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
2.session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。(一个简单的应用就是可以动态的获取登录后的用户名称)
3.request:请求作用域,就是客户端的一次请求。
4.page:一个JSP页面。
1.5 servlet简单案例—用户登录,动态获取用户名,显示欢迎信息
1.下载的html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下载案例</title>
</head>
<body>
<a href="/response/ServletDownload?filename=曾惜-讲真的.mp3">曾惜-讲真的.mp3</a>
</body>
</html>
2.servlet后台逻辑
package com.lyg.servlet.download;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@WebServlet("/ServletDownload")
public class ServletDownload extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件名
String filename = request.getParameter("filename");
//获取servletcontext对象
ServletContext servletContext = getServletContext();
//设置响应头
String mineType = servletContext.getMimeType(filename);
response.setHeader("content-type",mineType);
//告诉浏览器是打开还是保存,并设置下载后的文件名
response.setHeader("content-disposition","attachment;filename="+filename);
String userAgent = request.getHeader("user-agent");
filename = URLEncoder.encode(filename, "utf-8");
//创建输入流,读入目标文件
InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/elements/"+filename);
byte []chars=new byte[1024*8];
//创建一个ServletOutputSteam 对象
ServletOutputStream outputStream = response.getOutputStream();
int len;
while ((len=inputStream.read(chars))!=-1){
outputStream.write(chars,0,len);
}
inputStream.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
二、jsp
2.1 jsp简介
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 [1] 是由SUN公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。他的本质上还是一个Servlet。
2.2 page指令
1.包含选项
import 使一个JAVA导入声明被插入到最终页面文件。
contentType 规定了生成内容的类型。当生成非HTML内容或者当前字符集character set并非默认字符集时使用。
errorPage 处理HTTP请求时,如果出现异常则显示该错误提示信息页面。
isErrorPage 如果设置为TRUE,则表示当前文件是一个错误提示页面。
isThreadSafe 表示最终生成的servlet是否安全线程(threadsafe)。
2.语法
1.<%@ include file="somefile.jsp" %>:将一个页面内容包含在一个页面中
- <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>:引入标签库
3.jsp和servlet综合应用---登录案例
- 登录后台的逻辑
package com.lyg.servlet.login;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@WebServlet("/LoginDemo02")
public class LoginDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
//获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");final String URL = "jdbc:mysql://localhost:3306/db1";
final String USER = "root";
final String PASSWORD = "12345678";
String SQL = "select * from userinfo where name = ? and password = ?";
HttpSession session = request.getSession();//获取session对象
//连接数据库,查询
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(URL,USER,PASSWORD);
PreparedStatement preparedStatement = connection.prepareStatement(SQL);
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
ResultSet resultSet = preparedStatement.executeQuery();
String db_username=null;
String db_password =null;
if (resultSet.next()){
db_username=resultSet.getString(2);
db_password=resultSet.getString(3);
}
//判断用户名和密码是否正确
if (username.equals(db_username) && password.equals(db_password)){
//信息都正确
//页面跳转到success.jsp;
session.setAttribute("username",username);//存储用户名
response.sendRedirect(request.getContextPath()+"/success.jsp");
}else {
//用户名获取密码不正确
//存储错误信息
request.setAttribute("code_error","用户名或者密码错误");
//同一次请求,请求转发
request.getRequestDispatcher("/userinfo/index.jsp").forward(request,response);//转发错误信息
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
- 前台页面就是个很简单的form表单,这里就不演示了。
最后谢谢小伙伴的浏览,共同学习,共同进步~~~~
以上是关于Servlet和jsp开发的主要内容,如果未能解决你的问题,请参考以下文章