admin管理员组文章数量:1574574
Web开发学习——servet技术学习(包含java代码)
什么是servet
sun公司制订的一种用来扩展web服务器功能的组件规范。
扩展web服务器功能:
早期的web服务器(比如apache、iis等)只能够处理静态资源的 请求(即需要事先将html准备好),不能够处理动态资源的请求( 即需要通过计算,生成html)。
早期使用CGI程序来扩展。
注(了解):
CGI(Common Gateway Interace 通用网关接口): 可以使用perl、c、c++等语言来开发符合CGI接口要求的程序来 扩展web服务器的功能,但是,开发繁琐,并且可移植性比较差, 现在用得很少了。
现在使用Servlet来扩展。
组件规范:
a.什么是组件?
符合规范,实现部分功能,并且需要部署到相应的容器里面才能 运行的软件模块。
Servlet就是一个组件,需要部署到Servlet容器里面才能运行。
b.什么是容器?
符合规范,为组件提供运行环境的程序。
Tomcat就是一个符合Servlet规范的容器,为Servlet提供运行 环境(即提供网络相关的服务)。
写一个servlet步骤
基本步骤
step1.写一个java类,实现Servlet接口或者继承 HttpServlet类。
step2.编译。
step3.打包。 创建一个具有如下结构的文件夹: appname(应用名) WEB-INF classes(放.class文件) lib(放.jar文件,可以没有) web.xml (部署描述文件)
step4.部署。
将step3创建好的整个文件夹拷贝到容器。
注:
可以使用jar命令将step3创建好的整个文件夹
压缩成.war为后缀的文件,然后再拷贝。
step5.启动容器,访问Servlet。
http://ip:port/appname/url-pattern
注:
url-pattern在web.xml中设置。
用maven工程创建 in eclipse
step1.创建一个maven工程,注意要选war
step2.工程建立好之后,会有异常提示,是因为默认情况下,工程 没有web.xml文件,根据提示邮件生成web.xml
step3.指定运行环境,运行环境提供了我们开发servlet需要的一些包
添加tomcat容器
step4.添加Servlet类,并在web.xml文件中添加部署描述信息
1、创建Servlet类
package web;
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 HelloServlet(){
System.out.println("HelloServlet's constructor");
}
/**
* 当容器(比如tomcat)收到请求之后,
* 会帮我们解析请求数据包,并且将解析到的
* 数据存放到request对象里面(开发人员
* 只需要调用request对象的方法就可以获得
* 请求数据包中的数据),同时,容器还会创建
* response对象(开发人员只需要将处理结果存放
* 到response对象上,容器会用我们创建响应数据
* 包并发送)。
* 接下来,容器会调用service方法,并且将
* request对象和response对象作为方法的参数
* 传进来。
*/
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
/*
* 读取请求参数值。
* 请求参数名不能写错,否则会获得null值。
*/
String name = request.getParameter("name");
String age = request.getParameter("age");
int age1 = Integer.parseInt(age) + 1;
/*
* 设置content-type消息头,告诉
* 浏览器,服务器返回的数据类型。
*/
response.setContentType("text/html");
/*
* 通过response对象获得输出流。
*/
PrintWriter out = response.getWriter();
/*
* 将数据存放到response对象上。
* 容器会从response对象上获取数据,
* 创建响应数据包,然后将响应数据包
* 发送给浏览器。
*/
out.println("<h1>Hello " + name + "</h1>");
out.println("<h1>age:" + age + "</h1>");
out.close();
}
}
2 web.xml
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
step5.部署应用,启动容器
step6.打开浏览器,按照http://ip:port/appname/url-pattern 访问Servlet。
处理乱码问题
Servlet输出中文
a.为什么会有乱码?
因为out.println方法,默认情况下,会使用iso-8859-1来 编码。
b.如何解决?
response.setContentType( "text/html;charset=utf-8");
表单包含有中文参数值,如何处理
(1)为什么会有乱码?
提交表单时,浏览器会按照打开该表单所在的页面时的字符集 对中文进行编码,比如使用utf-8来编码;而服务器端默认会使用 iso-8859-1来解码,所以会产生乱码。
(2)如何解决?
1)情形一: post请求
/* * 这行代码要添加到所有的getParameter方法的 * 最前面。 * 作用是告诉服务器,针对post请求,使用 * 哪种字符集来进行解码。 */
request.setCharacterEncoding("utf-8");
2)情形二: get请求
如果是tomcat8以下的版本,需要修改server.xml, <Connector URIEncoding="utf-8" />。 作用是,告诉服务器,针对get请求,使用utf-8来解码。
如果是tomcat8及以上的版本,对于get请求,默认就是使用utf-8来解码的。
Servlet访问数据库(使用jdbc)
step1.建库、建表
step2.导包。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
step3.添加DBUtils类和jdbc.properties文件。
step4.在Servlet类里面,使用jdbc api访问数据库。
封装DAO类
-DBUties工具类
package util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.apachemons.dbcp.BasicDataSource;
public class DBUtils {
private static BasicDataSource ds;
static{
//创建数据源对象
ds = new BasicDataSource();
//读取配置文件
Properties p = new Properties();
InputStream ips =
DBUtils.class.getClassLoader()
.getResourceAsStream("jdbc.properties");
try {
p.load(ips);
String driver = p.getProperty("driver");
String url = p.getProperty("url");
String username = p.getProperty("username");
String password = p.getProperty("password");
//设置连接信息
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setInitialSize(3);//设置初始连接数量
ds.setMaxActive(5);//设置最大连接数量
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConn() throws Exception{
//获取连接对象 注意导包别导错 异常抛出
Connection conn = ds.getConnection();
System.out.println(conn);
return conn;
}
/**
* 按照jdbc规范,连接关闭的时候,对应的
* Statement以及ResultSet应该自动关闭。
* 但是,有一些连接池的实现,没有完全符合
* 规范,导致关闭连接时,对应的Statement
* 及ResultSet并没有关闭。所以,建议在
* 关闭连接时,最好手动关闭Statement及
* ResultSet。
*
*/
public static void close(ResultSet rs,
Statement stat,Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
}
}
if(stat != null){
try {
stat.close();
} catch (SQLException e) {
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
-jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jsd1902db?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
-DAO类
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import entity.User;
import util.DBUtils;
/**
* DAO类:
* 封装了数据访问逻辑。
*
*/
public class UserDAO {
/**
* 将所有用户信息查询出来。
*/
public List<User> findAll()
throws Exception{
List<User> users =
new ArrayList<User>();
Connection conn = null;
PreparedStatement stat = null;
ResultSet rs = null;
try {
conn = DBUtils.getConn();
stat = conn.prepareStatement(
"SELECT * FROM t_user");
rs = stat.executeQuery();
while(rs.next()){
User user = new User();
版权声明:本文标题:Web开发学习——servet技术学习(包含java代码) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727772384a1128713.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论