您好,登录后才能下订单哦!
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九大内置对象
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 设置属性,该属性默认在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" %>:将一个页面内容包含在一个页面中
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);
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。