JSP的详解

来源:互联网 发布:java socket 发送文件 编辑:程序博客网 时间:2024/05/29 17:59

一、 JSP基础概念

1. 软件架构

B/S架构:Browser/Server,浏览器-服务器

           最大的优点就是:一次部署,处处访问。

C/S架构:Client/Server,客户端-服务器

           功能、事件丰富,可以完整的使用计算机的一系列资源。但是升级维护不方便。

2. B/S架构工作原理

采用请求+相应的工作模式进行交互。

1.输入打开浏览器,输入网址,回车。

2.请求将由客户端浏览器发送至WEB应用服务器,进行处理。

3.WEB应用服务器将响应的结果(html\css\js\image...)发送回客户端浏览器

4.浏览器渲染解析html,将页面呈现出来。

3. URL

定义:统一资源定位符。通过URL来寻找网络资源。

格式:协议部分  主机地址  目标资源地址  参数

示例http://www.cnblogs.com/java/articlelist.jsp?key=tomcat

解释协议部分:http协议

主机地址:www.cnblogs.com

资源地址:java/articlelist.jsp

参数部分:key=tomcat

   注意http协议的默认端口是:80

4. web服务器

是可以向发出请求的浏览器提供文档的程序。提供网上的信息浏览服务。

常见的WEB服务器:IISTomcatWebLogicApacheNginx...... 

5. Tomcat

下载地址:

http://tomcat.apache.org/

目录结构: 

1.bin目录:用于存放tomcat的一些核心组件、启动以及停止的命令。

     2.conf目录:TOMCAT的配置目录,里面存放了tomcat的一系列配置文件。

     3.lib目录:存放TOMCAT运行时需要的所有Jar

     4.logs目录:存放tomcat启动、运行过程中产生的所有日志文件。

     5.temp目录:临时目录

     6.webapps目录:web网站发布的目录

     7.work目录:tomcat中发布的动态网站的工作目录。

如何修改Tomcat的默认端口:

1. 打开Tomcat目录,找到conf目录下的server.xml文件;

2. 找到配置节<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

3. port修改为目标端口。

6. eclipse中配置tomcat

1>.Window -> Pereferences 打开对话框

2>.展开Server节点,选择Runtime Environment

3>.从右侧点击Add按钮,从对话框中选择Apache Tomcat 7.0,点击下一步

4>.在弹出的Tomcat Server对话框中选择之前Tomcat的解压目录。点击完成即可。

7. eclipse创建的动态网站目录结构介绍

1>.java Resrouces -> src 目录:存放所有的java源文件

2>.WebContent 目录:存放网站需要的jsp页面文件、html文件、cssjsimage等资源。

3>.build 目录:java文件、jsp文件的编译目录

4>.Web Content -> WEB-INF 目录:该目录中的所有文件不会直接被客户端(浏览器)访问。

所以一些敏感的资源文件可以放到本目录。比如网站的配置文件web.xml文件就存在于该目录。

8. eclipse中如何发布web站点

1>.打开Server窗口

2>.右击Server窗口的空白区域,依次选择:New -> Server,弹出新建服务器窗口

3>.从窗口中选择Tomcat v7.0 Server,点击Finishe即可。

4>.双击新添加的Tomcat v7.0 Server节点,即可弹出新的对话框。

从对话框中选择Server Locations,选中第二项:Use Tomcat installation;

同时,Server Path修改为:webapps

最后Contrl + S保存。

5>.右击Tomcat,选择“Add And Remove

从对话框的左侧选择目标网站,点击Add按钮即可添加到右侧。

最后点击Finish

9. 解决JSP中文乱码的问题

1>.Window -> Pereferences 打开对话框,选择General -> Content Types

从右侧选择Text -> JSP,然后在最下面的文本框中将ISO-8859-1改为UTF-8

2>.选择General -> Workspace

从右侧最下面,选择text file encoding,改为:UTF-8

3>.选择Web -> JSP Files节点

从右侧Encoding选择ISO 10646/Unicode(UTF-8)

最后点击OK即可。

10. JSP

JSP(Java  Server  Pages)JSP是运行在服务器端的Java页面。使用HTML嵌套Java代码实现。

11. JSP中编写JAVA代码

1>.  <% ... %>

在里面可以写多行java代码,每行用分号结尾。注意:不能定义方法。

2>.  <%! ...  %>

在里面只能定义全局变量和方法。

3>.  <%= ... %>

向页面输入内容。等价与<% out.write("abc"); %> == <%= "abc" %>

12. 如果在jsp页面中导入其他的包

page指令中添加属性import,值为包名。

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

13. 配置默认页

例如,将index.jsp配置成默认页。

1>.打开web.xml文件,修改welcome-file-list;

2>.在第一个节点中添加<welcome-file>index.jsp</welcome-file>

注意:每次web.xml被修改以后,要重启Tomcat

14. getpost的区别

1.get会将参数跟到url地址后面;post则不会。

2.get提交的数据有大小限制,Post则不会。

3.get提交不安全,post提交安全。

4.get方式有利于Url传播,post则不利于url传播。

15. Http状态码

200    请求成功

404    请求的资源不存在

500    服务器内部错误

302    重定向

二、 JSP九大内置对象

1. 请求对象:request

request.getRemoteAddr()   获取客户端的IP地址。

request.setAttibute(String, Object)  存储数据

Object request.getAttribute(String)  获取数据

String = request.getParameter("参数名");  获取参数的单个值

String[] s = request.getParameterValues("参数名");获取参数的多个值

注意:只有在同一次请求中存储的数据才能共享。

2. 输出对象:out

3. 响应对象:response

转发和重定向

重定向:客户端会先后发送2次请求到服务器。

response.sendRedirect("welcome.jsp");

重定向是客户端行为。

转发:客户端向服务器发送一次请求,服务器端再请求另外一个页面地址,最后将结果响应给客户端

request.getRequestDispatcher("login.jsp").forward(request, response);

转发是服务器行为。

4. 应用程序对象:application

application是服务器开辟的一块共享数据存储区域。所有的会话均可以从application读写数据。

application中存储的数据永远有效(服务器关闭时数据才会失效)。

applicaton.setAttribute(String key, Object value);//存或修改数据

Object applicaton.getAttribute(String key); //读取数据

applicaton.removeAttribute(String key);//移除数据

5. 会话对象:session

客户端第一次向服务器发送请求以后,会话就会建立。当把浏览器关闭掉,重新再打开浏览器,就算是另一次新会话了。服务器会为每一个会话建立单独的数据存储区域。

session中存储的数据有有效期的限制。session默认超时时间为30分钟。

更改默认超时时间有两种方式:

方式一:通过配置修改

web.xml文件中调整session失效时间:

<session-config>

        <session-timeout>30</session-timeout>

</session-config>

方式二通过Java代码修改

session.setMaxInactiveInterval30*60;//以秒为单位

session其他方法介绍

1.session.setAttribute(String key, Object value);//存或修改

2.Object session.getAttribute(String key); //读取数据

3.session.removeAttribute(String key);//移除数据

4.session.invalid();//设置session失效(会话失效并且会话所有存储的数据丢失

6. 页面上下文对象:pageContext

7. 页面对象:page

8. 配置对象:config

9. 异常对象:exception

三、 Cookie介绍

1>.cookie将数据存储客户端计算机。

Cookie cookie1 = new Cookie(String, String);

向客户端写cookie,使用responseresponse.addCookie(...);

获取客户端的cookie,使用requestrequest.getCookies();

2>.Cookie也有生命周期(有效期),通过cookie.setMaxAge(int seconds)

如果seconds=0,表示当关闭浏览器后,cookie自动失效;

如果seconds<0,表示从客户端删除cookie

如果seconds>0,表示cookie失效的具体时间。

注意:JSESSIONID是系统系统添加的一个cookie,每次会话创建后JSESSIONID就会添加到cookie中。

3>.对于一些不敏感(不重要)的业务数据,并且数据量较小,就可以存储到cookie中。

4>.cookiesessionapplication在存储数据方面的差异。

相同点:

cookiesessionapplication都可以存储数据。

不同点:

1.sessionapplication都是把数据存储到服务器端;

2.cookie将数据存储到客户端;

3.session是用户会话级别,不同用户不能共享数据;application是全局的,所有用户共享数据。

4.sessionapplication会对服务器造成压力,而cookie不会。

四、 JSP乱码问题(java后台乱码)

JSP默认采用ISO-8859-1编码,该编码不支持中文等字符。所以需要在后台设置编码格式。

GET方式发送请求时的编码解决方案:

第一种:String title = request.getParameter("advtitle");

    String title1 = new String(title.getBytes("ISO-8859-1"), "UTF-8");

第二种:在tomcatconf->server.xml中修改Connector,增加URIEncoding属性。

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

POST方式发送请求时的编码解决方案:

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");

五、 JDBC

1.基本概念

定义:Java DataBase Connectivityjava数据库连接技术。

用途:用于实现java程序和各种数据库(Oracle|Mysql|Sql Server...)的操作。

JDBC提供了一组类和接口(API),它们位于java.sql以及javax.sql包中。

2.JDBC访问数据库的步骤

1>.加载驱动程序

首先将驱动的jar包文件拷贝到web项目的lib目录中

Class.for("驱动程序类");//加载驱动程序

2>.获取连接对象

连接字符串:jdbc:mysql://127.0.0.1:3306/newsdb?user=root&password=123456

Connection connection = DriverManager.getConnection("连接字符串");

3>.创建Statement,执行SQL语句

Statement stmt = connection.createStatement();

int count = Statement.executeUpate(String sql);

注意

executeUpdate方法处理的SQL包括DML(insert|update|delete)和DDL(Create|ALTER|DROP)

        executeUpate()方法的返回值为int

insert|update|delete返回值为大于0的值,表示成功

create|alter|drop返回值永远为0

Statement.executeQuery(String sql);

注意

executeQuery方法处理的SQL包括DQL(select)

4>.返回ResultSet结果或者数据库受影响的行数

ResultSet set = stmt.executeQuery();

while(set.next()==true){

    //循环一次取一条

    set.getString(arg0);//取字符串

    set.getInt(arg0);//取整数

    set.getDouble(columnLabel);//double

set.getFloat(columnIndex);//float

set.getDate(columnIndex);//取年月日

set.getTime(columnIndex);//取时分秒

set.getTimestamp(columnIndex)//取年月日时分秒     

}

5>.关闭连接

connection.close();

3. SQL注入

  用户输入一些特殊的字符,让程序中动态拼接的SQL语句,改变原来执行的含义,最终获取非预期的结果。

  导致SQL注入的原因就在于:程序中的SQL语句是通过字符串动态拼接的。

  例如:

String sql = "select * from userinfo where username='"+uname+"' and password='"+upass+"'";

如果uname = zhangsan     upass = 123456,那么上述sql变量的值为:

select * from userinfo where username='zhangsan' and password='123456'

如果uname = 1' or 1=1 or '1     upass = 123456,那么上述sql变量的值为:

select * from userinfo where username='1' or 1=1 or '1' and password='123456'

4.如何避免程序中被SQL注入?

使用参数化查询。具体来说,就是在程序中尽量不要使用Statement类,而采用PreparedStatement类。

StatementPreparedStatement的父类。

//SQL语句中,每一个参数使用?作为占位符

String sql = "select count(*) from userinfo where username=? and userpass=?";

PreparedStatement stmt = conn.prepareStatement(sql);

stmt.setString(1, username);

stmt.setString(2, userpass);

ResultSet set = stmt.executeQuery();

六、 分层开发

1.分层开发

  在项目实际开发过程中,会将整个项目从上到下划分为界面层、业务逻辑层、数据层。

  三层开发是项目开发实践中典型的开发模式。

  目的:实现高内聚、低耦合。

2.各层功能

  界面层

    功能:负责数据展示,搜集用户输入。即和用户进行交互的层。

          界面层一般是指jsp页面、html页面等。

  业务逻辑层

    功能:负责处理功能模块的业务逻辑,以及界面层和数据层的数据流转。

    添加类的原则: 

        根据功能模块来添加类。比如有用户管理模块,那么则可以添加UserManagerService类。

  数据层

    功能:和数据库进行交互。

          一般在数据层会编写SQL语句;JDBCHibernatemybatis

    添加类的原则: 

        每张数据表均添加一个对应的数据操作类。比如用户表userinfo,则添加UserInfoDao类。

  实体层

    针对数据表创建出来的实体类;+ 用户自定义的一些实体类

3.各个层之间的调用关系

  界面层  调用  业务逻辑层; 

  业务逻辑层  调用  数据层;  

  数据层  操作  数据库; 

  注意:调用的意思,就是在代码中创建对应的类对象,然后通过对象调用方法。

4.分层开发的优缺点

  优点: 

  1、开发人员可以只关注整个结构中的其中某一层;

  2、可以很容易的用新的实现来替换原有层次的实现;

  3、可以降低层与层之间的依赖;

  4、利于各层逻辑的复用。

  缺点: 

  1、降低了系统的性能

  2、增加了程序的复杂度

  3、有时会导致级联的修改。

0 0
原创粉丝点击