JAVA WEB(sevrlet jsp)笔记

更新时间:2023-09-11 06:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JAVA WEB笔记

笔者:张强

1、Servlet

Servlet预备 C/S结构与B/S结构

? 看金山词霸c/s ? 再Google翻译b/s

Web应用架构

页面显示逻辑控制业务逻辑控制数据库操作数据库Web应用架构与Java EE规范

JSPServletJavaBeanJDBCDB

Web应用架构与Java EE规范高级

JSFJavaBeanEJB(SessionBean)PersistenceDBWeb应用架构与民间解决方案

StrutsAction(Struts)SpringHibernateDBWeb工程的结构

要使用servlet,建工程的时候要选中webproject工程

web工程的特点

1)文件结构,多了一个webroot文件夹,与网页有关的文件都放在webroot下

2)在webroot下有一个web-inf的文件,运行web工程都要从这里开始加载

Tomcat的部署

tomcat是一个servlet的容器

1)修改端口:

找到tomcat conf下的server.xml文件 修改连接端口8080

在Server.xml中找到默认的8080端口,修改(如例子:改为8088) 为什么要改,因为Oracle已经占用了8080端口

2)配置JAVA_HOME环境变量 (必须配置)

如果有了就不用配了

并且值为如:C:\\Program Files\\Java\\jdk1.6.0_10 注意:后面不能带\\bin 将其添加到path

方法:%JAVA_HOME%\\bin; 测试:在dos下使用java命令

3)配置CATALINA_HOME

值为如:C:\\apache-tomcat-6.0.20 添加到path 方法:êTALINA_HOME%\\bin;

测试:在dos下打开tomcat使用startup.bat命令 关闭使用shutdown.bat命令

4)启动tomcat

部署好以后就可以启动tomcat,验证是否配置成功

启动方式一:找到tomcat的bin目录下的startup.bat文件,双击运行

启动方式二:在dos下输入命令startup.bat 启动成功后出现如下界面

不要关掉这个哦。这个就是tomcat服务器了

然后在IE或其它浏览器中输入访问地址 如:

http://localhost:8088 出现界面

5)添加tomcat到myeclipse

到preperences中找到

然后在tomcat下选择合适的版本

如下图

修改默认JDK (如:改为我们使用的1.6版JDK)

修改

部署好以后就可以启动tomcat,验证是否配置成功

6)修改虚拟目录(也就是tomcat的默认访问工程)

注意:根据需要修改

Context 标签 一定要在 host标签中 在server.xml文件中找到类似下面的文字

在其后添加如下代码:

修改之后如下:

....

Web工程的部署

呼出tomcat界面

右击tomcat服务器,选择红色框中的选项,添加工程

选择需要添加的工程

选择红框中的选项,开启tomcat服务器

Servlet的编写与配置

编写servlet代码

步骤一:新建java文件名为:TestServlet

注意:要像称为servlet类,要继承HttpServlet

public class TestServlet extends HttpServlet { } private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse } @Override protected void doPost(HttpServletRequest req, HttpServletResponse } @Override protected void service(HttpServletRequest arg0, HttpServletResponse } @Override public void destroy() { } @Override public void init() throws ServletException { } System.out.println(\我是init...\); System.out.println(\我是destroy....\); throws ServletException, IOException { throws ServletException, IOException { throws ServletException, IOException { resp) System.out.println(\我是doGet...\); this.doPost(req, resp); resp) System.out.println(\我是doPost...\); 设置数据的编码 resp.setCharacterEncoding(\); 通过流在网页打印 PrintWriter pw = resp.getWriter(); pw.println(\你好,我是从servlet来的哦!\); pw.flush(); pw.close(); // // arg1) System.out.println(\我是Service...\); super.service(arg0, arg1);

代码说明:

1) 在servlet中必须有doget、dopost方法 2) 访问servlet的时候先调用init()方法(注:只调用一次),在调用Service()进行对doget、

dopost的控制访问 3) 调用doget()

步骤二:配置servlet

如果要运行servlet代码就要配置webinf下的web.xml 配置如下

TestServlet com.togogo.servlet.TestServlet TestServlet /user/first XML配置说明: 在IE、firefox中访问servlet时的url为:

http://ipaddress:port/projectname/url-pattern(即上面配的url)

2、Jsp

JSP(全称Java server page)是一种网页脚本,可以嵌入Java语言,也包含有一些独特的语法,但最终都被编译成Java类。

Jsp由一个定制的标签和相关的Java语法构成。

JSP的访问,是要将JSP网页放到服务器后才能访问

Jsp网页的工作原理

服务器端怎样动态创建网页

新建Jsp

方法一:

可以手动创建JSP页面,其它格式类似HTML页面的创建,后缀名改为 .jsp 不同点:在标签前面,即文档的最前面添加代码,如下

<%@ page language=\import=\pageEncoding=\%>

典型的JSP页面结构如下:

<%@ page language=\import=\pageEncoding=\%> login page

了解JSP指令

新建JSP

? <%! %>的声明部分。

? 这里申明的变量,将成为Jsp生成的对应的Servelts类的成员变量 ? 这里申明的函数,将成为Jsp生成的对应的Servlet类的成员函数

<%--变量,函数的声明。这个注释客户端不能看见 --%> <%! int chinaarea = 96000000; int fun(int a,int b){ int sum = a + b; return sum; } %>

<% …%> 的中间部分

这里的代码会在Jsp页面显示的同时被执行,如同写在main函数里的代码一样。

b=<%=b %>

<%@...%> 处理指令 <%@ page

[ language=\

[ extends=\

[ import=\ [ session=\

[ buffer=\ [ autoFlush=\

[ isThreadSafe=\

[ info=\

[ errorPage=\

[ contentType=\ \ [ isErrorPage=\

%>

为jsp提供处理.jsp文件所需的信息

处理指令必须位于jsp文件的首行。(不要将处理指令置于<%@ include%>指令包括的文件内),并且必须在符号@和关键字之间加入空格。

<%@ page language=\<%@ include file =\ %>

Import

如果程序中已经有了import 那么在后面直接添加包名 Errorpage and iserrorpage

JSP标签指令

注释对JSP标签指令没用 页面跳转 接收页面传来的数据 <% String god = request.getParameter(\); String username = request.getParameter(\); %>

3、JSP与Servlet之间的操作

JSP与servlet数据传输 从JSP到servlet

注:主要是通过request这个对象传递数据, 主要是通过表单提交到后台(servlet)

在后台接收数据如下 在servlet中接收数据是用request的getParameter方法 String userName = request.getParameter(\); String userPassword = request.getParameter(\); System.out.println(userName + \ + userPassword);

从servlet到JSP

从servlet发送数据,同样也是通过request这个对象 如下:从servlet发送数据到JSP

代码说明:发回JSP是用setAttribute()方法放入数据;而想回到页面,则使用RequestDispatcher对象 request.setAttribute(\, userName); request.setAttribute(\, userPassword); rd = request.getRequestDispatcher(\); rd.forward(request, response);

在JSP页面接收数据

JSP隐含对象

生命周期

Request

Request对象只能用一次,当继续给其它servlet时,request将为null

Session

浏览器关闭,session不会马上销毁 通过下面代码得到session HttpSession session = request.getSession();

Session是当前用户都能用,只要当前用户没有关闭浏览器 注意:session有自己的生命周期,一般是30分钟

Application

通过以下代码得到application

HttpSession session = request.getSession();//先得到session ServletContext application = session.getServletContext();//在得到application

这个是在整个工程中存在

只要这个工程一直运行,那么application都一直存在 当工程关闭时,application随之结束

指定变量的session或application作用范围

Session作用范围变量对单个用户请求的JSP应用程序的所有网页都可用,而application作用范围变量对任何用户请求的JAP应用程序的所有网页都可用。 Session:

适合用于存储单个用户的信息,例如:首选项、用户名或标识。 在session中存两个新变量

<% session.setAttribute(“FirstName”,”Jeff”); session.setAttribute(“LastName”,”Smith”); %>

从session中取信息

hi ,<% session.getAttribute(“FirstName”);%>

Application:

适用于存储特定应用程序所有用户的信息,例如:应用程序需要的特定欢迎词或常规值。

过滤器

作用:在做某项事务之前,如果要对一定的条件进行处理,然后再进入访问路径 过滤器是要实现Filter接口

代码编写

如下:

代码说明:有三个我们要了解的方法 Init():是在过滤器启动时调用的 Destroy():在过滤器销毁时调用

Dofilter():是要我们自己进行编写处理逻辑的 } public void init(FilterConfig arg0) throws ServletException { } System.out.println(\过滤器启动。。。\); public void destroy() { } public void doFilter(ServletRequest arg0, ServletResponse arg1, } FilterChain arg2) throws IOException, ServletException { String userName = arg0.getParameter(\); if(userName.equals(\)){ System.out.println(\欢迎你\+userName); arg2.doFilter(arg0, arg1);//释放访问路径 System.out.println(\不欢迎你\); System.out.println(\过滤器销毁。。。\); 如 1、处理编码 2、对特定事务的过滤 如下例子

调用最后要使用 FilterChain的doFilter()方法跳转到相应的访问路径 public class FilterServlet implements Filter { }else{ }

过滤器的配置

过滤器也是一个servlet,所以也要是web-inf中的web.xml中进行配置 如下:

Filter /login Filter com.togogo.servlet.FilterServlet

监听器

作用:1、对不同的内置对象的生成与消亡进行监听(application session等);

2、对对象属性的生成、删除、修改进行监听

Application监听器

监听器代码的编写

编写application是要实现ServletContextListener这个接口

public class ApplicationListener implements ServletContextListener { } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println(\监听器生成。。。\); } @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println(\监听器销毁。。。\); }

监听器的配置

同样application监听器也作为一个servlet进行配置 直接配置class的路径

com.togogo.listener.ApplicationListener -class>

ApplicationAttribute监听器

监听器代码的编写

要实现接口ServletContextAttributeListener

public class ApplicationAttributeListener implements ServletContextAttributeListener { } @Override public void attributeReplaced(ServletContextAttributeEvent arg0) { } System.out.println(\修改Application属性域。。。\); @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { } System.out.println(\删除Application属性域。。。\); @Override public void attributeAdded(ServletContextAttributeEvent arg0) { } System.out.println(\添加Application属性域。。。\);

static synchronized public DBConnectionManager getInstance()//如果唯一的//实例instance已经创建,直接返回这个实例;否则,调用私有构造函数,创//建连接池管理类的唯一实例

private DBConnectionManager()//私有构造函数,在其中调用初始化函数init() public void freeConnection(String name, Connection con)// 释放一个连接,//name是一个连接池对象的名字

public Connection getConnection(String name)//从名字为name的连接池对象//中得到一个连接

public Connection getConnection(String name, long time)//从名字为name //的连接池对象中取得一个连接,time是等待时间 public synchronized void release()//释放所有资源

private void createPools(Properties props)//根据属性文件提供的信息,创建//一个或多个连接池

private void init()//初始化连接池管理类的唯一实例,由私有构造函数调用 private void loadDrivers(Properties props)//装载数据库驱动程序 }

3、连接池使用

上面所实现的连接池在程序开发时如何应用到系统中呢?下面以Servlet为例说明连接池的使用。

Servlet的生命周期是:在开始建立servlet时,调用其初始化(init)方法。之后每个用户请求都导致一个调用前面建立的实例的service方法的线程。最后,当服务器决定卸载一个servlet时,它首先调用该servlet的 destroy方法。

根据servlet的特点,我们可以在初始化函数中生成连接池管理类的唯一实例(其中包括创建一个或多个连接池)。如:

public void init() throws ServletException {

connMgr = DBConnectionManager.getInstance(); }

然后就可以在service方法中通过连接池名称使用连接池,执行数据库操作。最后在destroy方法中释放占用的系统资源,如: public void destroy() {

connMgr.release(); super.destroy(); }

结束语

在使用JDBC进行与数据库有关的应用开发中,数据库连接的管理是一个难点。很多时候,连接的混乱管理所造成的系统资源开销过大成为制约大型企业级应用效率

的瓶颈。对于众多用户访问的Web应用,采用数据库连接技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。本文阐述了使用JDBC访问数据库的技术?讨论了基于连接池技术的数据库连接管理的关键问题并给出了一个实现模型。文章所给出的是连接池管理程序的一种基本模式,为提高系统的整体性能,在此基础上还可以进行很多有意义的扩展。

http://www.webdevelopersjournal.com/columns/connection_pool.html http://www.webdevelopersjournal.com/columns/DBConnectionManager.java

操作步骤

作用:为了让我们连接数据库的连接信息不写死,所以把连接信息放到xml配置文件中

步骤一:

找到C:\\apache-tomcat-6.0.14\\conf\\context.xml 也就是tomcat下conf下的context.xml文件 在下面添加节点信息 【保存】 如下:

username 为登陆数据库用户名 password为登陆数据密码

步骤二:

在工程的web-inf下的web.xml中配置连接池信息

注意:中的名字要与context.xml中的name相同 如下:

DB Connection database javax.sql.DataSource Container

步骤三:

编写连接池的servlet

新建java文件LinkPool.java

public class LinkPool extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse } throws ServletException, IOException { InitialContext ic = new InitialContext(); DataSource ds = ds.getConnection(); System.out.println(\我连接数据了\); // TODO Auto-generated catch block e.printStackTrace(); // TODO Auto-generated catch block e.printStackTrace(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse } throws ServletException, IOException { resp) // TODO Auto-generated method stub this.doPost(req, resp); resp) try { (DataSource)ic.lookup(\); } catch (NamingException e) { } catch (SQLException e) {

} }

配置连接池servlet

LinkPool com.togogo.servlet.LinkPool LinkPool /linkdb index.jsp

关于路径(连接数据库)

/**

* 解析data_con.xml配置文件 获得数据库连接信息 *

* @throws Exception */

public ConnectionManager() throws Exception {

/**

* 下面方法是得到运行的路径

* 1、当从后台运行时,它的路径为workspace中工程的路径 * 如:/E:/workspace/webdatabase/WebRoot/WEB-INF/classes/

* 2、当从浏览器访问时,它的路径为tomcat的class路径

* 如:/C:/apache-tomcat-6.0.20/webapps/webdatabase/WEB-INF/classes/ */

=

String path

Thread.currentThread().getContextClassLoader().getResource(\

System.out.println(path);

// 读取连接数据库的配置文件信息

//XmlManager xm = new

XmlManager(\ XmlManager xm = new XmlManager(path+\

本文来源:https://www.bwwdw.com/article/3q4h.html

Top