为了方便修改和后续的包装套路
首先用户访问的页面从web.xml找到
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
欢迎页面设置,这个可以设置有限访问的页面,这里是index.html
那么接下来用户可以通过index.html发出的亲求
如form表单提交的地址/manage/user/index映射到UserServlet去获取数据
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.linyi.controller.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/manage/user/index</url-pattern>
</servlet-mapping>
然后UiserServlet继承HttpServlt
复写doGet或doPost方法
public class UserServlet extends HttpServlet {
//IUserService iUserService = new UserServiceImpl();
IUserService iUserService = BeanFactory.getInstance("userService",IUserService.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> users = iUserService.getUsers();
req.setAttribute("users",users);
this.getServletConfig().getServletContext().getRequestDispatcher("/users/index.jsp").forward(req,resp);
}
}
这里调用了UserServiceImpl获取并转发到users/index.jsp页面
之后来到UserServiceImpl
IUserDao iUserDao = BeanFactory.getInstance("userDao",IUserDao.class);
@Override
public List<User> getUsers() {
return iUserDao.getAllUsers();
}
@Override
public void addUser(String name) throws UserException{
int re = iUserDao.addUser(name);
if(re!=0){
throw new UserException("插入数据异常"+name);
}
}
public void updateUser(int id,String name){
iUserDao.updateUser(id,name);
}
@Override
public User selectUser(int id) throws UserException {
User user = iUserDao.selectUser(id);
if(user == null){
throw new UserException("未查到数据"+id);
}else{
return user;
}
}
这里调用了UserDaoImpl来获取数值
这个UserDao用来操作数据库
实例化出User这个包装类,在依次拿到值后返回页面
public List<User> getAllUsers() {
//连接数据库
List<User> users = new ArrayList<User>();
//连接数据库
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
String sql = "SELECT * FROM emp ";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery(); while(resultSet.next()){
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
User user = new User(id,name);
users.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return users;
} @Override
public int addUser(String name) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
String sql = "INSERT INTO emp VALUES('"+name+"') ";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
prepareStatement.execute();
} catch (Exception e) {
e.printStackTrace();
return -1;
}
return 0;
}
public void updateUser(int id,String name) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
String sql = "UPDATE emp set name='"+name+"' where id="+id+"";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
prepareStatement.execute();
} catch (Exception e) {
e.printStackTrace();
}
} @Override
public User selectUser(int id) {
User user = null;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
String sql = "SELECT* FROM emp WHERE `id`="+id;
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet set = prepareStatement.executeQuery();
while (set.next()){
int id2 = set.getInt(1);
String name = set.getString(2);
user = new User(id2,name);
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
requestScope.message 使用方式
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.message}
</body>
</html>
注意:
requestScope是el表达式的隐含对象,和变量作用域差不多。 el表达式的隐含对象包括: pageScope,requestScope,sessionScope,applicationScope 例如:${message} el会依次到pageScope,requestScope,sessionScope,applicationScope中寻找,直到找到为止。 如果写成${requestScope.message}的形式,将会缩小范围只在requestScope中查找message。
表示变量的作用域,一共4种:
pageScope:表示变量只能在本页面使用。
requestScope:表示变量能在本次请求中使用。
sessionScope:表示变量能在本次会话中使用。
applicationScope:表示变量能在整个应用程序中使用。
<link href="resources/plugins/bootstrap-3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
bottstrap.css包http://www.bootcss.com/一个整合了很多特效的工具
<link href="resources/plugins/material-design-iconic-font-2.2.0/css/material-design-iconic-font.min.css" rel="stylesheet"/>
用于图标的包
<link href="resources/plugins/waves-0.7.5/waves.min.css" rel="stylesheet"/>
点击按钮或div可以显示波浪效果的包
<link href="resources/plugins/checkbix/css/checkbix.min.css" rel="stylesheet"/>
选框工具特效的包
placeholder 用于设置文本框默认文字
1、 规定输入字段是否应该启用自动完成功能 属性值on off
自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。
注释:autocomplete 属性适用于 form,以及下面的 input 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。
2、required="required"规定必需在提交之前填写输入字段。
如果使用该属性,则字段是必填(或必选)的。
注释:required 属性适用于以下 input类型:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。
3、aotofocus 自动获取焦点
4、style
input:focus
{
background-color:yellow;
}
/style
当前input获取焦点背景色变黄色 失去焦点变默认